diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3116734..05a72e2 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -22,8 +22,9 @@ jobs: - run: pnpm install - run: pnpm check - test: + test-unit: name: Unit Tests + needs: check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -36,3 +37,20 @@ jobs: cache: pnpm - run: pnpm install - run: pnpm test:unit + + test-e2e: + name: E2E Tests + needs: check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v3 + with: + version: latest + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + - run: pnpm install + - run: pnpm exec playwright install --with-deps + - run: pnpm test:e2e \ No newline at end of file diff --git a/biome.json b/biome.json deleted file mode 100644 index 53aa730..0000000 --- a/biome.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/2.4.3/schema.json", - "files": { - "includes": ["src/**", "index.ts"], - "ignoreUnknown": true - }, - "vcs": { - "enabled": true, - "clientKind": "git", - "useIgnoreFile": true - }, - "formatter": { - "enabled": false - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true, - "correctness": { - "useJsxKeyInIterable": "off" - }, - "style": { - "useImportType": "off" - } - } - }, - "assist": { - "actions": { - "source": { - "organizeImports": "off" - } - } - }, - "javascript": { - "formatter": { - "quoteStyle": "double", - "trailingCommas": "es5", - "semicolons": "asNeeded" - } - }, - "html": { - "experimentalFullSupportEnabled": true - } -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..e0a8103 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,26 @@ +import js from "@eslint/js" +import prettier from "eslint-config-prettier" +import ts from "typescript-eslint" + +export default [ + js.configs.recommended, + ...ts.configs.recommended, + { + rules: { + "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }], + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/triple-slash-reference": "off", + }, + }, + { + files: ["tests/**/*.ts"], + rules: { + "@typescript-eslint/no-explicit-any": "off", + }, + }, + prettier, + { + ignores: ["dist/**", "node_modules/**", "tests/e2e/fixtures/**/.astro/**"], + }, +] diff --git a/package.json b/package.json index 6b6d7e1..385ce9a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mannisto/astro-metadata", - "version": "1.0.0", + "version": "1.0.1", "description": "Astro components for managing your page head — metadata, social sharing, favicons, and SEO.", "license": "MIT", "type": "module", @@ -24,24 +24,28 @@ "index.ts" ], "scripts": { - "lint": "biome lint ./src ./index.ts", + "lint": "eslint . --fix", "format": "prettier --write .", - "check": "biome lint ./src ./index.ts && prettier --check .", + "check": "eslint . && prettier --check .", "test": "pnpm run test:unit && pnpm run test:e2e", "test:unit": "vitest run", "test:e2e": "playwright test" }, "peerDependencies": { - "astro": "^4.3.0 || ^5.0.0" + "astro": "^4.3.0 || ^5.0.0 || ^6.0.0" }, "devDependencies": { - "@biomejs/biome": "^2.4.3", + "@eslint/js": "^10.0.1", + "@ianvs/prettier-plugin-sort-imports": "^4.7.1", "@playwright/test": "^1.58.2", - "@types/node": "^25.3.0", - "astro": "^5.17.2", + "@types/node": "^22.19.15", + "astro": "^5.18.1", + "eslint": "^10.0.3", + "eslint-config-prettier": "^10.1.8", "prettier": "^3.8.1", "prettier-plugin-astro": "^0.14.1", "typescript": "^5.9.3", - "vitest": "^4.0.18" + "typescript-eslint": "^8.57.0", + "vitest": "^4.1.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e089f0d..aa9d34a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,18 +7,27 @@ settings: importers: .: devDependencies: - "@biomejs/biome": - specifier: ^2.4.3 - version: 2.4.3 + "@eslint/js": + specifier: ^10.0.1 + version: 10.0.1(eslint@10.0.3) + "@ianvs/prettier-plugin-sort-imports": + specifier: ^4.7.1 + version: 4.7.1(prettier@3.8.1) "@playwright/test": specifier: ^1.58.2 version: 1.58.2 "@types/node": - specifier: ^25.3.0 - version: 25.3.0 + specifier: ^22.19.15 + version: 22.19.15 astro: - specifier: ^5.17.2 - version: 5.17.2(@types/node@25.3.0)(rollup@4.57.1)(typescript@5.9.3) + specifier: ^5.18.1 + version: 5.18.1(@types/node@22.19.15)(rollup@4.57.1)(typescript@5.9.3) + eslint: + specifier: ^10.0.3 + version: 10.0.3 + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.0.3) prettier: specifier: ^3.8.1 version: 3.8.1 @@ -28,9 +37,12 @@ importers: typescript: specifier: ^5.9.3 version: 5.9.3 + typescript-eslint: + specifier: ^8.57.0 + version: 8.57.0(eslint@10.0.3)(typescript@5.9.3) vitest: - specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0) + specifier: ^4.1.0 + version: 4.1.0(@types/node@22.19.15)(vite@6.4.1(@types/node@22.19.15)) tests/e2e/fixtures/basic: dependencies: @@ -39,7 +51,7 @@ importers: version: link:../../../.. astro: specifier: ^5.0.0 - version: 5.17.2(@types/node@25.3.0)(rollup@4.57.1)(typescript@5.9.3) + version: 5.17.2(@types/node@25.5.0)(rollup@4.57.1)(typescript@5.9.3) packages: "@astrojs/compiler@2.13.1": @@ -54,12 +66,24 @@ packages: integrity: sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==, } + "@astrojs/internal-helpers@0.7.6": + resolution: + { + integrity: sha512-GOle7smBWKfMSP8osUIGOlB5kaHdQLV3foCsf+5Q9Wsuu+C6Fs3Ez/ttXmhjZ1HkSgsogcM1RXSjjOVieHq16Q==, + } + "@astrojs/markdown-remark@6.3.10": resolution: { integrity: sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==, } + "@astrojs/markdown-remark@6.3.11": + resolution: + { + integrity: sha512-hcaxX/5aC6lQgHeGh1i+aauvSwIT6cfyFjKWvExYSxUhZZBBdvCliOtu06gbQyhbe0pGJNoNmqNlQZ5zYUuIyQ==, + } + "@astrojs/prism@3.3.0": resolution: { @@ -74,118 +98,69 @@ packages: } engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0 } - "@babel/helper-string-parser@7.27.1": + "@babel/code-frame@7.29.0": resolution: { - integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, + integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==, } engines: { node: ">=6.9.0" } - "@babel/helper-validator-identifier@7.28.5": + "@babel/generator@7.29.1": resolution: { - integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==, + integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==, } engines: { node: ">=6.9.0" } - "@babel/parser@7.29.0": + "@babel/helper-globals@7.28.0": resolution: { - integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==, - } - engines: { node: ">=6.0.0" } - hasBin: true - - "@babel/types@7.29.0": - resolution: - { - integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==, + integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==, } engines: { node: ">=6.9.0" } - "@biomejs/biome@2.4.3": - resolution: - { - integrity: sha512-cBrjf6PNF6yfL8+kcNl85AjiK2YHNsbU0EvDOwiZjBPbMbQ5QcgVGFpjD0O52p8nec5O8NYw7PKw3xUR7fPAkQ==, - } - engines: { node: ">=14.21.3" } - hasBin: true - - "@biomejs/cli-darwin-arm64@2.4.3": - resolution: - { - integrity: sha512-eOafSFlI/CF4id2tlwq9CVHgeEqvTL5SrhWff6ZORp6S3NL65zdsR3ugybItkgF8Pf4D9GSgtbB6sE3UNgOM9w==, - } - engines: { node: ">=14.21.3" } - cpu: [arm64] - os: [darwin] - - "@biomejs/cli-darwin-x64@2.4.3": - resolution: - { - integrity: sha512-V2+av4ilbWcBMNufTtMMXVW00nPwyIjI5qf7n9wSvUaZ+tt0EvMGk46g9sAFDJBEDOzSyoRXiSP6pCvKTOEbPA==, - } - engines: { node: ">=14.21.3" } - cpu: [x64] - os: [darwin] - - "@biomejs/cli-linux-arm64-musl@2.4.3": + "@babel/helper-string-parser@7.27.1": resolution: { - integrity: sha512-QuFzvsGo8BA4Xm7jGX5idkw6BqFblcCPySMTvq0AhGYnhUej5VJIDJbmTKfHqwjHepZiC4fA+T5i6wmiZolZNw==, + integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, } - engines: { node: ">=14.21.3" } - cpu: [arm64] - os: [linux] - libc: [musl] + engines: { node: ">=6.9.0" } - "@biomejs/cli-linux-arm64@2.4.3": + "@babel/helper-validator-identifier@7.28.5": resolution: { - integrity: sha512-0m+O0x9FgK99FAwDK+fiDtjs2wnqq7bvfj17KJVeCkTwT/liI+Q9njJG7lwXK0iSJVXeFNRIxukpVI3SifMYAA==, + integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==, } - engines: { node: ">=14.21.3" } - cpu: [arm64] - os: [linux] - libc: [glibc] + engines: { node: ">=6.9.0" } - "@biomejs/cli-linux-x64-musl@2.4.3": + "@babel/parser@7.29.0": resolution: { - integrity: sha512-qEc0OCpj/uytruQ4wLM0yWNJLZy0Up8H1Er5MW3SrstqM6J2d4XqdNA86xzCy8MQCHpoVZ3lFye3GBlIL4/ljw==, + integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==, } - engines: { node: ">=14.21.3" } - cpu: [x64] - os: [linux] - libc: [musl] + engines: { node: ">=6.0.0" } + hasBin: true - "@biomejs/cli-linux-x64@2.4.3": + "@babel/template@7.28.6": resolution: { - integrity: sha512-NVqh0saIU0u5OfOp/0jFdlKRE59+XyMvWmtx0f6Nm/2OpdxBl04coRIftBbY9d1gfu+23JVv4CItAqPYrjYh5w==, + integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==, } - engines: { node: ">=14.21.3" } - cpu: [x64] - os: [linux] - libc: [glibc] + engines: { node: ">=6.9.0" } - "@biomejs/cli-win32-arm64@2.4.3": + "@babel/traverse@7.29.0": resolution: { - integrity: sha512-gRO96vrIARilv/Cp2ZnmNNL5LSZg3RO75GPp13hsLO3N4YVpE7saaMDp2bcyV48y2N2Pbit1brkGVGta0yd6VQ==, + integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==, } - engines: { node: ">=14.21.3" } - cpu: [arm64] - os: [win32] + engines: { node: ">=6.9.0" } - "@biomejs/cli-win32-x64@2.4.3": + "@babel/types@7.29.0": resolution: { - integrity: sha512-vSm/vOJe06pf14aGHfHl3Ar91Nlx4YYmohElDJ+17UbRwe99n987S/MhAlQOkONqf1utJor04ChkCPmKb8SWdw==, + integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==, } - engines: { node: ">=14.21.3" } - cpu: [x64] - os: [win32] + engines: { node: ">=6.9.0" } "@capsizecss/unpack@4.0.0": resolution: @@ -194,10 +169,10 @@ packages: } engines: { node: ">=18" } - "@emnapi/runtime@1.8.1": + "@emnapi/runtime@1.9.0": resolution: { - integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==, + integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==, } "@esbuild/aix-ppc64@0.25.12": @@ -218,6 +193,15 @@ packages: cpu: [ppc64] os: [aix] + "@esbuild/aix-ppc64@0.27.4": + resolution: + { + integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [aix] + "@esbuild/android-arm64@0.25.12": resolution: { @@ -236,6 +220,15 @@ packages: cpu: [arm64] os: [android] + "@esbuild/android-arm64@0.27.4": + resolution: + { + integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [android] + "@esbuild/android-arm@0.25.12": resolution: { @@ -254,6 +247,15 @@ packages: cpu: [arm] os: [android] + "@esbuild/android-arm@0.27.4": + resolution: + { + integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [android] + "@esbuild/android-x64@0.25.12": resolution: { @@ -272,6 +274,15 @@ packages: cpu: [x64] os: [android] + "@esbuild/android-x64@0.27.4": + resolution: + { + integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [android] + "@esbuild/darwin-arm64@0.25.12": resolution: { @@ -290,6 +301,15 @@ packages: cpu: [arm64] os: [darwin] + "@esbuild/darwin-arm64@0.27.4": + resolution: + { + integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [darwin] + "@esbuild/darwin-x64@0.25.12": resolution: { @@ -308,6 +328,15 @@ packages: cpu: [x64] os: [darwin] + "@esbuild/darwin-x64@0.27.4": + resolution: + { + integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [darwin] + "@esbuild/freebsd-arm64@0.25.12": resolution: { @@ -326,6 +355,15 @@ packages: cpu: [arm64] os: [freebsd] + "@esbuild/freebsd-arm64@0.27.4": + resolution: + { + integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [freebsd] + "@esbuild/freebsd-x64@0.25.12": resolution: { @@ -344,6 +382,15 @@ packages: cpu: [x64] os: [freebsd] + "@esbuild/freebsd-x64@0.27.4": + resolution: + { + integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [freebsd] + "@esbuild/linux-arm64@0.25.12": resolution: { @@ -362,6 +409,15 @@ packages: cpu: [arm64] os: [linux] + "@esbuild/linux-arm64@0.27.4": + resolution: + { + integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [linux] + "@esbuild/linux-arm@0.25.12": resolution: { @@ -380,6 +436,15 @@ packages: cpu: [arm] os: [linux] + "@esbuild/linux-arm@0.27.4": + resolution: + { + integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [linux] + "@esbuild/linux-ia32@0.25.12": resolution: { @@ -398,6 +463,15 @@ packages: cpu: [ia32] os: [linux] + "@esbuild/linux-ia32@0.27.4": + resolution: + { + integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [linux] + "@esbuild/linux-loong64@0.25.12": resolution: { @@ -416,6 +490,15 @@ packages: cpu: [loong64] os: [linux] + "@esbuild/linux-loong64@0.27.4": + resolution: + { + integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==, + } + engines: { node: ">=18" } + cpu: [loong64] + os: [linux] + "@esbuild/linux-mips64el@0.25.12": resolution: { @@ -434,6 +517,15 @@ packages: cpu: [mips64el] os: [linux] + "@esbuild/linux-mips64el@0.27.4": + resolution: + { + integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==, + } + engines: { node: ">=18" } + cpu: [mips64el] + os: [linux] + "@esbuild/linux-ppc64@0.25.12": resolution: { @@ -452,6 +544,15 @@ packages: cpu: [ppc64] os: [linux] + "@esbuild/linux-ppc64@0.27.4": + resolution: + { + integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [linux] + "@esbuild/linux-riscv64@0.25.12": resolution: { @@ -470,6 +571,15 @@ packages: cpu: [riscv64] os: [linux] + "@esbuild/linux-riscv64@0.27.4": + resolution: + { + integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==, + } + engines: { node: ">=18" } + cpu: [riscv64] + os: [linux] + "@esbuild/linux-s390x@0.25.12": resolution: { @@ -488,6 +598,15 @@ packages: cpu: [s390x] os: [linux] + "@esbuild/linux-s390x@0.27.4": + resolution: + { + integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==, + } + engines: { node: ">=18" } + cpu: [s390x] + os: [linux] + "@esbuild/linux-x64@0.25.12": resolution: { @@ -506,6 +625,15 @@ packages: cpu: [x64] os: [linux] + "@esbuild/linux-x64@0.27.4": + resolution: + { + integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [linux] + "@esbuild/netbsd-arm64@0.25.12": resolution: { @@ -524,6 +652,15 @@ packages: cpu: [arm64] os: [netbsd] + "@esbuild/netbsd-arm64@0.27.4": + resolution: + { + integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [netbsd] + "@esbuild/netbsd-x64@0.25.12": resolution: { @@ -542,6 +679,15 @@ packages: cpu: [x64] os: [netbsd] + "@esbuild/netbsd-x64@0.27.4": + resolution: + { + integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [netbsd] + "@esbuild/openbsd-arm64@0.25.12": resolution: { @@ -560,6 +706,15 @@ packages: cpu: [arm64] os: [openbsd] + "@esbuild/openbsd-arm64@0.27.4": + resolution: + { + integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openbsd] + "@esbuild/openbsd-x64@0.25.12": resolution: { @@ -578,6 +733,15 @@ packages: cpu: [x64] os: [openbsd] + "@esbuild/openbsd-x64@0.27.4": + resolution: + { + integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [openbsd] + "@esbuild/openharmony-arm64@0.25.12": resolution: { @@ -596,6 +760,15 @@ packages: cpu: [arm64] os: [openharmony] + "@esbuild/openharmony-arm64@0.27.4": + resolution: + { + integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openharmony] + "@esbuild/sunos-x64@0.25.12": resolution: { @@ -614,6 +787,15 @@ packages: cpu: [x64] os: [sunos] + "@esbuild/sunos-x64@0.27.4": + resolution: + { + integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [sunos] + "@esbuild/win32-arm64@0.25.12": resolution: { @@ -632,6 +814,15 @@ packages: cpu: [arm64] os: [win32] + "@esbuild/win32-arm64@0.27.4": + resolution: + { + integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [win32] + "@esbuild/win32-ia32@0.25.12": resolution: { @@ -650,6 +841,15 @@ packages: cpu: [ia32] os: [win32] + "@esbuild/win32-ia32@0.27.4": + resolution: + { + integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [win32] + "@esbuild/win32-x64@0.25.12": resolution: { @@ -668,10 +868,131 @@ packages: cpu: [x64] os: [win32] - "@img/colour@1.0.0": + "@esbuild/win32-x64@0.27.4": + resolution: + { + integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [win32] + + "@eslint-community/eslint-utils@4.9.1": + resolution: + { + integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + "@eslint-community/regexpp@4.12.2": + resolution: + { + integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + + "@eslint/config-array@0.23.3": + resolution: + { + integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + "@eslint/config-helpers@0.5.3": + resolution: + { + integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + "@eslint/core@1.1.1": + resolution: + { + integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + "@eslint/js@10.0.1": + resolution: + { + integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true + + "@eslint/object-schema@3.0.3": + resolution: + { + integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + "@eslint/plugin-kit@0.6.1": resolution: { - integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==, + integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + "@humanfs/core@0.19.1": + resolution: + { + integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==, + } + engines: { node: ">=18.18.0" } + + "@humanfs/node@0.16.7": + resolution: + { + integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==, + } + engines: { node: ">=18.18.0" } + + "@humanwhocodes/module-importer@1.0.1": + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, + } + engines: { node: ">=12.22" } + + "@humanwhocodes/retry@0.4.3": + resolution: + { + integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, + } + engines: { node: ">=18.18" } + + "@ianvs/prettier-plugin-sort-imports@4.7.1": + resolution: + { + integrity: sha512-jmTNYGlg95tlsoG3JLCcuC4BrFELJtLirLAkQW/71lXSyOhVt/Xj7xWbbGcuVbNq1gwWgSyMrPjJc9Z30hynVw==, + } + peerDependencies: + "@prettier/plugin-oxc": ^0.0.4 || ^0.1.0 + "@vue/compiler-sfc": 2.7.x || 3.x + content-tag: ^4.0.0 + prettier: 2 || 3 || ^4.0.0-0 + prettier-plugin-ember-template-tag: ^2.1.0 + peerDependenciesMeta: + "@prettier/plugin-oxc": + optional: true + "@vue/compiler-sfc": + optional: true + content-tag: + optional: true + prettier-plugin-ember-template-tag: + optional: true + + "@img/colour@1.1.0": + resolution: + { + integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==, } engines: { node: ">=18" } @@ -896,12 +1217,31 @@ packages: cpu: [x64] os: [win32] + "@jridgewell/gen-mapping@0.3.13": + resolution: + { + integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, + } + + "@jridgewell/resolve-uri@3.1.2": + resolution: + { + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, + } + engines: { node: ">=6.0.0" } + "@jridgewell/sourcemap-codec@1.5.5": resolution: { integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, } + "@jridgewell/trace-mapping@0.3.31": + resolution: + { + integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, + } + "@oslojs/encoding@1.1.0": resolution: { @@ -1147,36 +1487,72 @@ packages: integrity: sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==, } + "@shikijs/core@3.23.0": + resolution: + { + integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==, + } + "@shikijs/engine-javascript@3.22.0": resolution: { integrity: sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==, } + "@shikijs/engine-javascript@3.23.0": + resolution: + { + integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==, + } + "@shikijs/engine-oniguruma@3.22.0": resolution: { integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==, } + "@shikijs/engine-oniguruma@3.23.0": + resolution: + { + integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==, + } + "@shikijs/langs@3.22.0": resolution: { integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==, } + "@shikijs/langs@3.23.0": + resolution: + { + integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==, + } + "@shikijs/themes@3.22.0": resolution: { integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==, } + "@shikijs/themes@3.23.0": + resolution: + { + integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==, + } + "@shikijs/types@3.22.0": resolution: { integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==, } + "@shikijs/types@3.23.0": + resolution: + { + integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==, + } + "@shikijs/vscode-textmate@10.0.2": resolution: { @@ -1207,6 +1583,12 @@ packages: integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==, } + "@types/esrecurse@4.3.1": + resolution: + { + integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==, + } + "@types/estree@1.0.8": resolution: { @@ -1219,6 +1601,12 @@ packages: integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==, } + "@types/json-schema@7.0.15": + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, + } + "@types/mdast@4.0.4": resolution: { @@ -1237,10 +1625,16 @@ packages: integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==, } - "@types/node@25.3.0": + "@types/node@22.19.15": + resolution: + { + integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==, + } + + "@types/node@25.5.0": resolution: { - integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==, + integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==, } "@types/unist@3.0.3": @@ -1249,61 +1643,158 @@ packages: integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==, } + "@typescript-eslint/eslint-plugin@8.57.0": + resolution: + { + integrity: sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + "@typescript-eslint/parser": ^8.57.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/parser@8.57.0": + resolution: + { + integrity: sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/project-service@8.57.0": + resolution: + { + integrity: sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/scope-manager@8.57.0": + resolution: + { + integrity: sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/tsconfig-utils@8.57.0": + resolution: + { + integrity: sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/type-utils@8.57.0": + resolution: + { + integrity: sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/types@8.57.0": + resolution: + { + integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/typescript-estree@8.57.0": + resolution: + { + integrity: sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/utils@8.57.0": + resolution: + { + integrity: sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/visitor-keys@8.57.0": + resolution: + { + integrity: sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + "@ungap/structured-clone@1.3.0": resolution: { integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==, } - "@vitest/expect@4.0.18": + "@vitest/expect@4.1.0": resolution: { - integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==, + integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==, } - "@vitest/mocker@4.0.18": + "@vitest/mocker@4.1.0": resolution: { - integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==, + integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==, } peerDependencies: msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - "@vitest/pretty-format@4.0.18": + "@vitest/pretty-format@4.1.0": + resolution: + { + integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==, + } + + "@vitest/runner@4.1.0": resolution: { - integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==, + integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==, } - "@vitest/runner@4.0.18": + "@vitest/snapshot@4.1.0": resolution: { - integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==, + integrity: sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==, } - "@vitest/snapshot@4.0.18": + "@vitest/spy@4.1.0": resolution: { - integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==, + integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==, } - "@vitest/spy@4.0.18": + "@vitest/utils@4.1.0": resolution: { - integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==, + integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==, } - "@vitest/utils@4.0.18": + acorn-jsx@5.3.2: resolution: { - integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==, + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn@8.15.0: resolution: @@ -1313,6 +1804,20 @@ packages: engines: { node: ">=0.4.0" } hasBin: true + acorn@8.16.0: + resolution: + { + integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==, + } + engines: { node: ">=0.4.0" } + hasBin: true + + ajv@6.14.0: + resolution: + { + integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==, + } + ansi-align@3.0.1: resolution: { @@ -1381,6 +1886,14 @@ packages: engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: ">=9.6.5", pnpm: ">=7.1.0" } hasBin: true + astro@5.18.1: + resolution: + { + integrity: sha512-m4VWilWZ+Xt6NPoYzC4CgGZim/zQUO7WFL0RHCH0AiEavF1153iC3+me2atDvXpf/yX4PyGUeD8wZLq1cirT3g==, + } + engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: ">=9.6.5", pnpm: ">=7.1.0" } + hasBin: true + axobject-query@4.1.0: resolution: { @@ -1394,6 +1907,13 @@ packages: integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==, } + balanced-match@4.0.4: + resolution: + { + integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==, + } + engines: { node: 18 || 20 || >=22 } + base-64@1.0.0: resolution: { @@ -1413,6 +1933,13 @@ packages: } engines: { node: ">=18" } + brace-expansion@5.0.4: + resolution: + { + integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==, + } + engines: { node: 18 || 20 || >=22 } + camelcase@8.0.0: resolution: { @@ -1505,6 +2032,12 @@ packages: integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==, } + convert-source-map@2.0.0: + resolution: + { + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, + } + cookie-es@1.2.2: resolution: { @@ -1518,6 +2051,13 @@ packages: } engines: { node: ">=18" } + cross-spawn@7.0.6: + resolution: + { + integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, + } + engines: { node: ">= 8" } + crossws@0.3.5: resolution: { @@ -1537,10 +2077,17 @@ packages: } engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: ">=7.0.0" } - css-tree@3.1.0: + css-tree@3.1.0: + resolution: + { + integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==, + } + engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0 } + + css-tree@3.2.1: resolution: { - integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==, + integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==, } engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0 } @@ -1584,6 +2131,12 @@ packages: integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==, } + deep-is@0.1.4: + resolution: + { + integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, + } + defu@6.1.4: resolution: { @@ -1623,6 +2176,12 @@ packages: integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==, } + devalue@5.6.4: + resolution: + { + integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==, + } + devlop@1.1.0: resolution: { @@ -1706,6 +2265,12 @@ packages: integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==, } + es-module-lexer@2.0.0: + resolution: + { + integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==, + } + esbuild@0.25.12: resolution: { @@ -1722,6 +2287,21 @@ packages: engines: { node: ">=18" } hasBin: true + esbuild@0.27.4: + resolution: + { + integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==, + } + engines: { node: ">=18" } + hasBin: true + + escape-string-regexp@4.0.0: + resolution: + { + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, + } + engines: { node: ">=10" } + escape-string-regexp@5.0.0: resolution: { @@ -1729,6 +2309,77 @@ packages: } engines: { node: ">=12" } + eslint-config-prettier@10.1.8: + resolution: + { + integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==, + } + hasBin: true + peerDependencies: + eslint: ">=7.0.0" + + eslint-scope@9.1.2: + resolution: + { + integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + eslint-visitor-keys@3.4.3: + resolution: + { + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + eslint-visitor-keys@5.0.1: + resolution: + { + integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + eslint@10.0.3: + resolution: + { + integrity: sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + hasBin: true + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true + + espree@11.2.0: + resolution: + { + integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==, + } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + + esquery@1.7.0: + resolution: + { + integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==, + } + engines: { node: ">=0.10" } + + esrecurse@4.3.0: + resolution: + { + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, + } + engines: { node: ">=4.0" } + + estraverse@5.3.0: + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + } + engines: { node: ">=4.0" } + estree-walker@2.0.2: resolution: { @@ -1741,6 +2392,13 @@ packages: integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, } + esutils@2.0.3: + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, + } + engines: { node: ">=0.10.0" } + eventemitter3@5.0.4: resolution: { @@ -1760,6 +2418,24 @@ packages: integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, } + fast-deep-equal@3.1.3: + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + } + + fast-json-stable-stringify@2.1.0: + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, + } + + fast-levenshtein@2.0.6: + resolution: + { + integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, + } + fdir@6.5.0: resolution: { @@ -1772,6 +2448,33 @@ packages: picomatch: optional: true + file-entry-cache@8.0.0: + resolution: + { + integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, + } + engines: { node: ">=16.0.0" } + + find-up@5.0.0: + resolution: + { + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, + } + engines: { node: ">=10" } + + flat-cache@4.0.1: + resolution: + { + integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, + } + engines: { node: ">=16" } + + flatted@3.4.1: + resolution: + { + integrity: sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==, + } + flattie@1.1.1: resolution: { @@ -1808,10 +2511,10 @@ packages: engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } os: [darwin] - get-east-asian-width@1.4.0: + get-east-asian-width@1.5.0: resolution: { - integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==, + integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==, } engines: { node: ">=18" } @@ -1821,6 +2524,13 @@ packages: integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==, } + glob-parent@6.0.2: + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, + } + engines: { node: ">=10.13.0" } + h3@1.15.5: resolution: { @@ -1905,12 +2615,33 @@ packages: integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==, } + ignore@5.3.2: + resolution: + { + integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, + } + engines: { node: ">= 4" } + + ignore@7.0.5: + resolution: + { + integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==, + } + engines: { node: ">= 4" } + import-meta-resolve@4.2.0: resolution: { integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==, } + imurmurhash@0.1.4: + resolution: + { + integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, + } + engines: { node: ">=0.8.19" } + iron-webcrypto@1.2.1: resolution: { @@ -1925,6 +2656,13 @@ packages: engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } hasBin: true + is-extglob@2.1.1: + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: ">=0.10.0" } + is-fullwidth-code-point@3.0.0: resolution: { @@ -1932,6 +2670,13 @@ packages: } engines: { node: ">=8" } + is-glob@4.0.3: + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: ">=0.10.0" } + is-inside-container@1.0.0: resolution: { @@ -1954,6 +2699,18 @@ packages: } engines: { node: ">=16" } + isexe@2.0.0: + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } + + js-tokens@4.0.0: + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } + js-yaml@4.1.1: resolution: { @@ -1961,6 +2718,38 @@ packages: } hasBin: true + jsesc@3.1.0: + resolution: + { + integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, + } + engines: { node: ">=6" } + hasBin: true + + json-buffer@3.0.1: + resolution: + { + integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, + } + + json-schema-traverse@0.4.1: + resolution: + { + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, + } + + json-stable-stringify-without-jsonify@1.0.1: + resolution: + { + integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, + } + + keyv@4.5.4: + resolution: + { + integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, + } + kleur@3.0.3: resolution: { @@ -1968,6 +2757,20 @@ packages: } engines: { node: ">=6" } + levn@0.4.1: + resolution: + { + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, + } + engines: { node: ">= 0.8.0" } + + locate-path@6.0.0: + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, + } + engines: { node: ">=10" } + longest-streak@3.1.0: resolution: { @@ -2089,6 +2892,12 @@ packages: integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==, } + mdn-data@2.27.1: + resolution: + { + integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==, + } + micromark-core-commonmark@2.0.3: resolution: { @@ -2257,6 +3066,13 @@ packages: integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==, } + minimatch@10.2.4: + resolution: + { + integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==, + } + engines: { node: 18 || 20 || >=22 } + mrmime@2.0.1: resolution: { @@ -2278,6 +3094,12 @@ packages: engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true + natural-compare@1.4.0: + resolution: + { + integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, + } + neotraverse@0.6.18: resolution: { @@ -2346,6 +3168,26 @@ packages: integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==, } + oniguruma-to-es@4.3.5: + resolution: + { + integrity: sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==, + } + + optionator@0.9.4: + resolution: + { + integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, + } + engines: { node: ">= 0.8.0" } + + p-limit@3.1.0: + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, + } + engines: { node: ">=10" } + p-limit@6.2.0: resolution: { @@ -2353,6 +3195,13 @@ packages: } engines: { node: ">=18" } + p-locate@5.0.0: + resolution: + { + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, + } + engines: { node: ">=10" } + p-queue@8.1.1: resolution: { @@ -2385,6 +3234,20 @@ packages: 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" } + pathe@2.0.3: resolution: { @@ -2440,6 +3303,13 @@ packages: } engines: { node: ^10 || ^12 || >=14 } + prelude-ls@1.2.1: + resolution: + { + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, + } + engines: { node: ">= 0.8.0" } + prettier-plugin-astro@0.14.1: resolution: { @@ -2475,6 +3345,13 @@ packages: integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==, } + punycode@2.3.1: + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: ">=6" } + radix3@1.1.2: resolution: { @@ -2612,6 +3489,13 @@ packages: } engines: { node: ">=11.0.0" } + sax@1.5.0: + resolution: + { + integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==, + } + engines: { node: ">=11.0.0" } + semver@7.7.4: resolution: { @@ -2627,12 +3511,32 @@ packages: } engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + 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" } + shiki@3.22.0: resolution: { integrity: sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==, } + shiki@3.23.0: + resolution: + { + integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==, + } + siginfo@2.0.0: resolution: { @@ -2671,10 +3575,10 @@ packages: integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, } - std-env@3.10.0: + std-env@4.0.0: resolution: { - integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==, + integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==, } string-width@4.2.3: @@ -2704,10 +3608,10 @@ packages: } engines: { node: ">=8" } - strip-ansi@7.1.2: + strip-ansi@7.2.0: resolution: { - integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==, + integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==, } engines: { node: ">=12" } @@ -2725,6 +3629,14 @@ packages: engines: { node: ">=16" } hasBin: true + svgo@4.0.1: + resolution: + { + integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==, + } + engines: { node: ">=16" } + hasBin: true + tiny-inflate@1.0.3: resolution: { @@ -2744,6 +3656,13 @@ packages: } engines: { node: ">=18" } + tinyexec@1.0.4: + resolution: + { + integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==, + } + engines: { node: ">=18" } + tinyglobby@0.2.15: resolution: { @@ -2751,10 +3670,10 @@ packages: } engines: { node: ">=12.0.0" } - tinyrainbow@3.0.3: + tinyrainbow@3.1.0: resolution: { - integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==, + integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==, } engines: { node: ">=14.0.0" } @@ -2764,11 +3683,20 @@ packages: integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==, } - trough@2.2.0: + trough@2.2.0: + resolution: + { + integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==, + } + + ts-api-utils@2.4.0: resolution: { - integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==, + integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==, } + engines: { node: ">=18.12" } + peerDependencies: + typescript: ">=4.8.4" tsconfck@3.1.6: resolution: @@ -2789,6 +3717,13 @@ packages: integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, } + type-check@0.4.0: + resolution: + { + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, + } + engines: { node: ">= 0.8.0" } + type-fest@4.41.0: resolution: { @@ -2796,6 +3731,16 @@ packages: } engines: { node: ">=16" } + typescript-eslint@8.57.0: + resolution: + { + integrity: sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.0.0" + typescript@5.9.3: resolution: { @@ -2822,6 +3767,12 @@ packages: integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==, } + undici-types@6.21.0: + resolution: + { + integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==, + } + undici-types@7.18.2: resolution: { @@ -2959,6 +3910,12 @@ packages: uploadthing: optional: true + uri-js@4.4.1: + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, + } + vfile-location@5.0.3: resolution: { @@ -3031,10 +3988,21 @@ packages: vite: optional: true - vitest@4.0.18: + vitefu@1.1.2: + resolution: + { + integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==, + } + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + + vitest@4.1.0: resolution: { - integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==, + integrity: sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==, } engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } hasBin: true @@ -3042,12 +4010,13 @@ packages: "@edge-runtime/vm": "*" "@opentelemetry/api": ^1.9.0 "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0 - "@vitest/browser-playwright": 4.0.18 - "@vitest/browser-preview": 4.0.18 - "@vitest/browser-webdriverio": 4.0.18 - "@vitest/ui": 4.0.18 + "@vitest/browser-playwright": 4.1.0 + "@vitest/browser-preview": 4.1.0 + "@vitest/browser-webdriverio": 4.1.0 + "@vitest/ui": 4.1.0 happy-dom: "*" jsdom: "*" + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: "@edge-runtime/vm": optional: true @@ -3081,6 +4050,14 @@ packages: } engines: { node: ">=4" } + which@2.0.2: + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + } + engines: { node: ">= 8" } + hasBin: true + why-is-node-running@2.3.0: resolution: { @@ -3096,6 +4073,13 @@ packages: } engines: { node: ">=18" } + word-wrap@1.2.5: + resolution: + { + integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, + } + engines: { node: ">=0.10.0" } + wrap-ansi@9.0.2: resolution: { @@ -3116,6 +4100,13 @@ packages: } engines: { node: ">=12" } + yocto-queue@0.1.0: + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, + } + engines: { node: ">=10" } + yocto-queue@1.2.2: resolution: { @@ -3171,6 +4162,8 @@ snapshots: "@astrojs/internal-helpers@0.7.5": {} + "@astrojs/internal-helpers@0.7.6": {} + "@astrojs/markdown-remark@6.3.10": dependencies: "@astrojs/internal-helpers": 0.7.5 @@ -3197,6 +4190,32 @@ snapshots: transitivePeerDependencies: - supports-color + "@astrojs/markdown-remark@6.3.11": + dependencies: + "@astrojs/internal-helpers": 0.7.6 + "@astrojs/prism": 3.3.0 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-text: 4.0.2 + import-meta-resolve: 4.2.0 + js-yaml: 4.1.1 + mdast-util-definitions: 6.0.0 + rehype-raw: 7.0.0 + rehype-stringify: 10.0.1 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remark-smartypants: 3.0.2 + shiki: 3.23.0 + smol-toml: 1.6.0 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + "@astrojs/prism@3.3.0": dependencies: prismjs: 1.30.0 @@ -3213,6 +4232,22 @@ snapshots: transitivePeerDependencies: - supports-color + "@babel/code-frame@7.29.0": + dependencies: + "@babel/helper-validator-identifier": 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + "@babel/generator@7.29.1": + dependencies: + "@babel/parser": 7.29.0 + "@babel/types": 7.29.0 + "@jridgewell/gen-mapping": 0.3.13 + "@jridgewell/trace-mapping": 0.3.31 + jsesc: 3.1.0 + + "@babel/helper-globals@7.28.0": {} + "@babel/helper-string-parser@7.27.1": {} "@babel/helper-validator-identifier@7.28.5": {} @@ -3221,51 +4256,34 @@ snapshots: dependencies: "@babel/types": 7.29.0 + "@babel/template@7.28.6": + dependencies: + "@babel/code-frame": 7.29.0 + "@babel/parser": 7.29.0 + "@babel/types": 7.29.0 + + "@babel/traverse@7.29.0": + dependencies: + "@babel/code-frame": 7.29.0 + "@babel/generator": 7.29.1 + "@babel/helper-globals": 7.28.0 + "@babel/parser": 7.29.0 + "@babel/template": 7.28.6 + "@babel/types": 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + "@babel/types@7.29.0": dependencies: "@babel/helper-string-parser": 7.27.1 "@babel/helper-validator-identifier": 7.28.5 - "@biomejs/biome@2.4.3": - optionalDependencies: - "@biomejs/cli-darwin-arm64": 2.4.3 - "@biomejs/cli-darwin-x64": 2.4.3 - "@biomejs/cli-linux-arm64": 2.4.3 - "@biomejs/cli-linux-arm64-musl": 2.4.3 - "@biomejs/cli-linux-x64": 2.4.3 - "@biomejs/cli-linux-x64-musl": 2.4.3 - "@biomejs/cli-win32-arm64": 2.4.3 - "@biomejs/cli-win32-x64": 2.4.3 - - "@biomejs/cli-darwin-arm64@2.4.3": - optional: true - - "@biomejs/cli-darwin-x64@2.4.3": - optional: true - - "@biomejs/cli-linux-arm64-musl@2.4.3": - optional: true - - "@biomejs/cli-linux-arm64@2.4.3": - optional: true - - "@biomejs/cli-linux-x64-musl@2.4.3": - optional: true - - "@biomejs/cli-linux-x64@2.4.3": - optional: true - - "@biomejs/cli-win32-arm64@2.4.3": - optional: true - - "@biomejs/cli-win32-x64@2.4.3": - optional: true - "@capsizecss/unpack@4.0.0": dependencies: fontkitten: 1.0.2 - "@emnapi/runtime@1.8.1": + "@emnapi/runtime@1.9.0": dependencies: tslib: 2.8.1 optional: true @@ -3276,157 +4294,291 @@ snapshots: "@esbuild/aix-ppc64@0.27.3": optional: true + "@esbuild/aix-ppc64@0.27.4": + optional: true + "@esbuild/android-arm64@0.25.12": optional: true "@esbuild/android-arm64@0.27.3": optional: true + "@esbuild/android-arm64@0.27.4": + optional: true + "@esbuild/android-arm@0.25.12": optional: true "@esbuild/android-arm@0.27.3": optional: true + "@esbuild/android-arm@0.27.4": + optional: true + "@esbuild/android-x64@0.25.12": optional: true "@esbuild/android-x64@0.27.3": optional: true + "@esbuild/android-x64@0.27.4": + optional: true + "@esbuild/darwin-arm64@0.25.12": optional: true "@esbuild/darwin-arm64@0.27.3": optional: true + "@esbuild/darwin-arm64@0.27.4": + optional: true + "@esbuild/darwin-x64@0.25.12": optional: true "@esbuild/darwin-x64@0.27.3": optional: true + "@esbuild/darwin-x64@0.27.4": + optional: true + "@esbuild/freebsd-arm64@0.25.12": optional: true "@esbuild/freebsd-arm64@0.27.3": optional: true + "@esbuild/freebsd-arm64@0.27.4": + optional: true + "@esbuild/freebsd-x64@0.25.12": optional: true "@esbuild/freebsd-x64@0.27.3": optional: true + "@esbuild/freebsd-x64@0.27.4": + optional: true + "@esbuild/linux-arm64@0.25.12": optional: true "@esbuild/linux-arm64@0.27.3": optional: true + "@esbuild/linux-arm64@0.27.4": + optional: true + "@esbuild/linux-arm@0.25.12": optional: true "@esbuild/linux-arm@0.27.3": optional: true + "@esbuild/linux-arm@0.27.4": + optional: true + "@esbuild/linux-ia32@0.25.12": optional: true "@esbuild/linux-ia32@0.27.3": optional: true + "@esbuild/linux-ia32@0.27.4": + optional: true + "@esbuild/linux-loong64@0.25.12": optional: true "@esbuild/linux-loong64@0.27.3": optional: true + "@esbuild/linux-loong64@0.27.4": + optional: true + "@esbuild/linux-mips64el@0.25.12": optional: true "@esbuild/linux-mips64el@0.27.3": optional: true + "@esbuild/linux-mips64el@0.27.4": + optional: true + "@esbuild/linux-ppc64@0.25.12": optional: true "@esbuild/linux-ppc64@0.27.3": optional: true + "@esbuild/linux-ppc64@0.27.4": + optional: true + "@esbuild/linux-riscv64@0.25.12": optional: true "@esbuild/linux-riscv64@0.27.3": optional: true + "@esbuild/linux-riscv64@0.27.4": + optional: true + "@esbuild/linux-s390x@0.25.12": optional: true "@esbuild/linux-s390x@0.27.3": optional: true + "@esbuild/linux-s390x@0.27.4": + optional: true + "@esbuild/linux-x64@0.25.12": optional: true "@esbuild/linux-x64@0.27.3": optional: true + "@esbuild/linux-x64@0.27.4": + optional: true + "@esbuild/netbsd-arm64@0.25.12": optional: true "@esbuild/netbsd-arm64@0.27.3": optional: true + "@esbuild/netbsd-arm64@0.27.4": + optional: true + "@esbuild/netbsd-x64@0.25.12": optional: true "@esbuild/netbsd-x64@0.27.3": optional: true + "@esbuild/netbsd-x64@0.27.4": + optional: true + "@esbuild/openbsd-arm64@0.25.12": optional: true "@esbuild/openbsd-arm64@0.27.3": optional: true + "@esbuild/openbsd-arm64@0.27.4": + optional: true + "@esbuild/openbsd-x64@0.25.12": optional: true "@esbuild/openbsd-x64@0.27.3": optional: true + "@esbuild/openbsd-x64@0.27.4": + optional: true + "@esbuild/openharmony-arm64@0.25.12": optional: true "@esbuild/openharmony-arm64@0.27.3": optional: true + "@esbuild/openharmony-arm64@0.27.4": + optional: true + "@esbuild/sunos-x64@0.25.12": optional: true "@esbuild/sunos-x64@0.27.3": optional: true + "@esbuild/sunos-x64@0.27.4": + optional: true + "@esbuild/win32-arm64@0.25.12": optional: true "@esbuild/win32-arm64@0.27.3": optional: true + "@esbuild/win32-arm64@0.27.4": + optional: true + "@esbuild/win32-ia32@0.25.12": optional: true "@esbuild/win32-ia32@0.27.3": optional: true + "@esbuild/win32-ia32@0.27.4": + optional: true + "@esbuild/win32-x64@0.25.12": optional: true "@esbuild/win32-x64@0.27.3": optional: true - "@img/colour@1.0.0": + "@esbuild/win32-x64@0.27.4": + optional: true + + "@eslint-community/eslint-utils@4.9.1(eslint@10.0.3)": + dependencies: + eslint: 10.0.3 + eslint-visitor-keys: 3.4.3 + + "@eslint-community/regexpp@4.12.2": {} + + "@eslint/config-array@0.23.3": + dependencies: + "@eslint/object-schema": 3.0.3 + debug: 4.4.3 + minimatch: 10.2.4 + transitivePeerDependencies: + - supports-color + + "@eslint/config-helpers@0.5.3": + dependencies: + "@eslint/core": 1.1.1 + + "@eslint/core@1.1.1": + dependencies: + "@types/json-schema": 7.0.15 + + "@eslint/js@10.0.1(eslint@10.0.3)": + optionalDependencies: + eslint: 10.0.3 + + "@eslint/object-schema@3.0.3": {} + + "@eslint/plugin-kit@0.6.1": + dependencies: + "@eslint/core": 1.1.1 + levn: 0.4.1 + + "@humanfs/core@0.19.1": {} + + "@humanfs/node@0.16.7": + dependencies: + "@humanfs/core": 0.19.1 + "@humanwhocodes/retry": 0.4.3 + + "@humanwhocodes/module-importer@1.0.1": {} + + "@humanwhocodes/retry@0.4.3": {} + + "@ianvs/prettier-plugin-sort-imports@4.7.1(prettier@3.8.1)": + dependencies: + "@babel/generator": 7.29.1 + "@babel/parser": 7.29.0 + "@babel/traverse": 7.29.0 + "@babel/types": 7.29.0 + prettier: 3.8.1 + semver: 7.7.4 + transitivePeerDependencies: + - supports-color + + "@img/colour@1.1.0": optional: true "@img/sharp-darwin-arm64@0.34.5": @@ -3511,7 +4663,7 @@ snapshots: "@img/sharp-wasm32@0.34.5": dependencies: - "@emnapi/runtime": 1.8.1 + "@emnapi/runtime": 1.9.0 optional: true "@img/sharp-win32-arm64@0.34.5": @@ -3523,8 +4675,20 @@ snapshots: "@img/sharp-win32-x64@0.34.5": optional: true + "@jridgewell/gen-mapping@0.3.13": + dependencies: + "@jridgewell/sourcemap-codec": 1.5.5 + "@jridgewell/trace-mapping": 0.3.31 + + "@jridgewell/resolve-uri@3.1.2": {} + "@jridgewell/sourcemap-codec@1.5.5": {} + "@jridgewell/trace-mapping@0.3.31": + dependencies: + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.5.5 + "@oslojs/encoding@1.1.0": {} "@playwright/test@1.58.2": @@ -3621,30 +4785,61 @@ snapshots: "@types/hast": 3.0.4 hast-util-to-html: 9.0.5 + "@shikijs/core@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + hast-util-to-html: 9.0.5 + "@shikijs/engine-javascript@3.22.0": dependencies: "@shikijs/types": 3.22.0 "@shikijs/vscode-textmate": 10.0.2 oniguruma-to-es: 4.3.4 + "@shikijs/engine-javascript@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + "@shikijs/vscode-textmate": 10.0.2 + oniguruma-to-es: 4.3.5 + "@shikijs/engine-oniguruma@3.22.0": dependencies: "@shikijs/types": 3.22.0 "@shikijs/vscode-textmate": 10.0.2 + "@shikijs/engine-oniguruma@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + "@shikijs/vscode-textmate": 10.0.2 + "@shikijs/langs@3.22.0": dependencies: "@shikijs/types": 3.22.0 + "@shikijs/langs@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + "@shikijs/themes@3.22.0": dependencies: "@shikijs/types": 3.22.0 + "@shikijs/themes@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + "@shikijs/types@3.22.0": dependencies: "@shikijs/vscode-textmate": 10.0.2 "@types/hast": 3.0.4 + "@shikijs/types@3.23.0": + dependencies: + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + "@shikijs/vscode-textmate@10.0.2": {} "@standard-schema/spec@1.1.0": {} @@ -3660,71 +4855,186 @@ snapshots: "@types/deep-eql@4.0.2": {} + "@types/esrecurse@4.3.1": {} + "@types/estree@1.0.8": {} "@types/hast@3.0.4": dependencies: "@types/unist": 3.0.3 + "@types/json-schema@7.0.15": {} + "@types/mdast@4.0.4": dependencies: "@types/unist": 3.0.3 - "@types/ms@2.1.0": {} + "@types/ms@2.1.0": {} + + "@types/nlcst@2.0.3": + dependencies: + "@types/unist": 3.0.3 + + "@types/node@22.19.15": + dependencies: + undici-types: 6.21.0 + + "@types/node@25.5.0": + dependencies: + undici-types: 7.18.2 + optional: true + + "@types/unist@3.0.3": {} + + "@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3)(typescript@5.9.3))(eslint@10.0.3)(typescript@5.9.3)": + dependencies: + "@eslint-community/regexpp": 4.12.2 + "@typescript-eslint/parser": 8.57.0(eslint@10.0.3)(typescript@5.9.3) + "@typescript-eslint/scope-manager": 8.57.0 + "@typescript-eslint/type-utils": 8.57.0(eslint@10.0.3)(typescript@5.9.3) + "@typescript-eslint/utils": 8.57.0(eslint@10.0.3)(typescript@5.9.3) + "@typescript-eslint/visitor-keys": 8.57.0 + eslint: 10.0.3 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/parser@8.57.0(eslint@10.0.3)(typescript@5.9.3)": + dependencies: + "@typescript-eslint/scope-manager": 8.57.0 + "@typescript-eslint/types": 8.57.0 + "@typescript-eslint/typescript-estree": 8.57.0(typescript@5.9.3) + "@typescript-eslint/visitor-keys": 8.57.0 + debug: 4.4.3 + eslint: 10.0.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/project-service@8.57.0(typescript@5.9.3)": + dependencies: + "@typescript-eslint/tsconfig-utils": 8.57.0(typescript@5.9.3) + "@typescript-eslint/types": 8.57.0 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/scope-manager@8.57.0": + dependencies: + "@typescript-eslint/types": 8.57.0 + "@typescript-eslint/visitor-keys": 8.57.0 + + "@typescript-eslint/tsconfig-utils@8.57.0(typescript@5.9.3)": + dependencies: + typescript: 5.9.3 + + "@typescript-eslint/type-utils@8.57.0(eslint@10.0.3)(typescript@5.9.3)": + dependencies: + "@typescript-eslint/types": 8.57.0 + "@typescript-eslint/typescript-estree": 8.57.0(typescript@5.9.3) + "@typescript-eslint/utils": 8.57.0(eslint@10.0.3)(typescript@5.9.3) + debug: 4.4.3 + eslint: 10.0.3 + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/types@8.57.0": {} - "@types/nlcst@2.0.3": + "@typescript-eslint/typescript-estree@8.57.0(typescript@5.9.3)": dependencies: - "@types/unist": 3.0.3 + "@typescript-eslint/project-service": 8.57.0(typescript@5.9.3) + "@typescript-eslint/tsconfig-utils": 8.57.0(typescript@5.9.3) + "@typescript-eslint/types": 8.57.0 + "@typescript-eslint/visitor-keys": 8.57.0 + debug: 4.4.3 + minimatch: 10.2.4 + semver: 7.7.4 + tinyglobby: 0.2.15 + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color - "@types/node@25.3.0": + "@typescript-eslint/utils@8.57.0(eslint@10.0.3)(typescript@5.9.3)": dependencies: - undici-types: 7.18.2 + "@eslint-community/eslint-utils": 4.9.1(eslint@10.0.3) + "@typescript-eslint/scope-manager": 8.57.0 + "@typescript-eslint/types": 8.57.0 + "@typescript-eslint/typescript-estree": 8.57.0(typescript@5.9.3) + eslint: 10.0.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color - "@types/unist@3.0.3": {} + "@typescript-eslint/visitor-keys@8.57.0": + dependencies: + "@typescript-eslint/types": 8.57.0 + eslint-visitor-keys: 5.0.1 "@ungap/structured-clone@1.3.0": {} - "@vitest/expect@4.0.18": + "@vitest/expect@4.1.0": dependencies: "@standard-schema/spec": 1.1.0 "@types/chai": 5.2.3 - "@vitest/spy": 4.0.18 - "@vitest/utils": 4.0.18 + "@vitest/spy": 4.1.0 + "@vitest/utils": 4.1.0 chai: 6.2.2 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 - "@vitest/mocker@4.0.18(vite@6.4.1(@types/node@25.3.0))": + "@vitest/mocker@4.1.0(vite@6.4.1(@types/node@22.19.15))": dependencies: - "@vitest/spy": 4.0.18 + "@vitest/spy": 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 6.4.1(@types/node@25.3.0) + vite: 6.4.1(@types/node@22.19.15) - "@vitest/pretty-format@4.0.18": + "@vitest/pretty-format@4.1.0": dependencies: - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 - "@vitest/runner@4.0.18": + "@vitest/runner@4.1.0": dependencies: - "@vitest/utils": 4.0.18 + "@vitest/utils": 4.1.0 pathe: 2.0.3 - "@vitest/snapshot@4.0.18": + "@vitest/snapshot@4.1.0": dependencies: - "@vitest/pretty-format": 4.0.18 + "@vitest/pretty-format": 4.1.0 + "@vitest/utils": 4.1.0 magic-string: 0.30.21 pathe: 2.0.3 - "@vitest/spy@4.0.18": {} + "@vitest/spy@4.1.0": {} + + "@vitest/utils@4.1.0": + dependencies: + "@vitest/pretty-format": 4.1.0 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 - "@vitest/utils@4.0.18": + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: - "@vitest/pretty-format": 4.0.18 - tinyrainbow: 3.0.3 + acorn: 8.16.0 acorn@8.15.0: {} + acorn@8.16.0: {} + + ajv@6.14.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ansi-align@3.0.1: dependencies: string-width: 4.2.3 @@ -3748,7 +5058,7 @@ snapshots: assertion-error@2.0.1: {} - astro@5.17.2(@types/node@25.3.0)(rollup@4.57.1)(typescript@5.9.3): + astro@5.17.2(@types/node@25.5.0)(rollup@4.57.1)(typescript@5.9.3): dependencies: "@astrojs/compiler": 2.13.1 "@astrojs/internal-helpers": 0.7.5 @@ -3805,8 +5115,110 @@ snapshots: unist-util-visit: 5.1.0 unstorage: 1.17.4 vfile: 6.0.3 - vite: 6.4.1(@types/node@25.3.0) - vitefu: 1.1.1(vite@6.4.1(@types/node@25.3.0)) + vite: 6.4.1(@types/node@25.5.0) + vitefu: 1.1.1(vite@6.4.1(@types/node@25.5.0)) + xxhash-wasm: 1.1.0 + yargs-parser: 21.1.1 + yocto-spinner: 0.2.3 + zod: 3.25.76 + zod-to-json-schema: 3.25.1(zod@3.25.76) + zod-to-ts: 1.2.0(typescript@5.9.3)(zod@3.25.76) + optionalDependencies: + sharp: 0.34.5 + transitivePeerDependencies: + - "@azure/app-configuration" + - "@azure/cosmos" + - "@azure/data-tables" + - "@azure/identity" + - "@azure/keyvault-secrets" + - "@azure/storage-blob" + - "@capacitor/preferences" + - "@deno/kv" + - "@netlify/blobs" + - "@planetscale/database" + - "@types/node" + - "@upstash/redis" + - "@vercel/blob" + - "@vercel/functions" + - "@vercel/kv" + - aws4fetch + - db0 + - idb-keyval + - ioredis + - jiti + - less + - lightningcss + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - uploadthing + - yaml + + astro@5.18.1(@types/node@22.19.15)(rollup@4.57.1)(typescript@5.9.3): + dependencies: + "@astrojs/compiler": 2.13.1 + "@astrojs/internal-helpers": 0.7.6 + "@astrojs/markdown-remark": 6.3.11 + "@astrojs/telemetry": 3.3.0 + "@capsizecss/unpack": 4.0.0 + "@oslojs/encoding": 1.1.0 + "@rollup/pluginutils": 5.3.0(rollup@4.57.1) + acorn: 8.16.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + boxen: 8.0.1 + ci-info: 4.4.0 + clsx: 2.1.1 + common-ancestor-path: 1.0.1 + cookie: 1.1.1 + cssesc: 3.0.0 + debug: 4.4.3 + deterministic-object-hash: 2.0.2 + devalue: 5.6.4 + diff: 8.0.3 + dlv: 1.1.3 + dset: 3.1.4 + es-module-lexer: 1.7.0 + esbuild: 0.27.4 + estree-walker: 3.0.3 + flattie: 1.1.1 + fontace: 0.4.1 + github-slugger: 2.0.0 + html-escaper: 3.0.3 + http-cache-semantics: 4.2.0 + import-meta-resolve: 4.2.0 + js-yaml: 4.1.1 + magic-string: 0.30.21 + magicast: 0.5.2 + mrmime: 2.0.1 + neotraverse: 0.6.18 + p-limit: 6.2.0 + p-queue: 8.1.1 + package-manager-detector: 1.6.0 + piccolore: 0.1.3 + picomatch: 4.0.3 + prompts: 2.4.2 + rehype: 13.0.2 + semver: 7.7.4 + shiki: 3.23.0 + smol-toml: 1.6.0 + svgo: 4.0.1 + tinyexec: 1.0.4 + tinyglobby: 0.2.15 + tsconfck: 3.1.6(typescript@5.9.3) + ultrahtml: 1.6.0 + unifont: 0.7.4 + unist-util-visit: 5.1.0 + unstorage: 1.17.4 + vfile: 6.0.3 + vite: 6.4.1(@types/node@22.19.15) + vitefu: 1.1.2(vite@6.4.1(@types/node@22.19.15)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -3854,6 +5266,8 @@ snapshots: bail@2.0.2: {} + balanced-match@4.0.4: {} + base-64@1.0.0: {} boolbase@1.0.0: {} @@ -3869,6 +5283,10 @@ snapshots: widest-line: 5.0.0 wrap-ansi: 9.0.2 + brace-expansion@5.0.4: + dependencies: + balanced-match: 4.0.4 + camelcase@8.0.0: {} ccount@2.0.1: {} @@ -3899,10 +5317,18 @@ snapshots: common-ancestor-path@1.0.1: {} + convert-source-map@2.0.0: {} + cookie-es@1.2.2: {} cookie@1.1.1: {} + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + crossws@0.3.5: dependencies: uncrypto: 0.1.3 @@ -3925,6 +5351,11 @@ snapshots: mdn-data: 2.12.2 source-map-js: 1.2.1 + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + css-what@6.2.2: {} cssesc@3.0.0: {} @@ -3941,6 +5372,8 @@ snapshots: dependencies: character-entities: 2.0.2 + deep-is@0.1.4: {} + defu@6.1.4: {} dequal@2.0.3: {} @@ -3956,6 +5389,8 @@ snapshots: devalue@5.6.2: {} + devalue@5.6.4: {} + devlop@1.1.0: dependencies: dequal: 2.0.3 @@ -3994,6 +5429,8 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-lexer@2.0.0: {} + esbuild@0.25.12: optionalDependencies: "@esbuild/aix-ppc64": 0.25.12 @@ -4052,24 +5489,145 @@ snapshots: "@esbuild/win32-ia32": 0.27.3 "@esbuild/win32-x64": 0.27.3 + esbuild@0.27.4: + optionalDependencies: + "@esbuild/aix-ppc64": 0.27.4 + "@esbuild/android-arm": 0.27.4 + "@esbuild/android-arm64": 0.27.4 + "@esbuild/android-x64": 0.27.4 + "@esbuild/darwin-arm64": 0.27.4 + "@esbuild/darwin-x64": 0.27.4 + "@esbuild/freebsd-arm64": 0.27.4 + "@esbuild/freebsd-x64": 0.27.4 + "@esbuild/linux-arm": 0.27.4 + "@esbuild/linux-arm64": 0.27.4 + "@esbuild/linux-ia32": 0.27.4 + "@esbuild/linux-loong64": 0.27.4 + "@esbuild/linux-mips64el": 0.27.4 + "@esbuild/linux-ppc64": 0.27.4 + "@esbuild/linux-riscv64": 0.27.4 + "@esbuild/linux-s390x": 0.27.4 + "@esbuild/linux-x64": 0.27.4 + "@esbuild/netbsd-arm64": 0.27.4 + "@esbuild/netbsd-x64": 0.27.4 + "@esbuild/openbsd-arm64": 0.27.4 + "@esbuild/openbsd-x64": 0.27.4 + "@esbuild/openharmony-arm64": 0.27.4 + "@esbuild/sunos-x64": 0.27.4 + "@esbuild/win32-arm64": 0.27.4 + "@esbuild/win32-ia32": 0.27.4 + "@esbuild/win32-x64": 0.27.4 + + escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} + eslint-config-prettier@10.1.8(eslint@10.0.3): + dependencies: + eslint: 10.0.3 + + eslint-scope@9.1.2: + dependencies: + "@types/esrecurse": 4.3.1 + "@types/estree": 1.0.8 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@10.0.3: + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@10.0.3) + "@eslint-community/regexpp": 4.12.2 + "@eslint/config-array": 0.23.3 + "@eslint/config-helpers": 0.5.3 + "@eslint/core": 1.1.1 + "@eslint/plugin-kit": 0.6.1 + "@humanfs/node": 0.16.7 + "@humanwhocodes/module-importer": 1.0.1 + "@humanwhocodes/retry": 0.4.3 + "@types/estree": 1.0.8 + ajv: 6.14.0 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.4 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@11.2.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + estree-walker@2.0.2: {} estree-walker@3.0.3: dependencies: "@types/estree": 1.0.8 + esutils@2.0.3: {} + eventemitter3@5.0.4: {} expect-type@1.3.0: {} extend@3.0.2: {} + fast-deep-equal@3.1.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.1 + keyv: 4.5.4 + + flatted@3.4.1: {} + flattie@1.1.1: {} fontace@0.4.1: @@ -4086,10 +5644,14 @@ snapshots: fsevents@2.3.3: optional: true - get-east-asian-width@1.4.0: {} + get-east-asian-width@1.5.0: {} github-slugger@2.0.0: {} + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + h3@1.15.5: dependencies: cookie-es: 1.2.2 @@ -4195,14 +5757,26 @@ snapshots: http-cache-semantics@4.2.0: {} + ignore@5.3.2: {} + + ignore@7.0.5: {} + import-meta-resolve@4.2.0: {} + imurmurhash@0.1.4: {} + iron-webcrypto@1.2.1: {} is-docker@3.0.0: {} + is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 @@ -4213,12 +5787,37 @@ snapshots: dependencies: is-inside-container: 1.0.0 + isexe@2.0.0: {} + + js-tokens@4.0.0: {} + js-yaml@4.1.1: dependencies: argparse: 2.0.1 + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + kleur@3.0.3: {} + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + longest-streak@3.1.0: {} lru-cache@11.2.6: {} @@ -4359,6 +5958,8 @@ snapshots: mdn-data@2.12.2: {} + mdn-data@2.27.1: {} + micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.3.0 @@ -4550,12 +6151,18 @@ snapshots: transitivePeerDependencies: - supports-color + minimatch@10.2.4: + dependencies: + brace-expansion: 5.0.4 + mrmime@2.0.1: {} ms@2.1.3: {} nanoid@3.3.11: {} + natural-compare@1.4.0: {} + neotraverse@0.6.18: {} nlcst-to-string@4.0.0: @@ -4590,10 +6197,33 @@ snapshots: regex: 6.1.0 regex-recursion: 6.0.2 + oniguruma-to-es@4.3.5: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.1.0 + regex-recursion: 6.0.2 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + p-limit@6.2.0: dependencies: yocto-queue: 1.2.2 + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + p-queue@8.1.1: dependencies: eventemitter3: 5.0.4 @@ -4616,6 +6246,10 @@ snapshots: dependencies: entities: 6.0.1 + path-exists@4.0.0: {} + + path-key@3.1.1: {} + pathe@2.0.3: {} piccolore@0.1.3: {} @@ -4640,6 +6274,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + prelude-ls@1.2.1: {} + prettier-plugin-astro@0.14.1: dependencies: "@astrojs/compiler": 2.13.1 @@ -4657,6 +6293,8 @@ snapshots: property-information@7.1.0: {} + punycode@2.3.1: {} + radix3@1.1.2: {} readdirp@5.0.0: {} @@ -4801,11 +6439,13 @@ snapshots: sax@1.4.4: {} + sax@1.5.0: {} + semver@7.7.4: {} sharp@0.34.5: dependencies: - "@img/colour": 1.0.0 + "@img/colour": 1.1.0 detect-libc: 2.1.2 semver: 7.7.4 optionalDependencies: @@ -4835,6 +6475,12 @@ snapshots: "@img/sharp-win32-x64": 0.34.5 optional: true + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + shiki@3.22.0: dependencies: "@shikijs/core": 3.22.0 @@ -4846,6 +6492,17 @@ snapshots: "@shikijs/vscode-textmate": 10.0.2 "@types/hast": 3.0.4 + shiki@3.23.0: + dependencies: + "@shikijs/core": 3.23.0 + "@shikijs/engine-javascript": 3.23.0 + "@shikijs/engine-oniguruma": 3.23.0 + "@shikijs/langs": 3.23.0 + "@shikijs/themes": 3.23.0 + "@shikijs/types": 3.23.0 + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + siginfo@2.0.0: {} sisteransi@1.0.5: {} @@ -4858,7 +6515,7 @@ snapshots: stackback@0.0.2: {} - std-env@3.10.0: {} + std-env@4.0.0: {} string-width@4.2.3: dependencies: @@ -4869,8 +6526,8 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.2 + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 stringify-entities@4.0.4: dependencies: @@ -4881,7 +6538,7 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.2: + strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 @@ -4899,23 +6556,39 @@ snapshots: picocolors: 1.1.1 sax: 1.4.4 + svgo@4.0.1: + dependencies: + commander: 11.1.0 + css-select: 5.2.2 + css-tree: 3.2.1 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.5.0 + tiny-inflate@1.0.3: {} tinybench@2.9.0: {} tinyexec@1.0.2: {} + tinyexec@1.0.4: {} + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinyrainbow@3.0.3: {} + tinyrainbow@3.1.0: {} trim-lines@3.0.1: {} trough@2.2.0: {} + ts-api-utils@2.4.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + tsconfck@3.1.6(typescript@5.9.3): optionalDependencies: typescript: 5.9.3 @@ -4923,8 +6596,23 @@ snapshots: tslib@2.8.1: optional: true + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + type-fest@4.41.0: {} + typescript-eslint@8.57.0(eslint@10.0.3)(typescript@5.9.3): + dependencies: + "@typescript-eslint/eslint-plugin": 8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3)(typescript@5.9.3))(eslint@10.0.3)(typescript@5.9.3) + "@typescript-eslint/parser": 8.57.0(eslint@10.0.3)(typescript@5.9.3) + "@typescript-eslint/typescript-estree": 8.57.0(typescript@5.9.3) + "@typescript-eslint/utils": 8.57.0(eslint@10.0.3)(typescript@5.9.3) + eslint: 10.0.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + typescript@5.9.3: {} ufo@1.6.3: {} @@ -4933,7 +6621,10 @@ snapshots: uncrypto@0.1.3: {} - undici-types@7.18.2: {} + undici-types@6.21.0: {} + + undici-types@7.18.2: + optional: true unified@11.0.5: dependencies: @@ -5004,6 +6695,10 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.3 + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + vfile-location@5.0.3: dependencies: "@types/unist": 3.0.3 @@ -5019,7 +6714,19 @@ snapshots: "@types/unist": 3.0.3 vfile-message: 4.0.3 - vite@6.4.1(@types/node@25.3.0): + vite@6.4.1(@types/node@22.19.15): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.57.1 + tinyglobby: 0.2.15 + optionalDependencies: + "@types/node": 22.19.15 + fsevents: 2.3.3 + + vite@6.4.1(@types/node@25.5.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -5028,54 +6735,52 @@ snapshots: rollup: 4.57.1 tinyglobby: 0.2.15 optionalDependencies: - "@types/node": 25.3.0 + "@types/node": 25.5.0 fsevents: 2.3.3 - vitefu@1.1.1(vite@6.4.1(@types/node@25.3.0)): + vitefu@1.1.1(vite@6.4.1(@types/node@25.5.0)): optionalDependencies: - vite: 6.4.1(@types/node@25.3.0) + vite: 6.4.1(@types/node@25.5.0) - vitest@4.0.18(@types/node@25.3.0): - dependencies: - "@vitest/expect": 4.0.18 - "@vitest/mocker": 4.0.18(vite@6.4.1(@types/node@25.3.0)) - "@vitest/pretty-format": 4.0.18 - "@vitest/runner": 4.0.18 - "@vitest/snapshot": 4.0.18 - "@vitest/spy": 4.0.18 - "@vitest/utils": 4.0.18 - es-module-lexer: 1.7.0 + vitefu@1.1.2(vite@6.4.1(@types/node@22.19.15)): + optionalDependencies: + vite: 6.4.1(@types/node@22.19.15) + + vitest@4.1.0(@types/node@22.19.15)(vite@6.4.1(@types/node@22.19.15)): + dependencies: + "@vitest/expect": 4.1.0 + "@vitest/mocker": 4.1.0(vite@6.4.1(@types/node@22.19.15)) + "@vitest/pretty-format": 4.1.0 + "@vitest/runner": 4.1.0 + "@vitest/snapshot": 4.1.0 + "@vitest/spy": 4.1.0 + "@vitest/utils": 4.1.0 + es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.10.0 + std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 1.0.2 + tinyexec: 1.0.4 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 6.4.1(@types/node@25.3.0) + tinyrainbow: 3.1.0 + vite: 6.4.1(@types/node@22.19.15) why-is-node-running: 2.3.0 optionalDependencies: - "@types/node": 25.3.0 + "@types/node": 22.19.15 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml web-namespaces@2.0.1: {} which-pm-runs@1.1.0: {} + which@2.0.2: + dependencies: + isexe: 2.0.0 + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 @@ -5085,16 +6790,20 @@ snapshots: dependencies: string-width: 7.2.0 + word-wrap@1.2.5: {} + wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 string-width: 7.2.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 xxhash-wasm@1.1.0: {} yargs-parser@21.1.1: {} + yocto-queue@0.1.0: {} + yocto-queue@1.2.2: {} yocto-spinner@0.2.3: diff --git a/prettier.config.mjs b/prettier.config.mjs index ed15152..1b5691c 100644 --- a/prettier.config.mjs +++ b/prettier.config.mjs @@ -1,10 +1,12 @@ const config = { - plugins: ["prettier-plugin-astro"], + plugins: ["prettier-plugin-astro", "@ianvs/prettier-plugin-sort-imports"], semi: false, singleQuote: false, tabWidth: 2, printWidth: 100, trailingComma: "es5", + importOrder: ["", "", "", "^[./]"], + importOrderParserPlugins: ["typescript"], overrides: [ { files: "*.astro", diff --git a/src/components/Head.astro b/src/components/Head.astro index a2b64e6..f786f19 100644 --- a/src/components/Head.astro +++ b/src/components/Head.astro @@ -1,16 +1,17 @@ --- import type { ComponentProps } from "astro/types" -import Title from "./Title.astro" -import Description from "./Description.astro" + import Canonical from "./Canonical.astro" -import Keywords from "./Keywords.astro" -import Robots from "./Robots.astro" -import OpenGraph from "./OpenGraph.astro" -import Twitter from "./Twitter.astro" +import Description from "./Description.astro" import Favicon from "./Favicon.astro" -import Schema from "./Schema.astro" +import Keywords from "./Keywords.astro" import LanguageAlternates from "./LanguageAlternates.astro" +import OpenGraph from "./OpenGraph.astro" import type { OpenGraphImage } from "./OpenGraph.astro" +import Robots from "./Robots.astro" +import Schema from "./Schema.astro" +import Title from "./Title.astro" +import Twitter from "./Twitter.astro" export type Props = { title: string diff --git a/src/lib/metadata.ts b/src/lib/metadata.ts index d17075c..63cc7b8 100644 --- a/src/lib/metadata.ts +++ b/src/lib/metadata.ts @@ -1,4 +1,5 @@ import type { ComponentProps } from "astro/types" + import type Head from "../components/Head.astro" let store: Partial> = {} diff --git a/tests/e2e/components/canonical.test.ts b/tests/e2e/components/canonical.test.ts index 96ea31c..d13b76f 100644 --- a/tests/e2e/components/canonical.test.ts +++ b/tests/e2e/components/canonical.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { expect, test } from "@playwright/test" test.describe("Canonical", () => { test.describe("default", () => { diff --git a/tests/e2e/components/description.test.ts b/tests/e2e/components/description.test.ts index b7e4d23..a50db39 100644 --- a/tests/e2e/components/description.test.ts +++ b/tests/e2e/components/description.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { expect, test } from "@playwright/test" test.describe("Description", () => { test.describe("basic", () => { diff --git a/tests/e2e/components/favicon.test.ts b/tests/e2e/components/favicon.test.ts index 2309c60..3aa1ac0 100644 --- a/tests/e2e/components/favicon.test.ts +++ b/tests/e2e/components/favicon.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { expect, test } from "@playwright/test" test.describe("Favicon", () => { test.describe("basic", () => { @@ -64,7 +64,7 @@ test.describe("Favicon", () => { await expect(manifest).toHaveAttribute("href", "/site.webmanifest") }) }) - ;(test.describe("full", () => { + test.describe("full", () => { test("renders all favicon types", async ({ page }) => { await page.goto("/favicon/full") await expect(page.locator("link[rel='icon'][type='image/x-icon']")).toBeAttached() @@ -77,21 +77,21 @@ test.describe("Favicon", () => { await expect(page.locator("link[media='(prefers-color-scheme: light)']")).toBeAttached() await expect(page.locator("link[rel='manifest']")).toBeAttached() }) - }), - test.describe("sorted", () => { - test("renders icons in correct order", async ({ page }) => { - await page.goto("/favicon/sorted") - const allLinks = await page.locator("link[rel='icon'], link[rel='apple-touch-icon']").all() - const hrefs = await Promise.all(allLinks.map((l) => l.getAttribute("href"))) - expect(hrefs).toEqual([ - "/favicon.ico", - "/favicon-96x96.png", - "/favicon.svg", - "/apple-touch-icon.png", - "/favicon-dark.svg", - ]) - }) - })) + }) + test.describe("sorted", () => { + test("renders icons in correct order", async ({ page }) => { + await page.goto("/favicon/sorted") + const allLinks = await page.locator("link[rel='icon'], link[rel='apple-touch-icon']").all() + const hrefs = await Promise.all(allLinks.map((l) => l.getAttribute("href"))) + expect(hrefs).toEqual([ + "/favicon.ico", + "/favicon-96x96.png", + "/favicon.svg", + "/apple-touch-icon.png", + "/favicon-dark.svg", + ]) + }) + }) test.describe("unsorted", () => { test("preserves original order", async ({ page }) => { diff --git a/tests/e2e/components/head.test.ts b/tests/e2e/components/head.test.ts index 42a2b14..b592ca8 100644 --- a/tests/e2e/components/head.test.ts +++ b/tests/e2e/components/head.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { expect, test } from "@playwright/test" test.describe("Head", () => { test.describe("basic", () => { diff --git a/tests/e2e/components/keywords.test.ts b/tests/e2e/components/keywords.test.ts index 5c5644a..f66900e 100644 --- a/tests/e2e/components/keywords.test.ts +++ b/tests/e2e/components/keywords.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { expect, test } from "@playwright/test" test.describe("Keywords", () => { test.describe("basic", () => { diff --git a/tests/e2e/components/language-alternates.test.ts b/tests/e2e/components/language-alternates.test.ts index ea96c45..2d9ceed 100644 --- a/tests/e2e/components/language-alternates.test.ts +++ b/tests/e2e/components/language-alternates.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { expect, test } from "@playwright/test" test.describe("LanguageAlternates", () => { test.describe("two-languages", () => { diff --git a/tests/e2e/components/open-graph.test.ts b/tests/e2e/components/open-graph.test.ts index 1cff935..3386ceb 100644 --- a/tests/e2e/components/open-graph.test.ts +++ b/tests/e2e/components/open-graph.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { expect, test } from "@playwright/test" test.describe("OpenGraph", () => { test.describe("basic", () => { diff --git a/tests/e2e/components/robots.test.ts b/tests/e2e/components/robots.test.ts index 13d1d4e..a1be73a 100644 --- a/tests/e2e/components/robots.test.ts +++ b/tests/e2e/components/robots.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { expect, test } from "@playwright/test" test.describe("Robots", () => { test.describe("basic", () => { diff --git a/tests/e2e/components/schema.test.ts b/tests/e2e/components/schema.test.ts index 5ef82f1..0e6267a 100644 --- a/tests/e2e/components/schema.test.ts +++ b/tests/e2e/components/schema.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { expect, test } from "@playwright/test" test.describe("Schema", () => { test.describe("website", () => { diff --git a/tests/e2e/components/title.test.ts b/tests/e2e/components/title.test.ts index 92cb58b..6503140 100644 --- a/tests/e2e/components/title.test.ts +++ b/tests/e2e/components/title.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { expect, test } from "@playwright/test" test.describe("Title", () => { test.describe("basic", () => { diff --git a/tests/e2e/components/twitter.test.ts b/tests/e2e/components/twitter.test.ts index 662fe80..9080ca1 100644 --- a/tests/e2e/components/twitter.test.ts +++ b/tests/e2e/components/twitter.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { expect, test } from "@playwright/test" test.describe("Twitter", () => { test.describe("basic", () => { diff --git a/tests/e2e/integration.test.ts b/tests/e2e/integration.test.ts index 8dd4f27..f12faf2 100644 --- a/tests/e2e/integration.test.ts +++ b/tests/e2e/integration.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { expect, test } from "@playwright/test" test.describe("Integration", () => { test("renders title via Metadata utility", async ({ page }) => { diff --git a/tests/unit/metadata.test.ts b/tests/unit/metadata.test.ts index f2cb064..67c6a2c 100644 --- a/tests/unit/metadata.test.ts +++ b/tests/unit/metadata.test.ts @@ -1,4 +1,5 @@ -import { describe, it, expect, beforeEach } from "vitest" +import { beforeEach, describe, expect, it } from "vitest" + import { Metadata } from "../../src/lib/metadata.ts" describe("Metadata", () => {