diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index e00f7ba81a..308663ffe0 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -33,6 +33,7 @@ jobs: run: npm run typecheck - name: 🔤 Spell Check run: npm run spellcheck + - uses: ./.github/workflows/actions/check-admonitions - uses: ./.github/workflows/actions/check-translations # Lint and spell check changes should be pushed # to the branch before the branch is merge eligible. diff --git a/.github/workflows/actions/check-admonitions/action.yml b/.github/workflows/actions/check-admonitions/action.yml new file mode 100644 index 0000000000..e3f4bf6948 --- /dev/null +++ b/.github/workflows/actions/check-admonitions/action.yml @@ -0,0 +1,92 @@ +name: 'Check Admonitions' +description: 'Fails on admonition titles using the MDX v1 syntax' +runs: + using: 'composite' + steps: + # `:::note My Title` was MDX v1 syntax that Docusaurus rewrote for us. + # With `future.v4.mdx1CompatDisabledByDefault` that shim is off, and + # the block `:::note My Title` stops being a directive: it renders as + # literal `:::note` text on the page, with no warning and a successful + # build. + # + # The other MDX v1 forms, HTML comments and `{#heading-ids}`, fail the + # build on their own, so this only covers the one that fails silently. + # + # Only the files the pull request touches are checked, so an existing + # page is never anyone else's problem to fix. + # + # The event payload has no file list, so the changed files come from a + # diff. The checkout is shallow and the base commit is fetched here + # rather than through `fetch-depth` on the checkout, which would pull + # the full history for every step in the job just to serve this one. + - name: 🔎 Check Admonitions + shell: bash + env: + BASE_SHA: ${{ github.event.pull_request.base.sha }} + CHANGED_FILES: ${{ runner.temp }}/changed-files.txt + run: | + git fetch --quiet --no-tags --depth=1 origin "$BASE_SHA" + git diff --name-only --diff-filter=ACMR "$BASE_SHA" HEAD > "$CHANGED_FILES" + node <<'JS' + const { readFileSync } = require('fs'); + + // Files Docusaurus compiles as MDX. Under `static/usage` that is + // only the `index` files; the rest are raw code samples. + const compiled = (f) => + !f.endsWith('README.md') && + ((/^(docs|versioned_docs|src\/pages)\//.test(f) && /\.mdx?$/.test(f)) || + (f.startsWith('static/usage/') && f.endsWith('.mdx'))); + + // Defaults from `@docusaurus/mdx-loader/lib/remark/admonitions`. + const keywords = + 'secondary|info|success|danger|note|tip|warning|important|caution'; + const legacyTitle = new RegExp( + `^[ \\t]*:::(?:${keywords})[ \\t]+(?!\\[)\\S[^\\n]*`, + 'gm' + ); + + // A `:::note` in a code sample is an example, not a directive. + // Blank out code samples with spaces, same length so line numbers + // still match. + const blank = (m) => m.replace(/[^\n]/g, ' '); + const mask = (t) => + t + .replace(/^([ \t]*)(`{3,}|~{3,})[^\n]*\n[\s\S]*?^\1\2[ \t]*$/gm, blank) + .replace(/(`+)(?:(?!\1)[\s\S])+?\1/g, blank); + + const files = readFileSync(process.env.CHANGED_FILES, 'utf8') + .split('\n') + .filter(compiled); + + if (!files.length) { + console.log('No MDX files changed.'); + process.exit(0); + } + + const findings = []; + for (const file of files) { + const source = readFileSync(file, 'utf8'); + for (const m of mask(source).matchAll(legacyTitle)) { + findings.push({ + file, + line: source.slice(0, m.index).split('\n').length, + text: source.slice(m.index, m.index + m[0].length).trim(), + }); + } + } + + if (!findings.length) { + console.log(`No MDX v1 admonition titles in ${files.length} changed file(s).`); + process.exit(0); + } + + // `::error` puts each one on the offending line in the Files changed + // tab and prints it in red in the log, so the failure is not something + // to go hunting for. The message leads with the fix because the found + // text starts with `:::`, which reads badly right after the delimiter. + for (const { file, line, text } of findings) { + const fix = 'Wrap the title in brackets, for example :::note[My Title]'; + console.log(`::error file=${file},line=${line},title=MDX v1 admonition title::${fix}%0A%0AFound: ${text}`); + } + process.exit(1); + JS diff --git a/docusaurus.config.js b/docusaurus.config.js index ee99e454ba..d32ded56a8 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -46,18 +46,27 @@ module.exports = { }, }, onBrokenLinks: 'warn', - /** - * Docusaurus Faster replaces the Webpack/Babel/Terser toolchain with - * Rspack/SWC/Lightning CSS, which cuts build times and memory usage on a - * site with this many versioned pages. It becomes the default in v4. - * - * `removeLegacyPostBuildHeadAttribute` is required by the `ssgWorkerThreads` - * part of `faster`, so it has to be enabled alongside it. - */ future: { v4: { + /** + * Turns off the MDX v1 shims for comments, admonition titles and + * heading ids. Every page uses the native syntax, so the shims are + * no-ops, and disabling them means a page that reintroduces the old + * syntax fails the build now rather than on the upgrade. It becomes + * the default in v4. + */ + mdx1CompatDisabledByDefault: true, + /** + * Required by the `ssgWorkerThreads` part of `faster`, so it has to + * be enabled alongside it. It becomes the default in v4. + */ removeLegacyPostBuildHeadAttribute: true, }, + /** + * Replaces the Webpack/Babel/Terser toolchain with Rspack/SWC/Lightning + * CSS, which cuts build times and memory usage on a site with this many + * versioned pages. It becomes the default in v4. + */ faster: true, }, markdown: { diff --git a/package-lock.json b/package-lock.json index b38a3226b5..fba0e6d3ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,7 +42,7 @@ "hygen": "^6.2.11", "prettier": "^3.9.6", "typescript": "^5.9.3", - "vitest": "^4.1.7" + "vitest": "^5.0.0" }, "engines": { "node": ">=24.0.0" @@ -2148,9 +2148,9 @@ ] }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-10.2.2.tgz", - "integrity": "sha512-327sQUcfHjr9TnkX2FYluLuQHSoWjSm9AiPFBpULxHofk7VvKfye12Ur4xMbOzyv7cxMROx/OeYF0oytLuLsvQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-10.3.0.tgz", + "integrity": "sha512-gwJ5MWMLDFMIaZdzI8NJgzoq9cYC8CKhKRxvoyF2gc7mCRJokYDPjYrnZFvvkpYWpun1OdQ2drRpU7ZkxFGMpQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2219,22 +2219,22 @@ } }, "node_modules/@cspell/cspell-json-reporter": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-10.2.2.tgz", - "integrity": "sha512-gm9J5COxrLqb4WV2EX6x2INoRDOq3shiaFNhUu3cOhb8YHj5e/IPJ+uVT9nBl9BZKGVRX82vseezkiss9ofiGw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-10.3.0.tgz", + "integrity": "sha512-mXjxcKPrWQ8ggoft2ayBJ8HPKj/GxQqRhT7JABkBO6ez4DTHbmZU2QmvbseJ2UKqvy3oJqtRz3K9vMN35pryAA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "10.2.2" + "@cspell/cspell-types": "10.3.0" }, "engines": { "node": ">=22.18.0" } }, "node_modules/@cspell/cspell-performance-monitor": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-performance-monitor/-/cspell-performance-monitor-10.2.2.tgz", - "integrity": "sha512-BPPKqUPvRH7KEx5cnZY2KJHA81+V002pJirUkxT3gsrqLP/a3C0CWsZ/ST9f8ZE8OLNLHnmNkPizRPiDHada4Q==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-performance-monitor/-/cspell-performance-monitor-10.3.0.tgz", + "integrity": "sha512-HX6VNVnWGVmQGH9uF3vMKxbmRYdAXfZtZ15b+GFuXQ+n4yp9j8Ni96TzZdOGTWzA/cjOj5i5VU2Q2/b5f+gyDA==", "dev": true, "license": "MIT", "engines": { @@ -2242,9 +2242,9 @@ } }, "node_modules/@cspell/cspell-pipe": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-10.2.2.tgz", - "integrity": "sha512-WP+kwmg9ltgjXo5N8m0Xwchgob6wJ+c5omY4/WNSLsyEncuRjK1e6wYYN/gs+D/d3ISzC8+yb5Ma13ymkEC+4Q==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-10.3.0.tgz", + "integrity": "sha512-lR8EPQz2TADsTVYHdQekUFkWAFnbK/2MEx/VlYHUwayeqdDF3/mbtQWzU7KRBUXLtmO+GjJ3YaWD16CwLmjcMA==", "dev": true, "license": "MIT", "engines": { @@ -2252,9 +2252,9 @@ } }, "node_modules/@cspell/cspell-resolver": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-10.2.2.tgz", - "integrity": "sha512-DZO2vALwXVi8ajkS0p0DHPD4Uzq86fHBLksZF3MJOWV2nBZxrrUI1/kXA3Fiuil/EXSJG3tf0WX5/efoamP2Iw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-10.3.0.tgz", + "integrity": "sha512-lAXZ/MYzigeLDCqCsfmhWP52suZL3OrK5XuuxEFqygiUDrVPhIjb3BHorQ5/JtJkIIe2NRgqa7qvGW8fjh6F7A==", "dev": true, "license": "MIT", "dependencies": { @@ -2265,9 +2265,9 @@ } }, "node_modules/@cspell/cspell-service-bus": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-10.2.2.tgz", - "integrity": "sha512-0UEvuTZ/mLQXg5iy1w7xzUf0gACGnaFRuY7yac7aFQjM//rP+2BXK8bC6g+4reqwBJhjeDrEHy7SvvDICgGMAg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-10.3.0.tgz", + "integrity": "sha512-sngaSRBEfXEziDO/s8oCzC8AUQRqlTuPtsl1VJQpO+vU9AL/3bCmr+z/JyP+MYzt4nXZVzl1yh/eAVtqfmmfDg==", "dev": true, "license": "MIT", "engines": { @@ -2275,9 +2275,9 @@ } }, "node_modules/@cspell/cspell-types": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-10.2.2.tgz", - "integrity": "sha512-QfB4ux76pdgOmlhB2IUZKmkq/Ce4nojIlXzGlWGPj+gSuGC6bakL6f5lt4I0YAM8hxOwYPFvJRfkqebym1VtyQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-10.3.0.tgz", + "integrity": "sha512-xbBuCGaXFAINdrGzUqBOfIKYA74AMNBud+t3PlJXqg+8sHJU2PARiXo0GiaAOCf7QBLzPBpYpC5jZW96iH3/7Q==", "dev": true, "license": "MIT", "engines": { @@ -2285,13 +2285,13 @@ } }, "node_modules/@cspell/cspell-worker": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-worker/-/cspell-worker-10.2.2.tgz", - "integrity": "sha512-IIoICOihmGbEftfBN35hpD5q0eS8yjzVst7Fvpbjo+XfyuUwZQNg9jzPOW4nNUskzpJT3puDRbZ8AxrodS5Kpw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-worker/-/cspell-worker-10.3.0.tgz", + "integrity": "sha512-3yKt+UvqdEwEdMLBxifOiwm2Au4Kz3Qf88YXhJOMGYjS+uv6YS16l1pYQftMARy4oTjmp2uDxrKK89yXdrZ71g==", "dev": true, "license": "MIT", "dependencies": { - "cspell-lib": "10.2.2" + "cspell-lib": "10.3.0" }, "engines": { "node": ">=22.18.0" @@ -2723,13 +2723,13 @@ "license": "MIT" }, "node_modules/@cspell/dynamic-import": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-10.2.2.tgz", - "integrity": "sha512-nYu5CP0OERXGoA1neXI7ieBSI9RSq79vTpWY4sZyK3Z9y8sL077jR3sQI5Q1ePb5tKFXof1UmRdgLS3F0Ef3uA==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-10.3.0.tgz", + "integrity": "sha512-FoKKLweFFdSty+c3RSldTQF9r4etUbYbmQ5qGoqswnq4nhjmhcADUcyB3Qzi/fCEw8IWFNRsnjbyH6i3w3ePHg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "10.2.2", + "@cspell/url": "10.3.0", "import-meta-resolve": "^4.2.0" }, "engines": { @@ -2737,9 +2737,9 @@ } }, "node_modules/@cspell/filetypes": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-10.2.2.tgz", - "integrity": "sha512-UWuvbNb2rLUwClzX8V5dY2hmURlCzpyXlnUUQL3NM3eJrghSDaDmb7uqfCIiObg2F3+E/6z1dgx2QkcA0luYQQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-10.3.0.tgz", + "integrity": "sha512-16mWGedtcYlsjMczXxQJBu1CUOsQvOpGjsTus8ZjFQ60ZGr/S6IO/W5PTlmwnO5jCBSPTnVfCLklQ5RVJWXQsA==", "dev": true, "license": "MIT", "engines": { @@ -2747,9 +2747,9 @@ } }, "node_modules/@cspell/rpc": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/rpc/-/rpc-10.2.2.tgz", - "integrity": "sha512-pF4Ekt6eZZKCmdr3IqTtjfoc5UVMXI89HhCYCc4l+GRLjTDPjCX5ekuvy2asByI30NBJUETsNc6yVtmSKZ/9UQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/rpc/-/rpc-10.3.0.tgz", + "integrity": "sha512-lcT7aR7bc8/nwbdC8R5Lu7pjxZZUbuTtv7pmd4ReanDY27HKwIM1ueDFfrMDdrwFjoQsKEJBNxsgweT2kc3lmg==", "dev": true, "license": "MIT", "engines": { @@ -2757,9 +2757,9 @@ } }, "node_modules/@cspell/strong-weak-map": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-10.2.2.tgz", - "integrity": "sha512-eXhJbPoPBzERBHncrZ02uNAS+cfvLKWGWbdaZ/R+sHZbbU3Sc4gnclQz+RRd2Vw3Q8Fra+o9ZLxAKFMB/ljvJw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-10.3.0.tgz", + "integrity": "sha512-amSk4X6zJS7f3Lqup+++HGFSttVudhO+8iCEElq2sfFODJNVrwzVoZKSZsplEy1T5M0pGYHVdNrfgYgN1smQsA==", "dev": true, "license": "MIT", "engines": { @@ -2767,9 +2767,9 @@ } }, "node_modules/@cspell/url": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@cspell/url/-/url-10.2.2.tgz", - "integrity": "sha512-KC+Rzi9mExB1rzxoT3ysC98tGhiSbgkOXc6U8fbJmoggFswfwwJEzwa2NUNX75Thlty5ZzaPandLS4P0dh4kOA==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@cspell/url/-/url-10.3.0.tgz", + "integrity": "sha512-2CdqNTOCOrRgKiwKzLIlF6iIFn7sfMTlEhEpjkjWdOd5XfCxvQrl5DIuNoqgIqXTarWAVb7AxRDPQ2ZdhU0JMg==", "dev": true, "license": "MIT", "engines": { @@ -5735,6 +5735,7 @@ "integrity": "sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/Boshen" } @@ -6289,6 +6290,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6306,6 +6308,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6323,6 +6326,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6340,6 +6344,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6357,6 +6362,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6377,6 +6383,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6397,6 +6404,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6417,6 +6425,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6437,6 +6446,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6457,6 +6467,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6477,6 +6488,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6494,6 +6506,7 @@ "os": [ "openharmony" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6511,6 +6524,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6528,6 +6542,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -6537,7 +6552,8 @@ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", @@ -6816,13 +6832,6 @@ "integrity": "sha512-5wl1j3IhtmE7POTl2W9VGQdbQyBQrRsF3jcYBK+0V353AuO8H2GFZkiFNyTRxL+TDY3HIFCHc3G983Osmg76Lg==", "license": "MIT" }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "dev": true, - "license": "MIT" - }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", @@ -7998,34 +8007,17 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, - "node_modules/@vitest/expect": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.11.tgz", - "integrity": "sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@standard-schema/spec": "^1.1.0", - "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.11", - "@vitest/utils": "4.1.11", - "chai": "^6.2.2", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "node_modules/@vitest/mocker": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.11.tgz", - "integrity": "sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.0.tgz", + "integrity": "sha512-66PGTMIiVJP3t4a5yxU9qPtf7MdTBs8jmToMvy+HVflB3Yy13WJZTtPePdvU+wjRV02SKK5doLbSA6o9pwOmiA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.1.11", + "@jridgewell/trace-mapping": "0.3.31", + "@vitest/spy": "5.0.0", "estree-walker": "^3.0.3", - "magic-string": "^0.30.21" + "magic-string": "^1.2.3" }, "funding": { "url": "https://opencollective.com/vitest" @@ -8043,72 +8035,24 @@ } } }, - "node_modules/@vitest/pretty-format": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.11.tgz", - "integrity": "sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.11.tgz", - "integrity": "sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "4.1.11", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.11.tgz", - "integrity": "sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.11", - "@vitest/utils": "4.1.11", - "magic-string": "^0.30.21", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.11.tgz", - "integrity": "sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==", + "node_modules/@vitest/mocker/node_modules/@vitest/spy": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.0.tgz", + "integrity": "sha512-uy+luWBAPw9XfthoHi5AkfHUnuPYEESjl0p/r+meoBnU8bxg5GDQ3Ey8MjcJ6sqahkL4PFyrvfMJJBw7LbU06g==", "dev": true, "license": "MIT", "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/utils": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.11.tgz", - "integrity": "sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==", + "node_modules/@vitest/mocker/node_modules/magic-string": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.2.3.tgz", + "integrity": "sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.11", - "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/@webassemblyjs/ast": { @@ -9781,29 +9725,29 @@ } }, "node_modules/cspell": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-10.2.2.tgz", - "integrity": "sha512-lQF469/Y3Fz5nlnQoAuA1ZDDheyCMNDyS3LBbAeoKL1gUKTDypH0qA6mqbp3KoZNicqGIxZoW3RoYkZ7v1tpZQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-10.3.0.tgz", + "integrity": "sha512-naVffsHObB8A4usJUMdN30OskNIoOQgZ3pYNCH8R/ypzfFy6PMDSJYOtLUhl/tkRWTDj/EgUaDRyE60tf3nrmQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-json-reporter": "10.2.2", - "@cspell/cspell-performance-monitor": "10.2.2", - "@cspell/cspell-pipe": "10.2.2", - "@cspell/cspell-types": "10.2.2", - "@cspell/cspell-worker": "10.2.2", - "@cspell/dynamic-import": "10.2.2", - "@cspell/url": "10.2.2", + "@cspell/cspell-json-reporter": "10.3.0", + "@cspell/cspell-performance-monitor": "10.3.0", + "@cspell/cspell-pipe": "10.3.0", + "@cspell/cspell-types": "10.3.0", + "@cspell/cspell-worker": "10.3.0", + "@cspell/dynamic-import": "10.3.0", + "@cspell/url": "10.3.0", "ansi-regex": "^6.3.0", "chalk": "^6.0.0", "chalk-template": "^1.1.2", "commander": "^15.0.0", - "cspell-config-lib": "10.2.2", - "cspell-dictionary": "10.2.2", - "cspell-gitignore": "10.2.2", - "cspell-glob": "10.2.2", - "cspell-io": "10.2.2", - "cspell-lib": "10.2.2", + "cspell-config-lib": "10.3.0", + "cspell-dictionary": "10.3.0", + "cspell-gitignore": "10.3.0", + "cspell-glob": "10.3.0", + "cspell-io": "10.3.0", + "cspell-lib": "10.3.0", "fast-json-stable-stringify": "^2.1.0", "flatted": "^3.4.4", "semver": "^7.8.5", @@ -9821,13 +9765,13 @@ } }, "node_modules/cspell-config-lib": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-10.2.2.tgz", - "integrity": "sha512-pVWQOXb6gYLx+JTNxhqWaI4qTtNXnMYtPWauQsjoHsjzQsrIeM8whhXpX5G/dt+7IriUrQNNoH1x+cCkbMQ4UA==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-10.3.0.tgz", + "integrity": "sha512-wkKxHAS9iWtBH9EASnBBTPFUo3c1PpDPD2ITKnqmDtPke5Wwy8Lx3wXlYtg74OFZfXIai6LPDnrCjzhgxQ6tjA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "10.2.2", + "@cspell/cspell-types": "10.3.0", "comment-json": "^5.0.0", "smol-toml": "^1.8.0", "yaml": "^2.9.0" @@ -9837,16 +9781,16 @@ } }, "node_modules/cspell-dictionary": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-10.2.2.tgz", - "integrity": "sha512-UbdKjoiFabeJMax/CPxWU5/ut7AvQ7h/s0OgHRjDdX9do1uKdURvLhe6UlesP2w01krioAGi//ZkV1JCZOOOSg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-10.3.0.tgz", + "integrity": "sha512-9AT2CseqOeFynRZ9k9A+wrqTJgKZNh26RBhb4hGViQsCQBofWIKuHxx5SNBoD+Fk7hGg8PkBhhrgGAcEqpSeHA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-performance-monitor": "10.2.2", - "@cspell/cspell-pipe": "10.2.2", - "@cspell/cspell-types": "10.2.2", - "cspell-trie-lib": "10.2.2", + "@cspell/cspell-performance-monitor": "10.3.0", + "@cspell/cspell-pipe": "10.3.0", + "@cspell/cspell-types": "10.3.0", + "cspell-trie-lib": "10.3.0", "fast-equals": "^6.0.2" }, "engines": { @@ -9854,15 +9798,15 @@ } }, "node_modules/cspell-gitignore": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-10.2.2.tgz", - "integrity": "sha512-/l0nF5jBqnowXcIMbLDCjFE8sKM6lKs4NjMa87JjYiOCx/LqN3rusL/Dkumws/NB2o5NUxqDRtitiYxw7tWlvQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-10.3.0.tgz", + "integrity": "sha512-gNzOX3J4t20cnxEK9QiIsNbJ7XwxqWiq3uwVIe4diVNYjK//WoT2OWtdAQeoSiV2XS8bPK5m7kFQ/x+u3RqQbQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "10.2.2", - "cspell-glob": "10.2.2", - "cspell-io": "10.2.2" + "@cspell/url": "10.3.0", + "cspell-glob": "10.3.0", + "cspell-io": "10.3.0" }, "bin": { "cspell-gitignore": "bin.mjs" @@ -9872,13 +9816,13 @@ } }, "node_modules/cspell-glob": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-10.2.2.tgz", - "integrity": "sha512-T1icxtdrv9QXETC0IQMBWPTNDxBYw4MPc0Z2iDPGFUjwWyYw2SBH8vC+S2HoXHt47BXg8Y2t6zbkPPkXlK1OzQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-10.3.0.tgz", + "integrity": "sha512-mXMLDBU6e0GeLs2r8J+pBQdeZfFlHfH/+Mvr2KSZWfmqcnevXeFwcckIbqSm+30yWF5I66u988YOagxJw3+btQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "10.2.2", + "@cspell/url": "10.3.0", "picomatch": "^4.0.7" }, "engines": { @@ -9899,14 +9843,14 @@ } }, "node_modules/cspell-grammar": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-10.2.2.tgz", - "integrity": "sha512-GYLzoFT14FTuTmkwgzQzXInC1aUB/Wb7GzTrA7Gj8mrXFfHC/zJ1oTXufAY1fS9oGvYezvjb2LWPoMM+schmnA==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-10.3.0.tgz", + "integrity": "sha512-XrFxYI5O7Cu1vwvtmIX3/AX1Ln7nkemsDtEBDs0RqLmWBLtzc1VcFmmAi3h5t36mbWev2TuVyyXjTfvZb41gRA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "10.2.2", - "@cspell/cspell-types": "10.2.2" + "@cspell/cspell-pipe": "10.3.0", + "@cspell/cspell-types": "10.3.0" }, "bin": { "cspell-grammar": "bin.mjs" @@ -9916,42 +9860,42 @@ } }, "node_modules/cspell-io": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-10.2.2.tgz", - "integrity": "sha512-ksMJwWNk2es4c9zv1yL85whDmwVM8gddRxLSRBCIqTxOUelpfE7498Ci8XvfUauWgbdHqlaTuEmCqSMzK3xIQw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-10.3.0.tgz", + "integrity": "sha512-KxtKKdw5rrNtLAtGJoJoF1m4mI6i0Zs2TL7qowh4cSh991ncHFtpjJ9aZJW6PmJ9RZF8LtkYRL8WH6Vp3BB9fQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-service-bus": "10.2.2", - "@cspell/url": "10.2.2" + "@cspell/cspell-service-bus": "10.3.0", + "@cspell/url": "10.3.0" }, "engines": { "node": ">=22.18.0" } }, "node_modules/cspell-lib": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-10.2.2.tgz", - "integrity": "sha512-d9ElvCs34f5aoVEOr0aP2iqUQYjrgvETept3HIbp67cwxKLkhygO1F8Ce6vcQ+G9PiGM6DrCuwHq8zvqGbJ0LQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-10.3.0.tgz", + "integrity": "sha512-XuyUgOEjkSXi+SlRsTdi3vhW6RaZDgQxAlQ9DpATsWbUKZ8t5DD1nM5X0kIF4UrvcGQ+wmJI8RwMY6GMvmOPmw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-bundled-dicts": "10.2.2", - "@cspell/cspell-performance-monitor": "10.2.2", - "@cspell/cspell-pipe": "10.2.2", - "@cspell/cspell-resolver": "10.2.2", - "@cspell/cspell-types": "10.2.2", - "@cspell/dynamic-import": "10.2.2", - "@cspell/filetypes": "10.2.2", - "@cspell/rpc": "10.2.2", - "@cspell/strong-weak-map": "10.2.2", - "@cspell/url": "10.2.2", - "cspell-config-lib": "10.2.2", - "cspell-dictionary": "10.2.2", - "cspell-glob": "10.2.2", - "cspell-grammar": "10.2.2", - "cspell-io": "10.2.2", - "cspell-trie-lib": "10.2.2", + "@cspell/cspell-bundled-dicts": "10.3.0", + "@cspell/cspell-performance-monitor": "10.3.0", + "@cspell/cspell-pipe": "10.3.0", + "@cspell/cspell-resolver": "10.3.0", + "@cspell/cspell-types": "10.3.0", + "@cspell/dynamic-import": "10.3.0", + "@cspell/filetypes": "10.3.0", + "@cspell/rpc": "10.3.0", + "@cspell/strong-weak-map": "10.3.0", + "@cspell/url": "10.3.0", + "cspell-config-lib": "10.3.0", + "cspell-dictionary": "10.3.0", + "cspell-glob": "10.3.0", + "cspell-grammar": "10.3.0", + "cspell-io": "10.3.0", + "cspell-trie-lib": "10.3.0", "env-paths": "^4.0.0", "gensequence": "^8.0.8", "import-fresh": "^4.0.0", @@ -9978,16 +9922,16 @@ } }, "node_modules/cspell-trie-lib": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-10.2.2.tgz", - "integrity": "sha512-n+dscSwWLSWcN/tQhv2wJziX/AfPxRVffr6YkGOcVCov1YaL3XoWpR0f6Yk16281s231hUcLEPgcWzISTs09dw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-10.3.0.tgz", + "integrity": "sha512-Y2bI1dEly/ToxM98T/4aVifbKJNcHM/pYcyQ65Zc+wKAOvB8S4Xt93dx6Ik2EraL/tT3zC5xP4Wq7B1qlpjo8w==", "dev": true, "license": "MIT", "engines": { "node": ">=22.18.0" }, "peerDependencies": { - "@cspell/cspell-types": "10.2.2" + "@cspell/cspell-types": "10.3.0" } }, "node_modules/cspell/node_modules/ansi-regex": { @@ -13904,16 +13848,6 @@ "yallist": "^3.0.2" } }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, "node_modules/markdown-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", @@ -17023,13 +16957,6 @@ "node": ">=8" } }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, "node_modules/periscopic": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", @@ -19481,6 +19408,7 @@ "integrity": "sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@oxc-project/types": "=0.143.0", "@rolldown/pluginutils": "^1.0.0" @@ -20786,11 +20714,14 @@ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-6.1.4.tgz", + "integrity": "sha512-9APumHG7r4yOk4X4WlkmE71aZcv1gvin1czO3OQ1U9iJcFA5Ja/ygyb0vPOVHTthFozUYs8CLoLUlM8grb2lTQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } }, "node_modules/tinyexec": { "version": "1.3.0", @@ -20859,16 +20790,6 @@ "node": "^18.0.0 || >=20.0.0" } }, - "node_modules/tinyrainbow": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", - "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/title-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", @@ -21586,6 +21507,7 @@ "integrity": "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.5", @@ -21664,6 +21586,7 @@ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -21672,38 +21595,31 @@ } }, "node_modules/vitest": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.11.tgz", - "integrity": "sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.0.tgz", + "integrity": "sha512-gpsMNoRhMjMktVxPtstOH4/PJuPyovVaMDr4oDilXaGH1EcqM2OE96SoHT2VIQ6fTGtTjqmHDrEu2X9RQiXf8Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.1.11", - "@vitest/mocker": "4.1.11", - "@vitest/pretty-format": "4.1.11", - "@vitest/runner": "4.1.11", - "@vitest/snapshot": "4.1.11", - "@vitest/spy": "4.1.11", - "@vitest/utils": "4.1.11", - "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": "^4.0.0-rc.1", - "tinybench": "^2.9.0", - "tinyexec": "^1.0.2", - "tinyglobby": "^0.2.15", - "tinyrainbow": "^3.1.0", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "@types/chai": "^5.2.2", + "@vitest/mocker": "5.0.0", + "chai": "^6.2.2", + "es-module-lexer": "^2.3.2", + "expect-type": "^1.4.0", + "magic-string": "^1.2.3", + "obug": "^2.1.4", + "picomatch": "^4.0.7", + "std-env": "^4.2.0", + "tinybench": "6.1.4", + "tinyexec": "1.3.0", + "tinyglobby": "^0.2.17", "why-is-node-running": "^2.3.0" }, "bin": { "vitest": "vitest.mjs" }, "engines": { - "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^22.12.0 || ^24.0.0 || >=26.0.0" }, "funding": { "url": "https://opencollective.com/vitest" @@ -21711,16 +21627,16 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", - "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.11", - "@vitest/browser-preview": "4.1.11", - "@vitest/browser-webdriverio": "4.1.11", - "@vitest/coverage-istanbul": "4.1.11", - "@vitest/coverage-v8": "4.1.11", - "@vitest/ui": "4.1.11", + "@types/node": "^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "5.0.0", + "@vitest/browser-preview": "5.0.0", + "@vitest/browser-webdriverio": "^5.0.0-beta.5 || >=5.0.0", + "@vitest/coverage-istanbul": "5.0.0", + "@vitest/coverage-v8": "5.0.0", + "@vitest/ui": "5.0.0", "happy-dom": "*", "jsdom": "*", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + "vite": "^6.4.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "@edge-runtime/vm": { @@ -21761,6 +21677,16 @@ } } }, + "node_modules/vitest/node_modules/magic-string": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.2.3.tgz", + "integrity": "sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, "node_modules/vitest/node_modules/picomatch": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", diff --git a/package.json b/package.json index 517f6e2d1d..eeae038389 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,6 @@ "hygen": "^6.2.11", "prettier": "^3.9.6", "typescript": "^5.9.3", - "vitest": "^4.1.7" + "vitest": "^5.0.0" } }