From da9ae8dd741b80115a5cdb39209ff192ecc17ba4 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Thu, 28 May 2026 17:08:17 +0000 Subject: [PATCH 01/12] test: migrate test suite from jest to the node:test runner - Replace jest globals and `expect` matchers with `node:test` and `node:assert` equivalents across all test files. - Convert the five `toMatchSnapshot` assertions to inline `assert.deepStrictEqual` checks and drop the `__snapshots__` directory. - Add `scripts/test.js` to run the suite with an explicit file list so `test/fixtures` is never executed as tests and behavior is identical on every supported Node.js version and OS. - Wire coverage through `node --test --experimental-test-coverage` with the built-in lcov reporter and keep uploading to Codecov. - Remove `jest`, `@types/jest` and `prettier-2`; update the CI matrix to Node.js 18-25 (coverage collected on 22+). --- .github/workflows/test.yml | 47 +- eslint.config.mjs | 15 + jest.config.js | 6 - package-lock.json | 3095 +++++------------------ package.json | 11 +- scripts/test.js | 38 + test/CachedInputFileSystem.test.js | 283 ++- test/DescriptionFileUtils.test.js | 33 +- test/browserField.test.js | 75 +- test/dependencies.test.js | 13 +- test/dos-device-paths.test.js | 51 +- test/entrypoints.test.js | 35 +- test/extension-alias.test.js | 76 +- test/extensions.test.js | 43 +- test/forEachBail.test.js | 27 +- test/fullSpecified.test.js | 15 +- test/getPaths.test.js | 31 +- test/identifier.test.js | 9 +- test/incorrect-description-file.test.js | 27 +- test/log-info.test.js | 50 +- test/main-fields.test.js | 11 +- test/missing.test.js | 19 +- test/path.test.js | 232 +- test/plugins.test.js | 15 +- test/pnp.test.js | 116 +- test/pr-53.test.js | 5 +- test/recursion.test.js | 21 +- test/resolve-context-stack.test.js | 83 +- test/resolve-logging.test.js | 49 +- test/resolve.test.js | 63 +- test/resolver-cache.test.js | 62 +- test/roots.test.js | 48 +- test/scoped-packages.test.js | 18 +- test/simple.test.js | 325 ++- test/strip-json-comments.test.js | 41 +- test/symlink.test.js | 36 +- test/tsconfig-paths.test.js | 300 ++- test/unsafe-cache.test.js | 85 +- test/util-fs.test.js | 23 +- test/yield.test.js | 169 +- tsconfig.types.test.json | 2 +- 41 files changed, 2193 insertions(+), 3510 deletions(-) delete mode 100644 jest.config.js create mode 100644 scripts/test.js diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 887172bb..cf38e5bf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,55 +29,34 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] - node-version: [10.x, 12.x, 14.x, 16.x, 18.x, 20.x, 22.x, 24.x, 25.x] + node-version: [18.x, 20.x, 22.x, 24.x, 25.x] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 - id: calculate_architecture - with: - result-encoding: string - script: | - if ('${{ matrix.os }}' === 'macos-latest' && ('${{ matrix['node-version'] }}' === '10.x' || '${{ matrix['node-version'] }}' === '12.x' || '${{ matrix['node-version'] }}' === '14.x')) { - return "x64" - } else { - return '' - } - - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: ${{ matrix.node-version }} - architecture: ${{ steps.calculate_architecture.outputs.result }} - # Legacy Node (10-16) reinstalls deps after dropping/bypassing - # package-lock.json, so there's no lockfile for setup-node's npm - # cache to key on. - cache: ${{ (matrix.node-version == '10.x' || matrix.node-version == '12.x' || matrix.node-version == '14.x' || matrix.node-version == '16.x') && '' || 'npm' }} - - - name: Install dependencies - shell: bash - run: | - rm -f package-lock.json - - npm config set progress false - - if [ "${{ matrix.node-version }}" = "10.x" ]; then - yarn add -D typescript@^4 jest@^27 memfs@^3 --ignore-scripts --ignore-engines - else - npm install -g npm@7 - npm install -D typescript@^4 jest@^27 memfs@^3 --ignore-scripts --no-audit --prefer-offline --no-save --no-package-lock - fi - if: matrix.node-version == '10.x' || matrix.node-version == '12.x' || matrix.node-version == '14.x' || matrix.node-version == '16.x' + cache: npm - name: Install dependencies run: npm ci - if: matrix.node-version != '10.x' && matrix.node-version != '12.x' && matrix.node-version != '14.x' && matrix.node-version != '16.x' + + # The built-in coverage lcov reporter and `--test-coverage-include` are + # only available on Node.js 22+, so older versions run the suite without + # collecting coverage. + - name: Run tests + if: matrix.node-version == '18.x' || matrix.node-version == '20.x' + run: npm run test:only - name: Run tests with coverage - run: npm run test:coverage -- --ci + if: matrix.node-version != '18.x' && matrix.node-version != '20.x' + run: npm run test:coverage - uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 + if: matrix.node-version != '18.x' && matrix.node-version != '20.x' with: + files: ./coverage/lcov.info flags: integration token: ${{ secrets.CODECOV_TOKEN }} diff --git a/eslint.config.mjs b/eslint.config.mjs index 11792b69..41f1e5f1 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -32,4 +32,19 @@ export default defineConfig([ "unicorn/prefer-native-coercion-functions": "off", }, }, + { + // The test suite relies on `node:test` and modern `node:assert` helpers, + // which are newer than the `engines.node` range the published library + // targets. Tests are dev-only, so the builtin version check does not apply. + // The relaxed core rules mirror the defaults the shared config previously + // applied to test files. + files: ["test/*.js"], + rules: { + "n/no-unsupported-features/node-builtins": "off", + "id-length": "off", + "no-console": "off", + "no-eval": "off", + "no-control-regex": "off", + }, + }, ]); diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 8f795cf1..00000000 --- a/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = { - moduleFileExtensions: ["js", "mjs", "cjs", "ts"], - setupFiles: ["/test/polyfill-text-encoding.js"], -}; diff --git a/package-lock.json b/package-lock.json index 635b9377..b35743b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,13 +17,11 @@ "@changesets/get-github-info": "^0.8.0", "@codspeed/core": "^5.2.0", "@types/graceful-fs": "^4.1.6", - "@types/jest": "^30.0.0", "@types/node": "^24.10.4", "cspell": "^10.0.0", "eslint": "^9.39.2", "eslint-config-webpack": "^4.9.5", "husky": "^9.1.7", - "jest": "^30.3.0", "lint-staged": "^17.0.4", "memfs": "^4.56.11", "prettier": "^3.7.4", @@ -56,8 +54,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", - "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -71,8 +67,6 @@ }, "node_modules/@babel/compat-data": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", - "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", "dev": true, "license": "MIT", "engines": { @@ -81,8 +75,6 @@ }, "node_modules/@babel/core": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", - "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", "dev": true, "license": "MIT", "dependencies": { @@ -112,8 +104,6 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -122,8 +112,6 @@ }, "node_modules/@babel/generator": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", - "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", "dev": true, "license": "MIT", "dependencies": { @@ -139,8 +127,6 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { @@ -156,8 +142,6 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -166,8 +150,6 @@ }, "node_modules/@babel/helper-globals": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, "license": "MIT", "engines": { @@ -176,8 +158,6 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "dependencies": { @@ -190,8 +170,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { @@ -208,18 +186,16 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { @@ -228,8 +204,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -238,8 +212,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -248,8 +220,6 @@ }, "node_modules/@babel/helpers": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "dev": true, "license": "MIT", "dependencies": { @@ -262,8 +232,6 @@ }, "node_modules/@babel/parser": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", - "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -278,10 +246,10 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -291,10 +259,10 @@ }, "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -304,10 +272,10 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -317,10 +285,10 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -333,10 +301,10 @@ }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", - "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, @@ -349,10 +317,10 @@ }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -362,10 +330,10 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -375,10 +343,10 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", - "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, @@ -391,10 +359,10 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -404,10 +372,10 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -417,10 +385,10 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -430,10 +398,10 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -443,10 +411,10 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -456,10 +424,10 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -469,10 +437,10 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -485,10 +453,10 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -501,10 +469,10 @@ }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", - "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, @@ -517,8 +485,6 @@ }, "node_modules/@babel/runtime": { "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", - "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "dev": true, "license": "MIT", "engines": { @@ -527,8 +493,6 @@ }, "node_modules/@babel/template": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { @@ -542,8 +506,6 @@ }, "node_modules/@babel/traverse": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", - "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", "dev": true, "license": "MIT", "dependencies": { @@ -561,8 +523,6 @@ }, "node_modules/@babel/types": { "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", - "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", "dev": true, "license": "MIT", "dependencies": { @@ -575,15 +535,13 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/@changesets/apply-release-plan": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.1.1.tgz", - "integrity": "sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==", "dev": true, "license": "MIT", "dependencies": { @@ -604,8 +562,6 @@ }, "node_modules/@changesets/apply-release-plan/node_modules/detect-indent": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, "license": "MIT", "engines": { @@ -614,8 +570,6 @@ }, "node_modules/@changesets/apply-release-plan/node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -630,8 +584,6 @@ }, "node_modules/@changesets/assemble-release-plan": { "version": "6.0.10", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.10.tgz", - "integrity": "sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==", "dev": true, "license": "MIT", "dependencies": { @@ -645,8 +597,6 @@ }, "node_modules/@changesets/changelog-git": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", - "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -655,8 +605,6 @@ }, "node_modules/@changesets/cli": { "version": "2.31.0", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.31.0.tgz", - "integrity": "sha512-AhI4enNTgHu2IZr6K4WZyf0EPch4XVMn1yOMFmCD9gsfBGqMYaHXls5HyDv6/CL5axVQABz68eG30eCtbr2wFg==", "dev": true, "license": "MIT", "dependencies": { @@ -693,8 +641,6 @@ }, "node_modules/@changesets/config": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.4.tgz", - "integrity": "sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -710,8 +656,6 @@ }, "node_modules/@changesets/errors": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", - "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", "dev": true, "license": "MIT", "dependencies": { @@ -720,8 +664,6 @@ }, "node_modules/@changesets/get-dependents-graph": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.4.tgz", - "integrity": "sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==", "dev": true, "license": "MIT", "dependencies": { @@ -733,8 +675,6 @@ }, "node_modules/@changesets/get-github-info": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.8.0.tgz", - "integrity": "sha512-cRnC+xdF0JIik7coko3iUP9qbnfi1iJQ3sAa6dE+Tx3+ET8bjFEm63PA4WEohgjYcmsOikPHWzPsMWWiZmntOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -744,8 +684,6 @@ }, "node_modules/@changesets/get-release-plan": { "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.16.tgz", - "integrity": "sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==", "dev": true, "license": "MIT", "dependencies": { @@ -759,15 +697,11 @@ }, "node_modules/@changesets/get-version-range-type": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", - "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", "dev": true, "license": "MIT" }, "node_modules/@changesets/git": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", - "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -780,8 +714,6 @@ }, "node_modules/@changesets/logger": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", - "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", "dev": true, "license": "MIT", "dependencies": { @@ -790,8 +722,6 @@ }, "node_modules/@changesets/parse": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.3.tgz", - "integrity": "sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==", "dev": true, "license": "MIT", "dependencies": { @@ -801,8 +731,6 @@ }, "node_modules/@changesets/pre": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", - "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", "dev": true, "license": "MIT", "dependencies": { @@ -814,8 +742,6 @@ }, "node_modules/@changesets/read": { "version": "0.6.7", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.7.tgz", - "integrity": "sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==", "dev": true, "license": "MIT", "dependencies": { @@ -830,8 +756,6 @@ }, "node_modules/@changesets/should-skip-package": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", - "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", "dev": true, "license": "MIT", "dependencies": { @@ -841,15 +765,11 @@ }, "node_modules/@changesets/types": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", - "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", "dev": true, "license": "MIT" }, "node_modules/@changesets/write": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.4.0.tgz", - "integrity": "sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==", "dev": true, "license": "MIT", "dependencies": { @@ -861,8 +781,6 @@ }, "node_modules/@changesets/write/node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -876,23 +794,18 @@ } }, "node_modules/@codspeed/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@codspeed/core/-/core-5.5.0.tgz", - "integrity": "sha512-5FbjNlxSVOfemB85orEecikZiTz0C8aZYUfCkt5HY6QLLd1mqkrHAfekEJw0gkHcgCjNgD6DVp2TXm0V/xtt4w==", + "version": "5.4.0", "dev": true, "license": "Apache-2.0", "dependencies": { "axios": "^1.4.0", "find-up": "^6.3.0", "form-data": "^4.0.4", - "node-gyp-build": "^4.6.0", - "stack-trace": "1.0.0-pre2" + "node-gyp-build": "^4.6.0" } }, "node_modules/@codspeed/core/node_modules/find-up": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, "license": "MIT", "dependencies": { @@ -908,8 +821,6 @@ }, "node_modules/@codspeed/core/node_modules/locate-path": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, "license": "MIT", "dependencies": { @@ -924,8 +835,6 @@ }, "node_modules/@codspeed/core/node_modules/p-limit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -940,8 +849,6 @@ }, "node_modules/@codspeed/core/node_modules/p-locate": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "license": "MIT", "dependencies": { @@ -956,8 +863,6 @@ }, "node_modules/@codspeed/core/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, "license": "MIT", "engines": { @@ -966,8 +871,6 @@ }, "node_modules/@codspeed/core/node_modules/yocto-queue": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", - "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", "dev": true, "license": "MIT", "engines": { @@ -978,9 +881,7 @@ } }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-10.0.1.tgz", - "integrity": "sha512-WvkSDNX4Uyyj/ZgbPO6L38iFNMfK1EqsH1FteRiI2qLz6QZMXRFrIt12OqiWIplzZDDaVpBH9FCJOPJll0fjCQ==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { @@ -1049,22 +950,18 @@ } }, "node_modules/@cspell/cspell-json-reporter": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-10.0.1.tgz", - "integrity": "sha512-/nes1RGILec3WCBcoMOd0byNTBtnJuPaVz/+ZzqYkLtY7x58VMcBG5kyP6hPyN8cIwjRADE/SR43gwdXuqk/FA==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "10.0.1" + "@cspell/cspell-types": "10.0.0" }, "engines": { "node": ">=22.18.0" } }, "node_modules/@cspell/cspell-performance-monitor": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-performance-monitor/-/cspell-performance-monitor-10.0.1.tgz", - "integrity": "sha512-9tVcHXwRnbazUv4WSG0h3MqV4+LgmLNgSALAQUflPPW0EMxTf7C4Dmv9cgxJyCEQrdnVKCr58nPPaahhz9LJUg==", + "version": "10.0.0", "dev": true, "license": "MIT", "engines": { @@ -1072,9 +969,7 @@ } }, "node_modules/@cspell/cspell-pipe": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-10.0.1.tgz", - "integrity": "sha512-HPeXMD9AZ3V/qPkvQaPcak+C7cJ2z7JTHN8smd6J8L2aThLRky2cHc2OyeaHPSHB7WA47b4z2n5u5nawZhv5VQ==", + "version": "10.0.0", "dev": true, "license": "MIT", "engines": { @@ -1082,9 +977,7 @@ } }, "node_modules/@cspell/cspell-resolver": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-10.0.1.tgz", - "integrity": "sha512-PIzkZHD1fGUQx1XteK2d1iQ0Mzq/maYcoB4jkvAiiR6WqP3MWYNKFdI9z+R5pOq5KgMfW+5Ig1q0oSR6h8irlA==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { @@ -1095,9 +988,7 @@ } }, "node_modules/@cspell/cspell-service-bus": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-10.0.1.tgz", - "integrity": "sha512-y6NcIGP2IdXaBL4PVH8vxsr7K27wzz3Ech87UtUtrDSXAiVEOvXgAIknEOUVp59rTlUE8Rn4IRURC6f/hgMyfw==", + "version": "10.0.0", "dev": true, "license": "MIT", "engines": { @@ -1105,9 +996,7 @@ } }, "node_modules/@cspell/cspell-types": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-10.0.1.tgz", - "integrity": "sha512-kLgLShnWADDVreKC63pBrWkcvxgZzFIfO34Jhx/SWfuOIA3cD8AXT+HjyuLfoGJ7mUb58hv2kUziKzEy4INb1w==", + "version": "10.0.0", "dev": true, "license": "MIT", "engines": { @@ -1115,13 +1004,11 @@ } }, "node_modules/@cspell/cspell-worker": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/cspell-worker/-/cspell-worker-10.0.1.tgz", - "integrity": "sha512-L2bJerfuYOls2wEknm8FmynLtj/G7O4UqX9I/HznRggEW6i2yZIxagDetpVDNowpyavNHJ3SJtUFiyMiZc16Sw==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { - "cspell-lib": "10.0.1" + "cspell-lib": "10.0.0" }, "engines": { "node": ">=22.18.0" @@ -1129,281 +1016,203 @@ }, "node_modules/@cspell/dict-ada": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.1.1.tgz", - "integrity": "sha512-E+0YW9RhZod/9Qy2gxfNZiHJjCYFlCdI69br1eviQQWB8yOTJX0JHXLs79kOYhSW0kINPVUdvddEBe6Lu6CjGQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-al": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-al/-/dict-al-1.1.1.tgz", - "integrity": "sha512-sD8GCaZetgQL4+MaJLXqbzWcRjfKVp8x+px3HuCaaiATAAtvjwUQ5/Iubiqwfd1boIh2Y1/3EgM3TLQ7Q8e0wQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-aws": { "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.17.tgz", - "integrity": "sha512-ORcblTWcdlGjIbWrgKF+8CNEBQiLVKdUOFoTn0KPNkAYnFcdPP0muT4892h7H4Xafh3j72wqB4/loQ6Nti9E/w==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-bash": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.2.3.tgz", - "integrity": "sha512-ljUZoKHbDqw5Sx0qpL2qTUlmkmr+vhZH/sCNrNaBZKTbdgiswErSnIF1jRbGmEitJNxHRHWsuZyVgnTGfVO1Yw==", + "version": "4.2.2", "dev": true, "license": "MIT", "dependencies": { - "@cspell/dict-shell": "1.2.0" + "@cspell/dict-shell": "1.1.2" } }, "node_modules/@cspell/dict-companies": { "version": "3.2.11", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.11.tgz", - "integrity": "sha512-0cmafbcz2pTHXLd59eLR1gvDvN6aWAOM0+cIL4LLF9GX9yB2iKDNrKsvs4tJRqutoaTdwNFBbV0FYv+6iCtebQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-cpp": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-7.0.2.tgz", - "integrity": "sha512-dfbeERiVNeqmo/npivdR6rDiBCqZi3QtjH2Z0HFcXwpdj6i97dX1xaKyK2GUsO/p4u1TOv63Dmj5Vm48haDpuA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-cryptocurrencies": { "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.5.tgz", - "integrity": "sha512-R68hYYF/rtlE6T/dsObStzN5QZw+0aQBinAXuWCVqwdS7YZo0X33vGMfChkHaiCo3Z2+bkegqHlqxZF4TD3rUA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-csharp": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.8.tgz", - "integrity": "sha512-qmk45pKFHSxckl5mSlbHxmDitSsGMlk/XzFgt7emeTJWLNSTUK//MbYAkBNRtfzB4uD7pAFiKgpKgtJrTMRnrQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-css": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.1.2.tgz", - "integrity": "sha512-+ylGoKdwZ2sVOCOnU2Eq5wDZx+RaVX3HoKyNHGGsFvhSw6IidQ6tH/mAPKBDofViHJoWCPNlklE0lTr6MDG3QA==", + "version": "4.1.1", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-dart": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.2.tgz", - "integrity": "sha512-sUiLW56t9gfZcu8iR/5EUg+KYyRD83Cjl3yjDEA2ApVuJvK1HhX+vn4e4k4YfjpUQMag8XO2AaRhARE09+/rqw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-data-science": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.14.tgz", - "integrity": "sha512-jl6Ds4u5u5JT+yY30pWQpAbdCHfy3lCcNkLbpL/AZKoUaLEoXbaYsps9xQtvD7DyaiXxiLZkdH2yHHXtoFtZyg==", + "version": "2.0.13", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-django": { "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.6.tgz", - "integrity": "sha512-SdbSFDGy9ulETqNz15oWv2+kpWLlk8DJYd573xhIkeRdcXOjskRuxjSZPKfW7O3NxN/KEf3gm3IevVOiNuFS+w==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-docker": { "version": "1.1.17", - "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.17.tgz", - "integrity": "sha512-OcnVTIpHIYYKhztNTyK8ShAnXTfnqs43hVH6p0py0wlcwRIXe5uj4f12n7zPf2CeBI7JAlPjEsV0Rlf4hbz/xQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-dotnet": { "version": "5.0.13", - "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.13.tgz", - "integrity": "sha512-xPp7jMnFpOri7tzmqmm/dXMolXz1t2bhNqxYkOyMqXhvs08oc7BFs+EsbDY0X7hqiISgeFZGNqn0dOCr+ncPYw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-elixir": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.8.tgz", - "integrity": "sha512-CyfphrbMyl4Ms55Vzuj+mNmd693HjBFr9hvU+B2YbFEZprE5AG+EXLYTMRWrXbpds4AuZcvN3deM2XVB80BN/Q==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-en_us": { - "version": "4.4.35", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.35.tgz", - "integrity": "sha512-xWpxBCc/FzzMMo/A+0qwARVaIIhR0Ql8yhhv4rvsvg+GfQF+LG9yzg2GwTM5N2rjvzmM3nKuR9zxFZq2I6fJSg==", + "version": "4.4.33", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-en-common-misspellings": { "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.12.tgz", - "integrity": "sha512-14Eu6QGqyksqOd4fYPuRb58lK1Va7FQK9XxFsRKnZU8LhL3N+kj7YKDW+7aIaAN/0WGEqslGP6lGbQzNti8Akw==", "dev": true, "license": "CC BY-SA 4.0" }, "node_modules/@cspell/dict-en-gb-mit": { - "version": "3.1.24", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.24.tgz", - "integrity": "sha512-Oowb/Uzkh7OmDRdCcETzMc9imEb4IpLlHJXoYjX8A8DS2X/54gqSjI915JFB8hKtFjBko5OM0BLQ+6cZhFEMmQ==", + "version": "3.1.22", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-filetypes": { "version": "3.0.18", - "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.18.tgz", - "integrity": "sha512-yU7RKD/x1IWmDLzWeiItMwgV+6bUcU/af23uS0+uGiFUbsY1qWV/D4rxlAAO6Z7no3J2z8aZOkYIOvUrJq0Rcw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-flutter": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-flutter/-/dict-flutter-1.1.1.tgz", - "integrity": "sha512-UlOzRcH2tNbFhZmHJN48Za/2/MEdRHl2BMkCWZBYs+30b91mWvBfzaN4IJQU7dUZtowKayVIF9FzvLZtZokc5A==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-fonts": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.6.tgz", - "integrity": "sha512-aR/0csY01dNb0A1tw/UmN9rKgHruUxsYsvXu6YlSBJFu60s26SKr/k1o4LavpHTQ+lznlYMqAvuxGkE4Flliqw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-fsharp": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.1.1.tgz", - "integrity": "sha512-imhs0u87wEA4/cYjgzS0tAyaJpwG7vwtC8UyMFbwpmtw+/bgss+osNfyqhYRyS/ehVCWL17Ewx2UPkexjKyaBA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-fullstack": { "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.9.tgz", - "integrity": "sha512-diZX+usW5aZ4/b2T0QM/H/Wl9aNMbdODa1Jq0ReBr/jazmNeWjd+PyqeVgzd1joEaHY+SAnjrf/i9CwKd2ZtWQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-gaming-terms": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.1.2.tgz", - "integrity": "sha512-9XnOvaoTBscq0xuD6KTEIkk9hhdfBkkvJAIsvw3JMcnp1214OCGW8+kako5RqQ2vTZR3Tnf3pc57o7VgkM0q1Q==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-git": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.1.0.tgz", - "integrity": "sha512-KEt9zGkxqGy2q1nwH4CbyqTSv5nadpn8BAlDnzlRcnL0Xb3LX9xTgSGShKvzb0bw35lHoYyLWN2ZKAqbC4pgGQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-golang": { "version": "6.0.26", - "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.26.tgz", - "integrity": "sha512-YKA7Xm5KeOd14v5SQ4ll6afe9VSy3a2DWM7L9uBq4u3lXToRBQ1W5PRa+/Q9udd+DTURyVVnQ+7b9cnOlNxaRg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-google": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.9.tgz", - "integrity": "sha512-biL65POqialY0i4g6crj7pR6JnBkbsPovB2WDYkj3H4TuC/QXv7Pu5pdPxeUJA6TSCHI7T5twsO4VSVyRxD9CA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-haskell": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.6.tgz", - "integrity": "sha512-ib8SA5qgftExpYNjWhpYIgvDsZ/0wvKKxSP+kuSkkak520iPvTJumEpIE+qPcmJQo4NzdKMN8nEfaeci4OcFAQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-html": { "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.15.tgz", - "integrity": "sha512-GJYnYKoD9fmo2OI0aySEGZOjThnx3upSUvV7mmqUu8oG+mGgzqm82P/f7OqsuvTaInZZwZbo+PwJQd/yHcyFIw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-html-symbol-entities": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.5.tgz", - "integrity": "sha512-429alTD4cE0FIwpMucvSN35Ld87HCyuM8mF731KU5Rm4Je2SG6hmVx7nkBsLyrmH3sQukTcr1GaiZsiEg8svPA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-java": { "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.12.tgz", - "integrity": "sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-julia": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.1.1.tgz", - "integrity": "sha512-WylJR9TQ2cgwd5BWEOfdO3zvDB+L7kYFm0I9u0s9jKHWQ6yKmfKeMjU9oXxTBxIufhCXm92SKwwVNAC7gjv+yA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-k8s": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.12.tgz", - "integrity": "sha512-2LcllTWgaTfYC7DmkMPOn9GsBWsA4DZdlun4po8s2ysTP7CPEnZc1ZfK6pZ2eI4TsZemlUQQ+NZxMe9/QutQxg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-kotlin": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-kotlin/-/dict-kotlin-1.1.1.tgz", - "integrity": "sha512-J3NzzfgmxRvEeOe3qUXnSJQCd38i/dpF9/t3quuWh6gXM+krsAXP75dY1CzDmS8mrJAlBdVBeAW5eAZTD8g86Q==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-latex": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-5.1.0.tgz", - "integrity": "sha512-qxT4guhysyBt0gzoliXYEBYinkAdEtR2M7goRaUH0a7ltCsoqqAeEV8aXYRIdZGcV77gYSobvu3jJL038tlPAw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-lorem-ipsum": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.5.tgz", - "integrity": "sha512-9a4TJYRcPWPBKkQAJ/whCu4uCAEgv/O2xAaZEI0n4y1/l18Yyx8pBKoIX5QuVXjjmKEkK7hi5SxyIsH7pFEK9Q==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-lua": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.8.tgz", - "integrity": "sha512-N4PkgNDMu9JVsRu7JBS/3E/dvfItRgk9w5ga2dKq+JupP2Y3lojNaAVFhXISh4Y0a6qXDn2clA6nvnavQ/jjLA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-makefile": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.5.tgz", - "integrity": "sha512-4vrVt7bGiK8Rx98tfRbYo42Xo2IstJkAF4tLLDMNQLkQ86msDlYSKG1ZCk8Abg+EdNcFAjNhXIiNO+w4KflGAQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-markdown": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.17.tgz", - "integrity": "sha512-H8bAxih6U8NOnSPL7R8My+tqjaB4tmnJTjERuz4zYqmf+cH+5xshX3UVgKlwWFcyjsYfv/zEDuRdMctQv1q6HQ==", + "version": "2.0.16", "dev": true, "license": "MIT", "peerDependencies": { - "@cspell/dict-css": "^4.1.2", + "@cspell/dict-css": "^4.1.1", "@cspell/dict-html": "^4.0.15", "@cspell/dict-html-symbol-entities": "^4.0.5", "@cspell/dict-typescript": "^3.2.3" @@ -1411,155 +1220,113 @@ }, "node_modules/@cspell/dict-monkeyc": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.12.tgz", - "integrity": "sha512-MN7Vs11TdP5mbdNFQP5x2Ac8zOBm97ARg6zM5Sb53YQt/eMvXOMvrep7+/+8NJXs0jkp70bBzjqU4APcqBFNAw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-node": { "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.9.tgz", - "integrity": "sha512-hO+ga+uYZ/WA4OtiMEyKt5rDUlUyu3nXMf8KVEeqq2msYvAPdldKBGH7lGONg6R/rPhv53Rb+0Y1SLdoK1+7wQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-npm": { - "version": "5.2.41", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.41.tgz", - "integrity": "sha512-To3xsfRmMBYVXtWVEdUgV35M9a/JZ54dSuoY6m6D3uHKKL3I326Wmy4xifZ3PU8MQaWhyEH7zbIcUEtKwTQMcA==", + "version": "5.2.38", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-php": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.1.1.tgz", - "integrity": "sha512-EXelI+4AftmdIGtA8HL8kr4WlUE11OqCSVlnIgZekmTkEGSZdYnkFdiJ5IANSALtlQ1mghKjz+OFqVs6yowgWA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-powershell": { "version": "5.0.15", - "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.15.tgz", - "integrity": "sha512-l4S5PAcvCFcVDMJShrYD0X6Huv9dcsQPlsVsBGbH38wvuN7gS7+GxZFAjTNxDmTY1wrNi1cCatSg6Pu2BW4rgg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-public-licenses": { "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.16.tgz", - "integrity": "sha512-EQRrPvEOmwhwWezV+W7LjXbIBjiy6y/shrET6Qcpnk3XANTzfvWflf9PnJ5kId/oKWvihFy0za0AV1JHd03pSQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-python": { - "version": "4.2.27", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.27.tgz", - "integrity": "sha512-Rj6xQgYS4X6ienjgAZF+njA0GRY4oSPouJWv0vfikCTn6EWlfk0V6Dy1HP3Migj1O+IC2NmespgVq+BZNSp8OA==", + "version": "4.2.26", "dev": true, "license": "MIT", "dependencies": { - "@cspell/dict-data-science": "^2.0.14" + "@cspell/dict-data-science": "^2.0.13" } }, "node_modules/@cspell/dict-r": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.1.1.tgz", - "integrity": "sha512-71Ka+yKfG4ZHEMEmDxc6+blFkeTTvgKbKAbwiwQAuKl3zpqs1Y0vUtwW2N4b3LgmSPhV3ODVY0y4m5ofqDuKMw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-ruby": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.1.1.tgz", - "integrity": "sha512-LHrp84oEV6q1ZxPPyj4z+FdKyq1XAKYPtmGptrd+uwHbrF/Ns5+fy6gtSi7pS+uc0zk3JdO9w/tPK+8N1/7WUA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-rust": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.1.2.tgz", - "integrity": "sha512-O1FHrumYcO+HZti3dHfBPUdnDFkI+nbYK3pxYmiM1sr+G0ebOd6qchmswS0Wsc6ZdEVNiPYJY/gZQR6jfW3uOg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-scala": { "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.9.tgz", - "integrity": "sha512-AjVcVAELgllybr1zk93CJ5wSUNu/Zb5kIubymR/GAYkMyBdYFCZ3Zbwn4Zz8GJlFFAbazABGOu0JPVbeY59vGg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-shell": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.2.0.tgz", - "integrity": "sha512-PVctvT22lJ49niMiakO8xieY7ELCAzjSqhejWR7bAMb5AZ9F4WDEs+XdGMnoVHWeXq7K5rcepLPmEJb+37zzIw==", + "version": "1.1.2", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-software-terms": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.2.2.tgz", - "integrity": "sha512-0CaYd6TAsKtEoA7tNswm1iptEblTzEe3UG8beG2cpSTHk7afWIVMtJLgXDv0f/Li67Lf3Z1Jf3JeXR7GsJ2TRw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-sql": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.2.1.tgz", - "integrity": "sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-svelte": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.7.tgz", - "integrity": "sha512-hGZsGqP0WdzKkdpeVLBivRuSNzOTvN036EBmpOwxH+FTY2DuUH7ecW+cSaMwOgmq5JFSdTcbTNFlNC8HN8lhaQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-swift": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.6.tgz", - "integrity": "sha512-PnpNbrIbex2aqU1kMgwEKvCzgbkHtj3dlFLPMqW1vSniop7YxaDTtvTUO4zA++ugYAEL+UK8vYrBwDPTjjvSnA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-terraform": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.1.3.tgz", - "integrity": "sha512-gr6wxCydwSFyyBKhBA2xkENXtVFToheqYYGFvlMZXWjviynXmh+NK/JTvTCk/VHk3+lzbO9EEQKee6VjrAUSbA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-typescript": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz", - "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-vue": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.5.tgz", - "integrity": "sha512-Mqutb8jbM+kIcywuPQCCaK5qQHTdaByoEO2J9LKFy3sqAdiBogNkrplqUK0HyyRFgCfbJUgjz3N85iCMcWH0JA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-zig": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-zig/-/dict-zig-1.0.0.tgz", - "integrity": "sha512-XibBIxBlVosU06+M6uHWkFeT0/pW5WajDRYdXG2CgHnq85b0TI/Ks0FuBJykmsgi2CAD3Qtx8UHFEtl/DSFnAQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dynamic-import": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-10.0.1.tgz", - "integrity": "sha512-mP1gdq00aIcH8HxNMqnH11X6BKxLcneDtFgl/ecjIKnaGKwi44m8AndP5Kr4ODaYdl8UUw9O3dJh7KaQXnLHZQ==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "10.0.1", + "@cspell/url": "10.0.0", "import-meta-resolve": "^4.2.0" }, "engines": { @@ -1567,9 +1334,7 @@ } }, "node_modules/@cspell/filetypes": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-10.0.1.tgz", - "integrity": "sha512-Z5S35giU5IW49fBBq6BksUbE8PC4IYPfaKuwl5Nl9jkf/OkAKiBmCowKX45NzRUQInwK/GSqqIUifrNeI6LdLw==", + "version": "10.0.0", "dev": true, "license": "MIT", "engines": { @@ -1577,9 +1342,7 @@ } }, "node_modules/@cspell/rpc": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/rpc/-/rpc-10.0.1.tgz", - "integrity": "sha512-axSRKv3zEAmBm66iD/FV/MPmE4/Yf7c3PZiwTW894Yd3iEhtn3KPKeTrqQ2/tDrhB1Z2qTsap/Hue0MK4o5WXg==", + "version": "10.0.0", "dev": true, "license": "MIT", "engines": { @@ -1587,9 +1350,7 @@ } }, "node_modules/@cspell/strong-weak-map": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-10.0.1.tgz", - "integrity": "sha512-lenN1DVyPi8nJLSMSJJ670ddTjyiruLueuSZO1qLcxBqUhgxDt/mALu9N/1m6WdOVcg6m/5cLiZVg2KOo2UzRw==", + "version": "10.0.0", "dev": true, "license": "MIT", "engines": { @@ -1597,53 +1358,15 @@ } }, "node_modules/@cspell/url": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@cspell/url/-/url-10.0.1.tgz", - "integrity": "sha512-abYYgI29wJhWIfWTYrYuzRYDcHQUQ1N5ylnhxYn1NJnIQMqUWGLbDmt12JABtZ+R6h6UNatQrS7rhP86etvJyQ==", + "version": "10.0.0", "dev": true, "license": "MIT", "engines": { "node": ">=22.18.0" } }, - "node_modules/@emnapi/core": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", - "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", - "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@es-joy/jsdoccomment": { "version": "0.86.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.86.0.tgz", - "integrity": "sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==", "dev": true, "license": "MIT", "dependencies": { @@ -1659,8 +1382,6 @@ }, "node_modules/@es-joy/resolve.exports": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@es-joy/resolve.exports/-/resolve.exports-1.2.0.tgz", - "integrity": "sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==", "dev": true, "license": "MIT", "engines": { @@ -1669,8 +1390,6 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1688,8 +1407,6 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1701,8 +1418,6 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -1711,8 +1426,6 @@ }, "node_modules/@eslint/config-array": { "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", - "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1726,8 +1439,6 @@ }, "node_modules/@eslint/config-helpers": { "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1739,8 +1450,6 @@ }, "node_modules/@eslint/core": { "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1752,8 +1461,6 @@ }, "node_modules/@eslint/eslintrc": { "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", - "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", "dev": true, "license": "MIT", "dependencies": { @@ -1776,8 +1483,6 @@ }, "node_modules/@eslint/js": { "version": "9.39.4", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", - "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", "dev": true, "license": "MIT", "engines": { @@ -1789,8 +1494,6 @@ }, "node_modules/@eslint/markdown": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-8.0.1.tgz", - "integrity": "sha512-WWKmld/EyNdEB8GMq7JMPX1SDWgyJAM1uhtCi5ySrqYQM4HQjmg11EX/q3ZpnpRXHfdccFtli3NBvvGaYjWyQw==", "dev": true, "license": "MIT", "workspaces": [ @@ -1815,8 +1518,6 @@ }, "node_modules/@eslint/markdown/node_modules/@eslint/core": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", - "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1828,8 +1529,6 @@ }, "node_modules/@eslint/markdown/node_modules/@eslint/plugin-kit": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz", - "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1842,8 +1541,6 @@ }, "node_modules/@eslint/object-schema": { "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1852,8 +1549,6 @@ }, "node_modules/@eslint/plugin-kit": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1866,8 +1561,6 @@ }, "node_modules/@humanfs/core": { "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1876,8 +1569,6 @@ }, "node_modules/@humanfs/node": { "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1890,8 +1581,6 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1904,8 +1593,6 @@ }, "node_modules/@humanwhocodes/retry": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1918,8 +1605,6 @@ }, "node_modules/@inquirer/external-editor": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", - "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", "dev": true, "license": "MIT", "dependencies": { @@ -1940,10 +1625,10 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1958,10 +1643,10 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=12" }, @@ -1971,17 +1656,17 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -1996,10 +1681,10 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-regex": "^6.2.2" }, @@ -2012,10 +1697,10 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -2030,10 +1715,10 @@ }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -2047,20 +1732,20 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -2071,10 +1756,10 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -2085,10 +1770,10 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -2098,10 +1783,10 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "p-try": "^2.0.0" }, @@ -2114,10 +1799,10 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -2127,20 +1812,20 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, "node_modules/@jest/console": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.3.0.tgz", - "integrity": "sha512-PAwCvFJ4696XP2qZj+LAn1BWjZaJ6RjG6c7/lkMaUJnkyMS34ucuIsfqYvfskVNvUI27R/u4P1HMYFnlVXG/Ww==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/types": "30.3.0", "@types/node": "*", @@ -2155,10 +1840,10 @@ }, "node_modules/@jest/console/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2171,10 +1856,10 @@ }, "node_modules/@jest/console/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2188,10 +1873,10 @@ }, "node_modules/@jest/core": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.3.0.tgz", - "integrity": "sha512-U5mVPsBxLSO6xYbf+tgkymLx+iAhvZX43/xI1+ej2ZOPnPdkdO1CzDmFKh2mZBn2s4XZixszHeQnzp1gm/DIxw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/console": "30.3.0", "@jest/pattern": "30.0.1", @@ -2235,10 +1920,10 @@ }, "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2251,10 +1936,10 @@ }, "node_modules/@jest/core/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2268,20 +1953,20 @@ }, "node_modules/@jest/diff-sequences": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.3.0.tgz", - "integrity": "sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/environment": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.3.0.tgz", - "integrity": "sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/fake-timers": "30.3.0", "@jest/types": "30.3.0", @@ -2294,10 +1979,10 @@ }, "node_modules/@jest/expect": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.3.0.tgz", - "integrity": "sha512-76Nlh4xJxk2D/9URCn3wFi98d2hb19uWE1idLsTt2ywhvdOldbw3S570hBgn25P4ICUZ/cBjybrBex2g17IDbg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "expect": "30.3.0", "jest-snapshot": "30.3.0" @@ -2308,10 +1993,10 @@ }, "node_modules/@jest/expect-utils": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.3.0.tgz", - "integrity": "sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/get-type": "30.1.0" }, @@ -2321,10 +2006,10 @@ }, "node_modules/@jest/fake-timers": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.3.0.tgz", - "integrity": "sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/types": "30.3.0", "@sinonjs/fake-timers": "^15.0.0", @@ -2339,20 +2024,20 @@ }, "node_modules/@jest/get-type": { "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/globals": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.3.0.tgz", - "integrity": "sha512-+owLCBBdfpgL3HU+BD5etr1SvbXpSitJK0is1kiYjJxAAJggYMRQz5hSdd5pq1sSggfxPbw2ld71pt4x5wwViA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/environment": "30.3.0", "@jest/expect": "30.3.0", @@ -2365,10 +2050,10 @@ }, "node_modules/@jest/pattern": { "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@types/node": "*", "jest-regex-util": "30.0.1" @@ -2379,10 +2064,10 @@ }, "node_modules/@jest/reporters": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.3.0.tgz", - "integrity": "sha512-a09z89S+PkQnL055bVj8+pe2Caed2PBOaczHcXCykW5ngxX9EWx/1uAwncxc/HiU0oZqfwseMjyhxgRjS49qPw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "30.3.0", @@ -2422,10 +2107,10 @@ }, "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2438,20 +2123,20 @@ }, "node_modules/@jest/reporters/node_modules/brace-expansion": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@jest/reporters/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2465,11 +2150,10 @@ }, "node_modules/@jest/reporters/node_modules/glob": { "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -2487,10 +2171,10 @@ }, "node_modules/@jest/reporters/node_modules/minimatch": { "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "brace-expansion": "^2.0.2" }, @@ -2503,10 +2187,10 @@ }, "node_modules/@jest/schemas": { "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@sinclair/typebox": "^0.34.0" }, @@ -2516,10 +2200,10 @@ }, "node_modules/@jest/snapshot-utils": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.3.0.tgz", - "integrity": "sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/types": "30.3.0", "chalk": "^4.1.2", @@ -2532,10 +2216,10 @@ }, "node_modules/@jest/snapshot-utils/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2548,10 +2232,10 @@ }, "node_modules/@jest/snapshot-utils/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2565,10 +2249,10 @@ }, "node_modules/@jest/source-map": { "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", - "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "callsites": "^3.1.0", @@ -2580,10 +2264,10 @@ }, "node_modules/@jest/test-result": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.3.0.tgz", - "integrity": "sha512-e/52nJGuD74AKTSe0P4y5wFRlaXP0qmrS17rqOMHeSwm278VyNyXE3gFO/4DTGF9w+65ra3lo3VKj0LBrzmgdQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/console": "30.3.0", "@jest/types": "30.3.0", @@ -2596,10 +2280,10 @@ }, "node_modules/@jest/test-sequencer": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.3.0.tgz", - "integrity": "sha512-dgbWy9b8QDlQeRZcv7LNF+/jFiiYHTKho1xirauZ7kVwY7avjFF6uTT0RqlgudB5OuIPagFdVtfFMosjVbk1eA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/test-result": "30.3.0", "graceful-fs": "^4.2.11", @@ -2612,10 +2296,10 @@ }, "node_modules/@jest/transform": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.3.0.tgz", - "integrity": "sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/core": "^7.27.4", "@jest/types": "30.3.0", @@ -2638,10 +2322,10 @@ }, "node_modules/@jest/transform/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2654,10 +2338,10 @@ }, "node_modules/@jest/transform/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2671,10 +2355,10 @@ }, "node_modules/@jest/types": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz", - "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", @@ -2690,10 +2374,10 @@ }, "node_modules/@jest/types/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2706,10 +2390,10 @@ }, "node_modules/@jest/types/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2723,8 +2407,6 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -2734,8 +2416,6 @@ }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2745,8 +2425,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", "engines": { @@ -2755,8 +2433,6 @@ }, "node_modules/@jridgewell/source-map": { "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", "dependencies": { @@ -2766,15 +2442,11 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { @@ -2791,8 +2463,6 @@ }, "node_modules/@jsonjoy.com/base64": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2808,8 +2478,6 @@ }, "node_modules/@jsonjoy.com/buffers": { "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", - "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2825,8 +2493,6 @@ }, "node_modules/@jsonjoy.com/codegen": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", - "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2841,14 +2507,12 @@ } }, "node_modules/@jsonjoy.com/fs-core": { - "version": "4.57.6", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.6.tgz", - "integrity": "sha512-uI++Wx6VkBJqVmkb4ZeExwAVpZiA2Do5NrEtXoDk0Pdvce3ytFXJoviT1sLOj16+qDIMnD5nWPfOhVpnDmRJKg==", + "version": "4.57.2", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.57.6", - "@jsonjoy.com/fs-node-utils": "4.57.6", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", "thingies": "^2.5.0" }, "engines": { @@ -2863,15 +2527,13 @@ } }, "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.57.6", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.6.tgz", - "integrity": "sha512-pKkw/yC5CzSZKhIIUIsH1przOa+K5jGmZIg1sWaSF24JojyrUFbjcQv7QrcGAudriei6HQ6R0BFj+V8NbQinJw==", + "version": "4.57.2", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.6", - "@jsonjoy.com/fs-node-builtins": "4.57.6", - "@jsonjoy.com/fs-node-utils": "4.57.6", + "@jsonjoy.com/fs-core": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", "thingies": "^2.5.0" }, "engines": { @@ -2886,17 +2548,15 @@ } }, "node_modules/@jsonjoy.com/fs-node": { - "version": "4.57.6", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.6.tgz", - "integrity": "sha512-Kbn1jdkvDN4F2+BhoB6mMu7NCbhP0bgA5NcI1aJj/Q5UcU+I1JLLW+dEQean33iV4tXv35AzBVKPICnDltBpxw==", + "version": "4.57.2", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.6", - "@jsonjoy.com/fs-node-builtins": "4.57.6", - "@jsonjoy.com/fs-node-utils": "4.57.6", - "@jsonjoy.com/fs-print": "4.57.6", - "@jsonjoy.com/fs-snapshot": "4.57.6", + "@jsonjoy.com/fs-core": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "@jsonjoy.com/fs-print": "4.57.2", + "@jsonjoy.com/fs-snapshot": "4.57.2", "glob-to-regex.js": "^1.0.0", "thingies": "^2.5.0" }, @@ -2912,9 +2572,7 @@ } }, "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.57.6", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.6.tgz", - "integrity": "sha512-V4DgEFT3Cg5S9fCMOZSCVdTxdJWWLBO0WnAazV7hnCM96u5zXHyW/ubDAfcSVwqjkMJ50W1Y44IXtxRoIwaCVg==", + "version": "4.57.2", "dev": true, "license": "Apache-2.0", "engines": { @@ -2929,15 +2587,13 @@ } }, "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.57.6", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.6.tgz", - "integrity": "sha512-+JptNw3iifihxH2rEXrninDzX4FFVW8JD/wPR8GbJPAeL9CQUSblrlumOPB5gZuS7tYRX+PJPLtT7XzKoRhv/Q==", + "version": "4.57.2", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-fsa": "4.57.6", - "@jsonjoy.com/fs-node-builtins": "4.57.6", - "@jsonjoy.com/fs-node-utils": "4.57.6" + "@jsonjoy.com/fs-fsa": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2" }, "engines": { "node": ">=10.0" @@ -2951,13 +2607,11 @@ } }, "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.57.6", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.6.tgz", - "integrity": "sha512-foyUrfS7WmYEUzqYXSNxmJBcSj04TABrkpFabwO9SCDCpVCfJ+qG+2sk5FjfiflG2n0SDFZDCJ6vYlJAEpxJFg==", + "version": "4.57.2", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.57.6" + "@jsonjoy.com/fs-node-builtins": "4.57.2" }, "engines": { "node": ">=10.0" @@ -2971,13 +2625,11 @@ } }, "node_modules/@jsonjoy.com/fs-print": { - "version": "4.57.6", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.6.tgz", - "integrity": "sha512-96eAn4Dudtt67LTeuU47yUD+pg9/G/oKpI10zei9ljk3X3WK4lYKc+n3cpaPCAbKPzoyfxl0mXm8f8Y7BOSFXw==", + "version": "4.57.2", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.57.6", + "@jsonjoy.com/fs-node-utils": "4.57.2", "tree-dump": "^1.1.0" }, "engines": { @@ -2992,14 +2644,12 @@ } }, "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.57.6", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.6.tgz", - "integrity": "sha512-V57CMzbOgTzUWGOWQ8GzHQdpJP6JnrYVNCtTBNxVYEnlVRvo4uEJqHhtAT8vhDFrIuJOXLrTL1Fki4h5oI7xxg==", + "version": "4.57.2", "dev": true, "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.57.6", + "@jsonjoy.com/fs-node-utils": "4.57.2", "@jsonjoy.com/json-pack": "^17.65.0", "@jsonjoy.com/util": "^17.65.0" }, @@ -3016,8 +2666,6 @@ }, "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", - "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3033,8 +2681,6 @@ }, "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", - "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3050,8 +2696,6 @@ }, "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", - "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3077,8 +2721,6 @@ }, "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", - "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3097,8 +2739,6 @@ }, "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", - "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3118,8 +2758,6 @@ }, "node_modules/@jsonjoy.com/json-pack": { "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", - "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3145,8 +2783,6 @@ }, "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", - "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3162,8 +2798,6 @@ }, "node_modules/@jsonjoy.com/json-pointer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", - "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3183,8 +2817,6 @@ }, "node_modules/@jsonjoy.com/util": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", - "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3204,8 +2836,6 @@ }, "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", - "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3221,8 +2851,6 @@ }, "node_modules/@manypkg/find-root": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", "dev": true, "license": "MIT", "dependencies": { @@ -3234,15 +2862,11 @@ }, "node_modules/@manypkg/find-root/node_modules/@types/node": { "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true, "license": "MIT" }, "node_modules/@manypkg/find-root/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -3255,8 +2879,6 @@ }, "node_modules/@manypkg/find-root/node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { @@ -3270,8 +2892,6 @@ }, "node_modules/@manypkg/find-root/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -3283,8 +2903,6 @@ }, "node_modules/@manypkg/find-root/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -3299,8 +2917,6 @@ }, "node_modules/@manypkg/find-root/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -3312,8 +2928,6 @@ }, "node_modules/@manypkg/get-packages": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", - "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", "dev": true, "license": "MIT", "dependencies": { @@ -3327,15 +2941,11 @@ }, "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", "dev": true, "license": "MIT" }, "node_modules/@manypkg/get-packages/node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { @@ -3347,23 +2957,8 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -3376,8 +2971,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -3386,8 +2979,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -3400,19 +2991,16 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", "optional": true, + "peer": true, "engines": { "node": ">=14" } }, "node_modules/@pkgr/core": { "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", "engines": { @@ -3424,22 +3012,18 @@ }, "node_modules/@rtsao/scc": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, "license": "MIT" }, "node_modules/@sinclair/typebox": { "version": "0.34.49", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.49.tgz", - "integrity": "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/@sindresorhus/base62": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz", - "integrity": "sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==", "dev": true, "license": "MIT", "engines": { @@ -3451,28 +3035,26 @@ }, "node_modules/@sinonjs/commons": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "license": "BSD-3-Clause", + "optional": true, + "peer": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.3.0.tgz", - "integrity": "sha512-m2xozxSfCIxjDdvbhIWazlP2i2aha/iUmbl94alpsIbd3iLTfeXgfBVbwyWogB6l++istyGZqamgA/EcqYf+Bg==", "dev": true, "license": "BSD-3-Clause", + "optional": true, + "peer": true, "dependencies": { "@sinonjs/commons": "^3.0.1" } }, "node_modules/@stylistic/eslint-plugin": { "version": "5.10.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.10.0.tgz", - "integrity": "sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3490,23 +3072,12 @@ "eslint": "^9.0.0 || ^10.0.0" } }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@types/babel__core": { "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -3517,20 +3088,20 @@ }, "node_modules/@types/babel__generator": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -3538,18 +3109,16 @@ }, "node_modules/@types/babel__traverse": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/types": "^7.28.2" } }, "node_modules/@types/debug": { "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", - "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", "dev": true, "license": "MIT", "dependencies": { @@ -3558,15 +3127,11 @@ }, "node_modules/@types/estree": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, "node_modules/@types/graceful-fs": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3575,8 +3140,6 @@ }, "node_modules/@types/hast": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3585,60 +3148,43 @@ }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/jest": { - "version": "30.0.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", - "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^30.0.0", - "pretty-format": "^30.0.0" - } - }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, "license": "MIT" }, "node_modules/@types/katex": { "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz", - "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==", "dev": true, "license": "MIT" }, @@ -3651,8 +3197,6 @@ }, "node_modules/@types/mdast": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, "license": "MIT", "dependencies": { @@ -3661,15 +3205,11 @@ }, "node_modules/@types/ms": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "24.12.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz", - "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3678,39 +3218,35 @@ }, "node_modules/@types/stack-utils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/@types/unist": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "dev": true, "license": "MIT" }, "node_modules/@types/yargs": { "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.59.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.3.tgz", - "integrity": "sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==", "dev": true, "license": "MIT", "dependencies": { @@ -3738,8 +3274,6 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { @@ -3748,8 +3282,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "8.59.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.3.tgz", - "integrity": "sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==", "dev": true, "license": "MIT", "dependencies": { @@ -3773,8 +3305,6 @@ }, "node_modules/@typescript-eslint/project-service": { "version": "8.59.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.3.tgz", - "integrity": "sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==", "dev": true, "license": "MIT", "dependencies": { @@ -3795,8 +3325,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.59.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.3.tgz", - "integrity": "sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==", "dev": true, "license": "MIT", "dependencies": { @@ -3813,8 +3341,6 @@ }, "node_modules/@typescript-eslint/tsconfig-utils": { "version": "8.59.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.3.tgz", - "integrity": "sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==", "dev": true, "license": "MIT", "engines": { @@ -3830,8 +3356,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "8.59.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.3.tgz", - "integrity": "sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3855,8 +3379,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "8.59.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.3.tgz", - "integrity": "sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==", "dev": true, "license": "MIT", "engines": { @@ -3869,8 +3391,6 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "8.59.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.3.tgz", - "integrity": "sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==", "dev": true, "license": "MIT", "dependencies": { @@ -3897,8 +3417,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", "engines": { @@ -3907,8 +3425,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { @@ -3920,8 +3436,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -3936,8 +3450,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "8.59.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.3.tgz", - "integrity": "sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==", "dev": true, "license": "MIT", "dependencies": { @@ -3960,8 +3472,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "8.59.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.3.tgz", - "integrity": "sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==", "dev": true, "license": "MIT", "dependencies": { @@ -3971,290 +3481,44 @@ "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" - }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=14.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "cpu": [ - "arm64" - ], + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", "dev": true, - "license": "MIT", + "license": "ISC", "optional": true, - "os": [ - "win32" - ] + "peer": true }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", "cpu": [ - "ia32" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" - ] + "linux" + ], + "peer": true }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "node_modules/@unrs/resolver-binding-linux-x64-musl": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", "cpu": [ "x64" ], @@ -4262,8 +3526,9 @@ "license": "MIT", "optional": true, "os": [ - "win32" - ] + "linux" + ], + "peer": true }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", @@ -4442,15 +3707,11 @@ }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/acorn": { "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", "bin": { @@ -4475,8 +3736,6 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -4485,8 +3744,6 @@ }, "node_modules/ajv": { "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -4544,8 +3801,6 @@ }, "node_modules/ansi-colors": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", "engines": { @@ -4554,10 +3809,10 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -4570,8 +3825,6 @@ }, "node_modules/ansi-regex": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -4583,10 +3836,10 @@ }, "node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=10" }, @@ -4596,10 +3849,10 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4610,10 +3863,10 @@ }, "node_modules/anymatch/node_modules/picomatch": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8.6" }, @@ -4623,8 +3876,6 @@ }, "node_modules/are-docs-informative": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", "dev": true, "license": "MIT", "engines": { @@ -4633,15 +3884,11 @@ }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -4657,8 +3904,6 @@ }, "node_modules/array-includes": { "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4680,15 +3925,11 @@ }, "node_modules/array-timsort": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", "dev": true, "license": "MIT" }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -4697,8 +3938,6 @@ }, "node_modules/array.prototype.findlast": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4718,8 +3957,6 @@ }, "node_modules/array.prototype.findlastindex": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4740,8 +3977,6 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { @@ -4759,8 +3994,6 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { @@ -4778,8 +4011,6 @@ }, "node_modules/array.prototype.tosorted": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "license": "MIT", "dependencies": { @@ -4795,8 +4026,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4817,8 +4046,6 @@ }, "node_modules/async-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -4827,15 +4054,11 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true, "license": "MIT" }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4850,8 +4073,6 @@ }, "node_modules/axios": { "version": "1.16.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz", - "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==", "dev": true, "license": "MIT", "dependencies": { @@ -4862,10 +4083,10 @@ }, "node_modules/babel-jest": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.3.0.tgz", - "integrity": "sha512-gRpauEU2KRrCox5Z296aeVHR4jQ98BCnu0IO332D/xpHNOsIH/bgSRk9k6GbKIbBw8vFeN6ctuu6tV8WOyVfYQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/transform": "30.3.0", "@types/babel__core": "^7.20.5", @@ -4884,10 +4105,10 @@ }, "node_modules/babel-jest/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4900,10 +4121,10 @@ }, "node_modules/babel-jest/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4917,10 +4138,10 @@ }, "node_modules/babel-plugin-istanbul": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", - "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", "dev": true, "license": "BSD-3-Clause", + "optional": true, + "peer": true, "workspaces": [ "test/babel-8" ], @@ -4937,10 +4158,10 @@ }, "node_modules/babel-plugin-jest-hoist": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.3.0.tgz", - "integrity": "sha512-+TRkByhsws6sfPjVaitzadk1I0F5sPvOVUH5tyTSzhePpsGIVrdeunHSw/C36QeocS95OOk8lunc4rlu5Anwsg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@types/babel__core": "^7.20.5" }, @@ -4950,10 +4171,10 @@ }, "node_modules/babel-preset-current-node-syntax": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -4977,10 +4198,10 @@ }, "node_modules/babel-preset-jest": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.3.0.tgz", - "integrity": "sha512-6ZcUbWHC+dMz2vfzdNwi87Z1gQsLNK2uLuK1Q89R11xdvejcivlYYwDlEv0FHX3VwEXpbBQ9uufB/MUNpZGfhQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "babel-plugin-jest-hoist": "30.3.0", "babel-preset-current-node-syntax": "^1.2.0" @@ -4994,15 +4215,11 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/baseline-browser-mapping": { "version": "2.9.17", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.17.tgz", - "integrity": "sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5011,8 +4228,6 @@ }, "node_modules/better-path-resolve": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", - "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", "dev": true, "license": "MIT", "dependencies": { @@ -5024,8 +4239,6 @@ }, "node_modules/brace-expansion": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -5035,8 +4248,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -5048,8 +4259,6 @@ }, "node_modules/browserslist": { "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -5082,25 +4291,21 @@ }, "node_modules/bser": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "license": "Apache-2.0", + "optional": true, + "peer": true, "dependencies": { "node-int64": "^0.4.0" } }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, "license": "MIT" }, "node_modules/builtin-modules": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-5.0.0.tgz", - "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==", "dev": true, "license": "MIT", "engines": { @@ -5112,8 +4317,6 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -5131,8 +4334,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5145,8 +4346,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { @@ -5162,8 +4361,6 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -5172,18 +4369,16 @@ }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { "version": "1.0.30001765", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz", - "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==", "dev": true, "funding": [ { @@ -5203,8 +4398,6 @@ }, "node_modules/ccount": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "dev": true, "license": "MIT", "funding": { @@ -5214,8 +4407,6 @@ }, "node_modules/chalk": { "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { @@ -5227,8 +4418,6 @@ }, "node_modules/chalk-template": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.2.tgz", - "integrity": "sha512-2bxTP2yUH7AJj/VAXfcA+4IcWGdQ87HwBANLt5XxGTeomo8yG0y95N1um9i5StvhT/Bl0/2cARA5v1PpPXUxUA==", "dev": true, "license": "MIT", "dependencies": { @@ -5243,25 +4432,21 @@ }, "node_modules/change-case": { "version": "5.4.4", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", - "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", "dev": true, "license": "MIT" }, "node_modules/char-regex": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=10" } }, "node_modules/character-entities": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, "license": "MIT", "funding": { @@ -5271,8 +4456,6 @@ }, "node_modules/chardet": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", - "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", "dev": true, "license": "MIT" }, @@ -5288,8 +4471,6 @@ }, "node_modules/ci-info": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", - "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, "funding": [ { @@ -5304,15 +4485,13 @@ }, "node_modules/cjs-module-lexer": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", - "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/clean-regexp": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", "dev": true, "license": "MIT", "dependencies": { @@ -5324,8 +4503,6 @@ }, "node_modules/clean-regexp/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -5334,8 +4511,6 @@ }, "node_modules/cli-cursor": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "license": "MIT", "dependencies": { @@ -5350,8 +4525,6 @@ }, "node_modules/cli-truncate": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", - "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", "dev": true, "license": "MIT", "dependencies": { @@ -5367,8 +4540,6 @@ }, "node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "license": "ISC", "dependencies": { @@ -5379,8 +4550,6 @@ }, "node_modules/cliui/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -5395,8 +4564,6 @@ }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -5405,8 +4572,6 @@ }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -5420,8 +4585,6 @@ }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5438,10 +4601,10 @@ }, "node_modules/co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -5449,15 +4612,13 @@ }, "node_modules/collect-v8-coverage": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", - "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5469,15 +4630,11 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "license": "MIT", "dependencies": { @@ -5489,8 +4646,6 @@ }, "node_modules/commander": { "version": "14.0.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", - "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, "license": "MIT", "engines": { @@ -5498,9 +4653,7 @@ } }, "node_modules/comment-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-5.0.0.tgz", - "integrity": "sha512-uiqLcOiVDJtBP8WGkZHEP+FZIhTzP1dxvn59EfoYUi9gqupjrBWVQkO2atDrbnKPwLeotFYDsuNb26uBMqB+hw==", + "version": "4.6.2", "dev": true, "license": "MIT", "dependencies": { @@ -5513,8 +4666,6 @@ }, "node_modules/comment-parser": { "version": "1.4.6", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.6.tgz", - "integrity": "sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==", "dev": true, "license": "MIT", "engines": { @@ -5523,29 +4674,21 @@ }, "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true, "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/core-js-compat": { "version": "3.49.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", - "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", "dev": true, "license": "MIT", "dependencies": { @@ -5558,8 +4701,6 @@ }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -5572,33 +4713,31 @@ } }, "node_modules/cspell": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-10.0.1.tgz", - "integrity": "sha512-Gg6w/flT3fKfl3la62hfTnhtNnDQ+9mU7kUhVqw/axl/Ms4oENw0oJMkWFIoj4f6nL/SDPz7KcPXd2XbkKFNmQ==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-json-reporter": "10.0.1", - "@cspell/cspell-performance-monitor": "10.0.1", - "@cspell/cspell-pipe": "10.0.1", - "@cspell/cspell-types": "10.0.1", - "@cspell/cspell-worker": "10.0.1", - "@cspell/dynamic-import": "10.0.1", - "@cspell/url": "10.0.1", + "@cspell/cspell-json-reporter": "10.0.0", + "@cspell/cspell-performance-monitor": "10.0.0", + "@cspell/cspell-pipe": "10.0.0", + "@cspell/cspell-types": "10.0.0", + "@cspell/cspell-worker": "10.0.0", + "@cspell/dynamic-import": "10.0.0", + "@cspell/url": "10.0.0", "ansi-regex": "^6.2.2", "chalk": "^5.6.2", "chalk-template": "^1.1.2", "commander": "^14.0.3", - "cspell-config-lib": "10.0.1", - "cspell-dictionary": "10.0.1", - "cspell-gitignore": "10.0.1", - "cspell-glob": "10.0.1", - "cspell-io": "10.0.1", - "cspell-lib": "10.0.1", + "cspell-config-lib": "10.0.0", + "cspell-dictionary": "10.0.0", + "cspell-gitignore": "10.0.0", + "cspell-glob": "10.0.0", + "cspell-io": "10.0.0", + "cspell-lib": "10.0.0", "fast-json-stable-stringify": "^2.1.0", "flatted": "^3.4.2", - "semver": "^7.8.1", - "tinyglobby": "^0.2.16" + "semver": "^7.7.4", + "tinyglobby": "^0.2.15" }, "bin": { "cspell": "bin.mjs", @@ -5612,32 +4751,28 @@ } }, "node_modules/cspell-config-lib": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-10.0.1.tgz", - "integrity": "sha512-hMpo/0j6k7pbiqrLDOLJKD2IGP9XwhjKf2miiM6p84Xeo4nyuFZaxxDCQ68R851HSYFrrdltgpoipMbj1h2Tnw==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "10.0.1", - "comment-json": "^5.0.0", + "@cspell/cspell-types": "10.0.0", + "comment-json": "^4.6.2", "smol-toml": "^1.6.1", - "yaml": "^2.9.0" + "yaml": "^2.8.3" }, "engines": { "node": ">=22.18.0" } }, "node_modules/cspell-dictionary": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-10.0.1.tgz", - "integrity": "sha512-3cZ659vgsZWkzGQJR/sNqGDVt/OnvTSieLKI76V++4t1bHJfochb9ZrrwsuMsb1VPGiyqClUP1/O6WrefF/FVg==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-performance-monitor": "10.0.1", - "@cspell/cspell-pipe": "10.0.1", - "@cspell/cspell-types": "10.0.1", - "cspell-trie-lib": "10.0.1", + "@cspell/cspell-performance-monitor": "10.0.0", + "@cspell/cspell-pipe": "10.0.0", + "@cspell/cspell-types": "10.0.0", + "cspell-trie-lib": "10.0.0", "fast-equals": "^6.0.0" }, "engines": { @@ -5645,15 +4780,13 @@ } }, "node_modules/cspell-gitignore": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-10.0.1.tgz", - "integrity": "sha512-wN23U61Mx6qPJN3CesOmBU9vnbJ0jQm/ylK0iaVui3CcnO7Zzl5qLu5mPHUzGQGm8yso6qjyxqo16Ho7LpZGOQ==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "10.0.1", - "cspell-glob": "10.0.1", - "cspell-io": "10.0.1" + "@cspell/url": "10.0.0", + "cspell-glob": "10.0.0", + "cspell-io": "10.0.0" }, "bin": { "cspell-gitignore": "bin.mjs" @@ -5663,13 +4796,11 @@ } }, "node_modules/cspell-glob": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-10.0.1.tgz", - "integrity": "sha512-7bII9J3aSSpZDwhx7w+zfQXbMxHZQ3be0ilUp5bHrsjz6o07v/NqOHMGcwKdPn1sw2dxDz9sv057xE5pqXnSdw==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "10.0.1", + "@cspell/url": "10.0.0", "picomatch": "^4.0.4" }, "engines": { @@ -5677,14 +4808,12 @@ } }, "node_modules/cspell-grammar": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-10.0.1.tgz", - "integrity": "sha512-xC9AFYmaI9wsO//a7S5tdDGKGJVD5UEEsTg+Up2fi7lPfXIryisYmV6tePNL1SEg0idYss4ja8LUZ3Mib09BjQ==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "10.0.1", - "@cspell/cspell-types": "10.0.1" + "@cspell/cspell-pipe": "10.0.0", + "@cspell/cspell-types": "10.0.0" }, "bin": { "cspell-grammar": "bin.mjs" @@ -5694,42 +4823,38 @@ } }, "node_modules/cspell-io": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-10.0.1.tgz", - "integrity": "sha512-8C2ka07faxflnaqEBO3pektS21XViE/SEHT7F5ZD1ou7FyMR5u3xawTBJSczClfsxLt/WYeztBYrpmGAjmjksw==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-service-bus": "10.0.1", - "@cspell/url": "10.0.1" + "@cspell/cspell-service-bus": "10.0.0", + "@cspell/url": "10.0.0" }, "engines": { "node": ">=22.18.0" } }, "node_modules/cspell-lib": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-10.0.1.tgz", - "integrity": "sha512-RpsIPiLzc4/YMW8BMRKpyJ81x439qjYWcqgdKeXnMkbKM88J9PexzutfFf/4v97v96KzfNitEzMpbI0uj8OeUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspell/cspell-bundled-dicts": "10.0.1", - "@cspell/cspell-performance-monitor": "10.0.1", - "@cspell/cspell-pipe": "10.0.1", - "@cspell/cspell-resolver": "10.0.1", - "@cspell/cspell-types": "10.0.1", - "@cspell/dynamic-import": "10.0.1", - "@cspell/filetypes": "10.0.1", - "@cspell/rpc": "10.0.1", - "@cspell/strong-weak-map": "10.0.1", - "@cspell/url": "10.0.1", - "cspell-config-lib": "10.0.1", - "cspell-dictionary": "10.0.1", - "cspell-glob": "10.0.1", - "cspell-grammar": "10.0.1", - "cspell-io": "10.0.1", - "cspell-trie-lib": "10.0.1", + "version": "10.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-bundled-dicts": "10.0.0", + "@cspell/cspell-performance-monitor": "10.0.0", + "@cspell/cspell-pipe": "10.0.0", + "@cspell/cspell-resolver": "10.0.0", + "@cspell/cspell-types": "10.0.0", + "@cspell/dynamic-import": "10.0.0", + "@cspell/filetypes": "10.0.0", + "@cspell/rpc": "10.0.0", + "@cspell/strong-weak-map": "10.0.0", + "@cspell/url": "10.0.0", + "cspell-config-lib": "10.0.0", + "cspell-dictionary": "10.0.0", + "cspell-glob": "10.0.0", + "cspell-grammar": "10.0.0", + "cspell-io": "10.0.0", + "cspell-trie-lib": "10.0.0", "env-paths": "^4.0.0", "gensequence": "^8.0.8", "import-fresh": "^4.0.0", @@ -5744,8 +4869,6 @@ }, "node_modules/cspell-lib/node_modules/import-fresh": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-4.0.0.tgz", - "integrity": "sha512-Fpi660c7VPDM3fPKYovStd9IP1CPOikf6v/dGxJJMmHPcwYQIMJ4W7kO1avBYEpMqkCh+Dx3Ln6H7VYqgztLjw==", "dev": true, "license": "MIT", "engines": { @@ -5756,22 +4879,18 @@ } }, "node_modules/cspell-trie-lib": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-10.0.1.tgz", - "integrity": "sha512-BFvhalSkRQFjKrZ//FKK7fRGrZFpifnxB5AwCkzsIsBZqicsfafcQ1xP21qpb0QqyV/IomjNgviG+tRJs+0rMw==", + "version": "10.0.0", "dev": true, "license": "MIT", "engines": { "node": ">=22.18.0" }, "peerDependencies": { - "@cspell/cspell-types": "10.0.1" + "@cspell/cspell-types": "10.0.0" } }, "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5788,8 +4907,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5806,8 +4923,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5824,15 +4939,11 @@ }, "node_modules/dataloader": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", - "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -5849,8 +4960,6 @@ }, "node_modules/decode-named-character-reference": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", - "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5863,10 +4972,10 @@ }, "node_modules/dedent": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", - "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -5878,25 +4987,21 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -5913,8 +5018,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -5931,8 +5034,6 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "license": "MIT", "engines": { @@ -5941,8 +5042,6 @@ }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "license": "MIT", "engines": { @@ -5951,8 +5050,6 @@ }, "node_modules/detect-indent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.2.tgz", - "integrity": "sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==", "dev": true, "license": "MIT", "engines": { @@ -5964,18 +5061,16 @@ }, "node_modules/detect-newline": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, "node_modules/devlop": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, "license": "MIT", "dependencies": { @@ -5988,8 +5083,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -6001,8 +5094,6 @@ }, "node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6014,8 +5105,6 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", "dependencies": { @@ -6029,24 +5118,22 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/electron-to-chromium": { "version": "1.5.277", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.277.tgz", - "integrity": "sha512-wKXFZw4erWmmOz5N/grBoJ2XrNJGDFMu2+W5ACHza5rHtvsqrK4gb6rnLC7XxKB9WlJ+RmyQatuEXmtm86xbnw==", "dev": true, "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=12" }, @@ -6056,8 +5143,6 @@ }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, @@ -6077,8 +5162,6 @@ }, "node_modules/enquirer": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6091,8 +5174,6 @@ }, "node_modules/env-paths": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-4.0.0.tgz", - "integrity": "sha512-pxP8eL2SwwaTRi/KHYwLYXinDs7gL3jxFcBYmEdYfZmZXbaVDvdppd0XBU8qVz03rDfKZMXg1omHCbsJjZrMsw==", "dev": true, "license": "MIT", "dependencies": { @@ -6107,8 +5188,6 @@ }, "node_modules/environment": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, "license": "MIT", "engines": { @@ -6120,18 +5199,16 @@ }, "node_modules/error-ex": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { "version": "1.24.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", - "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "dev": true, "license": "MIT", "dependencies": { @@ -6199,8 +5276,6 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", "engines": { @@ -6209,8 +5284,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", "engines": { @@ -6219,8 +5292,6 @@ }, "node_modules/es-iterator-helpers": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz", - "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==", "dev": true, "license": "MIT", "dependencies": { @@ -6254,8 +5325,6 @@ }, "node_modules/es-object-atoms": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "license": "MIT", "dependencies": { @@ -6267,8 +5336,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { @@ -6283,8 +5350,6 @@ }, "node_modules/es-shim-unscopables": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { @@ -6296,8 +5361,6 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -6314,8 +5377,6 @@ }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -6324,8 +5385,6 @@ }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { @@ -6337,8 +5396,6 @@ }, "node_modules/eslint": { "version": "9.39.4", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", - "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6397,8 +5454,6 @@ }, "node_modules/eslint-compat-utils": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6413,8 +5468,6 @@ }, "node_modules/eslint-config-prettier": { "version": "10.1.8", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", - "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", "bin": { @@ -6429,8 +5482,6 @@ }, "node_modules/eslint-config-webpack": { "version": "4.9.6", - "resolved": "https://registry.npmjs.org/eslint-config-webpack/-/eslint-config-webpack-4.9.6.tgz", - "integrity": "sha512-4g1VqqOVgPrO/2bh17qNRKsQK26Aw1WF9mVTnvF+rNTDIUUTx+IaukXqXlumzwApQ1GfJlOsdLvT6WER1SPePg==", "dev": true, "license": "MIT", "dependencies": { @@ -6468,8 +5519,6 @@ }, "node_modules/eslint-config-webpack/node_modules/globals": { "version": "17.6.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", - "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", "dev": true, "license": "MIT", "engines": { @@ -6481,8 +5530,6 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { @@ -6493,8 +5540,6 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6503,8 +5548,6 @@ }, "node_modules/eslint-module-utils": { "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { @@ -6521,8 +5564,6 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6531,8 +5572,6 @@ }, "node_modules/eslint-plugin-es-x": { "version": "7.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", - "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, "funding": [ "https://github.com/sponsors/ota-meshi", @@ -6553,8 +5592,6 @@ }, "node_modules/eslint-plugin-import": { "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", "dependencies": { @@ -6587,8 +5624,6 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6597,8 +5632,6 @@ }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -6607,8 +5640,6 @@ }, "node_modules/eslint-plugin-jest": { "version": "29.15.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.15.2.tgz", - "integrity": "sha512-kEN4r9RZl1xcsb4arGq89LrcVdOUFII/JSCwtTPJyv16mDwmPrcuEQwpxqZHeINvcsd7oK5O/rhdGlxFRaZwvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6637,8 +5668,6 @@ }, "node_modules/eslint-plugin-jsdoc": { "version": "62.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.9.0.tgz", - "integrity": "sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6666,8 +5695,6 @@ }, "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6679,8 +5706,6 @@ }, "node_modules/eslint-plugin-jsdoc/node_modules/espree": { "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6697,8 +5722,6 @@ }, "node_modules/eslint-plugin-n": { "version": "18.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-18.0.1.tgz", - "integrity": "sha512-q3ARhk+eZRc7myR0KHx+R3/GJeOHF+Ir6PK95Pu2tEX8Sl/4BIpmmVLva2kPrjC2gCmn6WHlHm+3yeo6Rxhycw==", "dev": true, "license": "MIT", "dependencies": { @@ -6733,8 +5756,6 @@ }, "node_modules/eslint-plugin-n/node_modules/globals": { "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", "engines": { @@ -6746,8 +5767,6 @@ }, "node_modules/eslint-plugin-prettier": { "version": "5.5.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", - "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", "dev": true, "license": "MIT", "dependencies": { @@ -6777,8 +5796,6 @@ }, "node_modules/eslint-plugin-react": { "version": "7.37.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, "license": "MIT", "dependencies": { @@ -6810,8 +5827,6 @@ }, "node_modules/eslint-plugin-react-hooks": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", - "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", "dev": true, "license": "MIT", "dependencies": { @@ -6830,8 +5845,6 @@ }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "license": "MIT", "dependencies": { @@ -6848,8 +5861,6 @@ }, "node_modules/eslint-plugin-react/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -6858,8 +5869,6 @@ }, "node_modules/eslint-plugin-unicorn": { "version": "64.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-64.0.0.tgz", - "integrity": "sha512-rNZwalHh8i0UfPlhNwg5BTUO1CMdKNmjqe+TgzOTZnpKoi8VBgsW7u9qCHIdpxEzZ1uwrJrPF0uRb7l//K38gA==", "dev": true, "license": "MIT", "dependencies": { @@ -6892,8 +5901,6 @@ }, "node_modules/eslint-plugin-unicorn/node_modules/globals": { "version": "17.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz", - "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==", "dev": true, "license": "MIT", "engines": { @@ -6905,8 +5912,6 @@ }, "node_modules/eslint-scope": { "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6922,8 +5927,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6935,8 +5938,6 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -6951,8 +5952,6 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -6968,8 +5967,6 @@ }, "node_modules/espree": { "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6986,8 +5983,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", "bin": { @@ -7000,8 +5995,6 @@ }, "node_modules/esquery": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7013,8 +6006,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7026,8 +6017,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -7036,8 +6025,6 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -7046,8 +6033,6 @@ }, "node_modules/eventemitter3": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", "dev": true, "license": "MIT" }, @@ -7063,10 +6048,10 @@ }, "node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -7087,20 +6072,20 @@ }, "node_modules/exit-x": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", - "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.3.0.tgz", - "integrity": "sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/expect-utils": "30.3.0", "@jest/get-type": "30.1.0", @@ -7115,29 +6100,21 @@ }, "node_modules/extendable-error": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", - "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", "dev": true, "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, "license": "Apache-2.0" }, "node_modules/fast-equals": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-6.0.0.tgz", - "integrity": "sha512-PFhhIGgdM79r5Uztdj9Zb6Tt1zKafqVfdMGwVca1z5z6fbX7DmsySSuJd8HiP6I1j505DCS83cLxo5rmSNeVEA==", "dev": true, "license": "MIT", "engines": { @@ -7146,8 +6123,6 @@ }, "node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -7163,8 +6138,6 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -7176,22 +6149,16 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, "node_modules/fast-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", - "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", "dev": true, "funding": [ { @@ -7207,8 +6174,6 @@ }, "node_modules/fastq": { "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, "license": "ISC", "dependencies": { @@ -7217,8 +6182,6 @@ }, "node_modules/fault": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7231,18 +6194,16 @@ }, "node_modules/fb-watchman": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "license": "Apache-2.0", + "optional": true, + "peer": true, "dependencies": { "bser": "2.1.1" } }, "node_modules/fdir": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { @@ -7259,8 +6220,6 @@ }, "node_modules/file-entry-cache": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7272,8 +6231,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -7285,8 +6242,6 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -7302,8 +6257,6 @@ }, "node_modules/find-up-simple": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", - "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", "dev": true, "license": "MIT", "engines": { @@ -7315,8 +6268,6 @@ }, "node_modules/flat-cache": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { @@ -7329,15 +6280,11 @@ }, "node_modules/flatted": { "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { "version": "1.16.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", - "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -7357,8 +6304,6 @@ }, "node_modules/for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -7373,10 +6318,10 @@ }, "node_modules/foreground-child": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" @@ -7390,10 +6335,10 @@ }, "node_modules/foreground-child/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "engines": { "node": ">=14" }, @@ -7403,8 +6348,6 @@ }, "node_modules/form-data": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", "dependencies": { @@ -7420,8 +6363,6 @@ }, "node_modules/format": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "dev": true, "engines": { "node": ">=0.4.x" @@ -7429,8 +6370,6 @@ }, "node_modules/fs-extra": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", "dependencies": { @@ -7444,30 +6383,11 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "license": "ISC" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "license": "MIT", "funding": { @@ -7476,8 +6396,6 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7497,8 +6415,6 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { @@ -7507,8 +6423,6 @@ }, "node_modules/generator-function": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", "dev": true, "license": "MIT", "engines": { @@ -7517,8 +6431,6 @@ }, "node_modules/gensequence": { "version": "8.0.8", - "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-8.0.8.tgz", - "integrity": "sha512-omMVniXEXpdx/vKxGnPRoO2394Otlze28TyxECbFVyoSpZ9H3EO7lemjcB12OpQJzRW4e5tt/dL1rOxry6aMHg==", "dev": true, "license": "MIT", "engines": { @@ -7527,8 +6439,6 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { @@ -7537,8 +6447,6 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "license": "ISC", "engines": { @@ -7547,8 +6455,6 @@ }, "node_modules/get-east-asian-width": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", - "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", "dev": true, "license": "MIT", "engines": { @@ -7560,8 +6466,6 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7585,18 +6489,16 @@ }, "node_modules/get-package-type": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8.0.0" } }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "license": "MIT", "dependencies": { @@ -7609,10 +6511,10 @@ }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=10" }, @@ -7622,8 +6524,6 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -7640,8 +6540,6 @@ }, "node_modules/get-tsconfig": { "version": "4.14.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", - "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", "dev": true, "license": "MIT", "dependencies": { @@ -7653,8 +6551,6 @@ }, "node_modules/git-hooks-list": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.2.1.tgz", - "integrity": "sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==", "dev": true, "license": "MIT", "funding": { @@ -7663,16 +6559,11 @@ }, "node_modules/github-slugger": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", "dev": true, "license": "ISC" }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -7692,8 +6583,6 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -7705,8 +6594,6 @@ }, "node_modules/glob-to-regex.js": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", - "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7729,8 +6616,6 @@ }, "node_modules/global-directory": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-5.0.0.tgz", - "integrity": "sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==", "dev": true, "license": "MIT", "dependencies": { @@ -7745,8 +6630,6 @@ }, "node_modules/globals": { "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", "engines": { @@ -7758,8 +6641,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7775,8 +6656,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -7796,15 +6675,11 @@ }, "node_modules/globrex": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true, "license": "MIT" }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", "engines": { @@ -7816,14 +6691,10 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, "node_modules/has-bigints": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { @@ -7835,8 +6706,6 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -7845,8 +6714,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -7858,8 +6725,6 @@ }, "node_modules/has-proto": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7874,8 +6739,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { @@ -7887,8 +6750,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { @@ -7903,8 +6764,6 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7916,15 +6775,11 @@ }, "node_modules/hermes-estree": { "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", - "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", "dev": true, "license": "MIT" }, "node_modules/hermes-parser": { "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", - "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", "dev": true, "license": "MIT", "dependencies": { @@ -7933,8 +6788,6 @@ }, "node_modules/html-entities": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", - "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", "dev": true, "funding": [ { @@ -7950,15 +6803,13 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/human-id": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/human-id/-/human-id-4.1.3.tgz", - "integrity": "sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==", "dev": true, "license": "MIT", "bin": { @@ -7967,18 +6818,16 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", + "optional": true, + "peer": true, "engines": { "node": ">=10.17.0" } }, "node_modules/husky": { "version": "9.1.7", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", - "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, "license": "MIT", "bin": { @@ -7993,8 +6842,6 @@ }, "node_modules/hyperdyperid": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", - "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "dev": true, "license": "MIT", "engines": { @@ -8003,8 +6850,6 @@ }, "node_modules/iconv-lite": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, "license": "MIT", "dependencies": { @@ -8020,8 +6865,6 @@ }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -8030,8 +6873,6 @@ }, "node_modules/import-fresh": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8047,8 +6888,6 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { @@ -8057,10 +6896,10 @@ }, "node_modules/import-local": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -8077,8 +6916,6 @@ }, "node_modules/import-meta-resolve": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", - "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", "dev": true, "license": "MIT", "funding": { @@ -8088,8 +6925,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -8098,8 +6933,6 @@ }, "node_modules/indent-string": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", "engines": { @@ -8111,9 +6944,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "license": "ISC", "dependencies": { @@ -8123,15 +6953,11 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "license": "ISC" }, "node_modules/ini": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", - "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", "dev": true, "license": "ISC", "engines": { @@ -8140,8 +6966,6 @@ }, "node_modules/internal-slot": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -8155,8 +6979,6 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -8173,15 +6995,13 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/is-async-function": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8200,8 +7020,6 @@ }, "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8216,8 +7034,6 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { @@ -8233,8 +7049,6 @@ }, "node_modules/is-builtin-module": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", - "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", "dev": true, "license": "MIT", "dependencies": { @@ -8249,8 +7063,6 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -8262,8 +7074,6 @@ }, "node_modules/is-core-module": { "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -8278,8 +7088,6 @@ }, "node_modules/is-data-view": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -8296,8 +7104,6 @@ }, "node_modules/is-date-object": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -8313,8 +7119,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -8323,8 +7127,6 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -8339,8 +7141,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8355,18 +7155,16 @@ }, "node_modules/is-generator-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=6" } }, "node_modules/is-generator-function": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { @@ -8385,8 +7183,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -8398,8 +7194,6 @@ }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -8411,8 +7205,6 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", "engines": { @@ -8424,8 +7216,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -8434,8 +7224,6 @@ }, "node_modules/is-number-object": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -8451,8 +7239,6 @@ }, "node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", "engines": { @@ -8464,8 +7250,6 @@ }, "node_modules/is-regex": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { @@ -8483,8 +7267,6 @@ }, "node_modules/is-safe-filename": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-safe-filename/-/is-safe-filename-0.1.1.tgz", - "integrity": "sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g==", "dev": true, "license": "MIT", "engines": { @@ -8496,8 +7278,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -8509,8 +7289,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -8525,10 +7303,10 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" }, @@ -8538,8 +7316,6 @@ }, "node_modules/is-string": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -8555,8 +7331,6 @@ }, "node_modules/is-subdir": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", - "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", "dev": true, "license": "MIT", "dependencies": { @@ -8568,8 +7342,6 @@ }, "node_modules/is-symbol": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -8586,8 +7358,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8602,8 +7372,6 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -8615,8 +7383,6 @@ }, "node_modules/is-weakref": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -8631,8 +7397,6 @@ }, "node_modules/is-weakset": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8648,8 +7412,6 @@ }, "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", "engines": { @@ -8658,34 +7420,30 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, "license": "BSD-3-Clause", + "optional": true, + "peer": true, "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", @@ -8699,10 +7457,10 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", + "optional": true, + "peer": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -8714,10 +7472,10 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, "license": "BSD-3-Clause", + "optional": true, + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", @@ -8729,10 +7487,10 @@ }, "node_modules/istanbul-reports": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", + "optional": true, + "peer": true, "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -8743,8 +7501,6 @@ }, "node_modules/iterator.prototype": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "dev": true, "license": "MIT", "dependencies": { @@ -8761,10 +7517,10 @@ }, "node_modules/jackspeak": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", + "optional": true, + "peer": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -8777,10 +7533,10 @@ }, "node_modules/jest": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.3.0.tgz", - "integrity": "sha512-AkXIIFcaazymvey2i/+F94XRnM6TsVLZDhBMLsd1Sf/W0wzsvvpjeyUrCZD6HGG4SDYPgDJDBKeiJTBb10WzMg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/core": "30.3.0", "@jest/types": "30.3.0", @@ -8804,10 +7560,10 @@ }, "node_modules/jest-changed-files": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.3.0.tgz", - "integrity": "sha512-B/7Cny6cV5At6M25EWDgf9S617lHivamL8vl6KEpJqkStauzcG4e+WPfDgMMF+H4FVH4A2PLRyvgDJan4441QA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "execa": "^5.1.1", "jest-util": "30.3.0", @@ -8819,10 +7575,10 @@ }, "node_modules/jest-circus": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.3.0.tgz", - "integrity": "sha512-PyXq5szeSfR/4f1lYqCmmQjh0vqDkURUYi9N6whnHjlRz4IUQfMcXkGLeEoiJtxtyPqgUaUUfyQlApXWBSN1RA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/environment": "30.3.0", "@jest/expect": "30.3.0", @@ -8851,10 +7607,10 @@ }, "node_modules/jest-circus/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -8867,10 +7623,10 @@ }, "node_modules/jest-circus/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8884,10 +7640,10 @@ }, "node_modules/jest-cli": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.3.0.tgz", - "integrity": "sha512-l6Tqx+j1fDXJEW5bqYykDQQ7mQg+9mhWXtnj+tQZrTWYHyHoi6Be8HPumDSA+UiX2/2buEgjA58iJzdj146uCw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/core": "30.3.0", "@jest/test-result": "30.3.0", @@ -8917,10 +7673,10 @@ }, "node_modules/jest-cli/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -8933,10 +7689,10 @@ }, "node_modules/jest-cli/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8950,10 +7706,10 @@ }, "node_modules/jest-cli/node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -8965,20 +7721,20 @@ }, "node_modules/jest-cli/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, "node_modules/jest-cli/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8990,10 +7746,10 @@ }, "node_modules/jest-cli/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9008,10 +7764,10 @@ }, "node_modules/jest-cli/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -9027,20 +7783,20 @@ }, "node_modules/jest-cli/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "engines": { "node": ">=12" } }, "node_modules/jest-config": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.3.0.tgz", - "integrity": "sha512-WPMAkMAtNDY9P/oKObtsRG/6KTrhtgPJoBTmk20uDn4Uy6/3EJnnaZJre/FMT1KVRx8cve1r7/FlMIOfRVWL4w==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/core": "^7.27.4", "@jest/get-type": "30.1.0", @@ -9088,10 +7844,10 @@ }, "node_modules/jest-config/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9104,20 +7860,20 @@ }, "node_modules/jest-config/node_modules/brace-expansion": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/jest-config/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9131,11 +7887,10 @@ }, "node_modules/jest-config/node_modules/glob": { "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -9153,10 +7908,10 @@ }, "node_modules/jest-config/node_modules/minimatch": { "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "brace-expansion": "^2.0.2" }, @@ -9169,10 +7924,10 @@ }, "node_modules/jest-diff": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz", - "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/diff-sequences": "30.3.0", "@jest/get-type": "30.1.0", @@ -9185,10 +7940,10 @@ }, "node_modules/jest-diff/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9201,10 +7956,10 @@ }, "node_modules/jest-diff/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9218,10 +7973,10 @@ }, "node_modules/jest-docblock": { "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", - "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "detect-newline": "^3.1.0" }, @@ -9231,10 +7986,10 @@ }, "node_modules/jest-each": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.3.0.tgz", - "integrity": "sha512-V8eMndg/aZ+3LnCJgSm13IxS5XSBM22QSZc9BtPK8Dek6pm+hfUNfwBdvsB3d342bo1q7wnSkC38zjX259qZNA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/get-type": "30.1.0", "@jest/types": "30.3.0", @@ -9248,10 +8003,10 @@ }, "node_modules/jest-each/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9264,10 +8019,10 @@ }, "node_modules/jest-each/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9281,10 +8036,10 @@ }, "node_modules/jest-environment-node": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.3.0.tgz", - "integrity": "sha512-4i6HItw/JSiJVsC5q0hnKIe/hbYfZLVG9YJ/0pU9Hz2n/9qZe3Rhn5s5CUZA5ORZlcdT/vmAXRMyONXJwPrmYQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/environment": "30.3.0", "@jest/fake-timers": "30.3.0", @@ -9300,10 +8055,10 @@ }, "node_modules/jest-haste-map": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.3.0.tgz", - "integrity": "sha512-mMi2oqG4KRU0R9QEtscl87JzMXfUhbKaFqOxmjb2CKcbHcUGFrJCBWHmnTiUqi6JcnzoBlO4rWfpdl2k/RfLCA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/types": "30.3.0", "@types/node": "*", @@ -9325,10 +8080,10 @@ }, "node_modules/jest-leak-detector": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.3.0.tgz", - "integrity": "sha512-cuKmUUGIjfXZAiGJ7TbEMx0bcqNdPPI6P1V+7aF+m/FUJqFDxkFR4JqkTu8ZOiU5AaX/x0hZ20KaaIPXQzbMGQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/get-type": "30.1.0", "pretty-format": "30.3.0" @@ -9339,10 +8094,10 @@ }, "node_modules/jest-matcher-utils": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz", - "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/get-type": "30.1.0", "chalk": "^4.1.2", @@ -9355,10 +8110,10 @@ }, "node_modules/jest-matcher-utils/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9371,10 +8126,10 @@ }, "node_modules/jest-matcher-utils/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9388,10 +8143,10 @@ }, "node_modules/jest-message-util": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.3.0.tgz", - "integrity": "sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.3.0", @@ -9409,10 +8164,10 @@ }, "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9425,10 +8180,10 @@ }, "node_modules/jest-message-util/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9442,10 +8197,10 @@ }, "node_modules/jest-mock": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz", - "integrity": "sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/types": "30.3.0", "@types/node": "*", @@ -9457,10 +8212,10 @@ }, "node_modules/jest-pnp-resolver": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=6" }, @@ -9475,20 +8230,20 @@ }, "node_modules/jest-regex-util": { "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-resolve": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.3.0.tgz", - "integrity": "sha512-NRtTAHQlpd15F9rUR36jqwelbrDV/dY4vzNte3S2kxCKUJRYNd5/6nTSbYiak1VX5g8IoFF23Uj5TURkUW8O5g==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", @@ -9505,10 +8260,10 @@ }, "node_modules/jest-resolve-dependencies": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.3.0.tgz", - "integrity": "sha512-9ev8s3YN6Hsyz9LV75XUwkCVFlwPbaFn6Wp75qnI0wzAINYWY8Fb3+6y59Rwd3QaS3kKXffHXsZMziMavfz/nw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "jest-regex-util": "30.0.1", "jest-snapshot": "30.3.0" @@ -9519,10 +8274,10 @@ }, "node_modules/jest-resolve/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9535,10 +8290,10 @@ }, "node_modules/jest-resolve/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9552,10 +8307,10 @@ }, "node_modules/jest-runner": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.3.0.tgz", - "integrity": "sha512-gDv6C9LGKWDPLia9TSzZwf4h3kMQCqyTpq+95PODnTRDO0g9os48XIYYkS6D236vjpBir2fF63YmJFtqkS5Duw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/console": "30.3.0", "@jest/environment": "30.3.0", @@ -9586,10 +8341,10 @@ }, "node_modules/jest-runner/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9602,10 +8357,10 @@ }, "node_modules/jest-runner/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9619,10 +8374,10 @@ }, "node_modules/jest-runner/node_modules/source-map-support": { "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -9630,10 +8385,10 @@ }, "node_modules/jest-runtime": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.3.0.tgz", - "integrity": "sha512-CgC+hIBJbuh78HEffkhNKcbXAytQViplcl8xupqeIWyKQF50kCQA8J7GeJCkjisC6hpnC9Muf8jV5RdtdFbGng==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/environment": "30.3.0", "@jest/fake-timers": "30.3.0", @@ -9664,10 +8419,10 @@ }, "node_modules/jest-runtime/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9680,20 +8435,20 @@ }, "node_modules/jest-runtime/node_modules/brace-expansion": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/jest-runtime/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9707,11 +8462,10 @@ }, "node_modules/jest-runtime/node_modules/glob": { "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -9729,10 +8483,10 @@ }, "node_modules/jest-runtime/node_modules/minimatch": { "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "brace-expansion": "^2.0.2" }, @@ -9745,10 +8499,10 @@ }, "node_modules/jest-snapshot": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.3.0.tgz", - "integrity": "sha512-f14c7atpb4O2DeNhwcvS810Y63wEn8O1HqK/luJ4F6M4NjvxmAKQwBUWjbExUtMxWJQ0wVgmCKymeJK6NZMnfQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/core": "^7.27.4", "@babel/generator": "^7.27.5", @@ -9778,10 +8532,10 @@ }, "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9794,10 +8548,10 @@ }, "node_modules/jest-snapshot/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9811,10 +8565,10 @@ }, "node_modules/jest-util": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.3.0.tgz", - "integrity": "sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/types": "30.3.0", "@types/node": "*", @@ -9829,10 +8583,10 @@ }, "node_modules/jest-util/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9845,10 +8599,10 @@ }, "node_modules/jest-util/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9862,10 +8616,10 @@ }, "node_modules/jest-validate": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz", - "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/get-type": "30.1.0", "@jest/types": "30.3.0", @@ -9880,10 +8634,10 @@ }, "node_modules/jest-validate/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9896,10 +8650,10 @@ }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=10" }, @@ -9909,10 +8663,10 @@ }, "node_modules/jest-validate/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9926,10 +8680,10 @@ }, "node_modules/jest-watcher": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.3.0.tgz", - "integrity": "sha512-PJ1d9ThtTR8aMiBWUdcownq9mDdLXsQzJayTk4kmaBRHKvwNQn+ANveuhEBUyNI2hR1TVhvQ8D5kHubbzBHR/w==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/test-result": "30.3.0", "@jest/types": "30.3.0", @@ -9946,10 +8700,10 @@ }, "node_modules/jest-watcher/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9962,10 +8716,10 @@ }, "node_modules/jest-watcher/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9979,10 +8733,10 @@ }, "node_modules/jest-worker": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.3.0.tgz", - "integrity": "sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", @@ -9996,10 +8750,10 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -10012,15 +8766,11 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -10032,8 +8782,6 @@ }, "node_modules/jsdoc-type-pratt-parser": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.2.0.tgz", - "integrity": "sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==", "dev": true, "license": "MIT", "engines": { @@ -10042,8 +8790,6 @@ }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -10055,17 +8801,15 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/json-schema-to-typescript": { "version": "15.0.4", @@ -10093,22 +8837,16 @@ }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { @@ -10120,8 +8858,6 @@ }, "node_modules/jsonc-eslint-parser": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-3.1.0.tgz", - "integrity": "sha512-75EA7EWZExL/j+MDKQrRbdzcRI2HOkRlmUw8fZJc1ioqFEOvBsq7Rt+A6yCxOt9w/TYNpkt52gC6nm/g5tFIng==", "dev": true, "license": "MIT", "dependencies": { @@ -10138,8 +8874,6 @@ }, "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -10151,8 +8885,6 @@ }, "node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", "optionalDependencies": { @@ -10161,8 +8893,6 @@ }, "node_modules/jsx-ast-utils": { "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10177,8 +8907,6 @@ }, "node_modules/katex": { "version": "0.16.45", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.45.tgz", - "integrity": "sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==", "dev": true, "funding": [ "https://opencollective.com/katex", @@ -10194,8 +8922,6 @@ }, "node_modules/katex/node_modules/commander": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "license": "MIT", "engines": { @@ -10204,8 +8930,6 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -10214,18 +8938,16 @@ }, "node_modules/leven": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=6" } }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10238,22 +8960,20 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/lint-staged": { - "version": "17.0.7", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.0.7.tgz", - "integrity": "sha512-JrSobt+tW3rH8IOMi8tDZd3foorM5yPEkLD/V2NxobgHrFfHWGee4MOLVuZeScgxftEwbHrPHIFA/ZL+nUJeuA==", + "version": "17.0.5", "dev": true, "license": "MIT", "dependencies": { "listr2": "^10.2.1", "picomatch": "^4.0.4", "string-argv": "^0.3.2", - "tinyexec": "^1.2.4" + "tinyexec": "^1.1.2" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -10265,13 +8985,11 @@ "url": "https://opencollective.com/lint-staged" }, "optionalDependencies": { - "yaml": "^2.9.0" + "yaml": "^2.8.4" } }, "node_modules/listr2": { "version": "10.2.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.1.tgz", - "integrity": "sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10301,8 +9019,6 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -10324,22 +9040,16 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, "node_modules/lodash.startcase": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", "dev": true, "license": "MIT" }, "node_modules/log-update": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "license": "MIT", "dependencies": { @@ -10358,8 +9068,6 @@ }, "node_modules/log-update/node_modules/ansi-escapes": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", - "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, "license": "MIT", "dependencies": { @@ -10374,8 +9082,6 @@ }, "node_modules/log-update/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -10387,15 +9093,11 @@ }, "node_modules/log-update/node_modules/emoji-regex": { "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, "node_modules/log-update/node_modules/slice-ansi": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, "license": "MIT", "dependencies": { @@ -10411,8 +9113,6 @@ }, "node_modules/log-update/node_modules/string-width": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10429,8 +9129,6 @@ }, "node_modules/log-update/node_modules/strip-ansi": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { @@ -10445,8 +9143,6 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", "dependencies": { @@ -10463,8 +9159,6 @@ }, "node_modules/longest-streak": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "dev": true, "license": "MIT", "funding": { @@ -10474,8 +9168,6 @@ }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10487,8 +9179,6 @@ }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", "dependencies": { @@ -10497,10 +9187,10 @@ }, "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "semver": "^7.5.3" }, @@ -10513,18 +9203,16 @@ }, "node_modules/makeerror": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "license": "BSD-3-Clause", + "optional": true, + "peer": true, "dependencies": { "tmpl": "1.0.5" } }, "node_modules/markdown-table": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "dev": true, "license": "MIT", "funding": { @@ -10534,8 +9222,6 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { @@ -10544,8 +9230,6 @@ }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", "dev": true, "license": "MIT", "dependencies": { @@ -10561,8 +9245,6 @@ }, "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -10574,8 +9256,6 @@ }, "node_modules/mdast-util-from-markdown": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", - "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10599,8 +9279,6 @@ }, "node_modules/mdast-util-frontmatter": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", "dev": true, "license": "MIT", "dependencies": { @@ -10618,8 +9296,6 @@ }, "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -10631,8 +9307,6 @@ }, "node_modules/mdast-util-gfm": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10651,8 +9325,6 @@ }, "node_modules/mdast-util-gfm-autolink-literal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10669,8 +9341,6 @@ }, "node_modules/mdast-util-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10687,8 +9357,6 @@ }, "node_modules/mdast-util-gfm-strikethrough": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "dev": true, "license": "MIT", "dependencies": { @@ -10703,8 +9371,6 @@ }, "node_modules/mdast-util-gfm-table": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "dev": true, "license": "MIT", "dependencies": { @@ -10721,8 +9387,6 @@ }, "node_modules/mdast-util-gfm-task-list-item": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10738,8 +9402,6 @@ }, "node_modules/mdast-util-math": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", - "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", "dev": true, "license": "MIT", "dependencies": { @@ -10758,8 +9420,6 @@ }, "node_modules/mdast-util-phrasing": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "dev": true, "license": "MIT", "dependencies": { @@ -10773,8 +9433,6 @@ }, "node_modules/mdast-util-to-markdown": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "dev": true, "license": "MIT", "dependencies": { @@ -10795,8 +9453,6 @@ }, "node_modules/mdast-util-to-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, "license": "MIT", "dependencies": { @@ -10808,20 +9464,18 @@ } }, "node_modules/memfs": { - "version": "4.57.6", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.6.tgz", - "integrity": "sha512-WQK+DGjKCnPdpSyJUXphz+COF2uEhhsxQ3VIWBSbzpbbXuch3h4FePMqXrXGdLjsTgo4JFzBFsP6AWd9pVazGw==", + "version": "4.57.2", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.6", - "@jsonjoy.com/fs-fsa": "4.57.6", - "@jsonjoy.com/fs-node": "4.57.6", - "@jsonjoy.com/fs-node-builtins": "4.57.6", - "@jsonjoy.com/fs-node-to-fsa": "4.57.6", - "@jsonjoy.com/fs-node-utils": "4.57.6", - "@jsonjoy.com/fs-print": "4.57.6", - "@jsonjoy.com/fs-snapshot": "4.57.6", + "@jsonjoy.com/fs-core": "4.57.2", + "@jsonjoy.com/fs-fsa": "4.57.2", + "@jsonjoy.com/fs-node": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-to-fsa": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "@jsonjoy.com/fs-print": "4.57.2", + "@jsonjoy.com/fs-snapshot": "4.57.2", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -10839,15 +9493,11 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -10856,8 +9506,6 @@ }, "node_modules/micromark": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", "dev": true, "funding": [ { @@ -10892,8 +9540,6 @@ }, "node_modules/micromark-core-commonmark": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", "dev": true, "funding": [ { @@ -10927,8 +9573,6 @@ }, "node_modules/micromark-extension-frontmatter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", "dev": true, "license": "MIT", "dependencies": { @@ -10944,8 +9588,6 @@ }, "node_modules/micromark-extension-gfm": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", "dev": true, "license": "MIT", "dependencies": { @@ -10965,8 +9607,6 @@ }, "node_modules/micromark-extension-gfm-autolink-literal": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "dev": true, "license": "MIT", "dependencies": { @@ -10982,8 +9622,6 @@ }, "node_modules/micromark-extension-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "dev": true, "license": "MIT", "dependencies": { @@ -11003,8 +9641,6 @@ }, "node_modules/micromark-extension-gfm-strikethrough": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", "dev": true, "license": "MIT", "dependencies": { @@ -11022,8 +9658,6 @@ }, "node_modules/micromark-extension-gfm-table": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -11040,8 +9674,6 @@ }, "node_modules/micromark-extension-gfm-tagfilter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", "dev": true, "license": "MIT", "dependencies": { @@ -11054,8 +9686,6 @@ }, "node_modules/micromark-extension-gfm-task-list-item": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", "dev": true, "license": "MIT", "dependencies": { @@ -11072,8 +9702,6 @@ }, "node_modules/micromark-extension-math": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", - "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", "dev": true, "license": "MIT", "dependencies": { @@ -11092,8 +9720,6 @@ }, "node_modules/micromark-factory-destination": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", "dev": true, "funding": [ { @@ -11114,8 +9740,6 @@ }, "node_modules/micromark-factory-label": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", "dev": true, "funding": [ { @@ -11137,8 +9761,6 @@ }, "node_modules/micromark-factory-space": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", "dev": true, "funding": [ { @@ -11158,8 +9780,6 @@ }, "node_modules/micromark-factory-title": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", "dev": true, "funding": [ { @@ -11181,8 +9801,6 @@ }, "node_modules/micromark-factory-whitespace": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", "dev": true, "funding": [ { @@ -11204,8 +9822,6 @@ }, "node_modules/micromark-util-character": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "dev": true, "funding": [ { @@ -11225,8 +9841,6 @@ }, "node_modules/micromark-util-chunked": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "dev": true, "funding": [ { @@ -11245,8 +9859,6 @@ }, "node_modules/micromark-util-classify-character": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "dev": true, "funding": [ { @@ -11267,8 +9879,6 @@ }, "node_modules/micromark-util-combine-extensions": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "dev": true, "funding": [ { @@ -11288,8 +9898,6 @@ }, "node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "dev": true, "funding": [ { @@ -11308,8 +9916,6 @@ }, "node_modules/micromark-util-decode-string": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "dev": true, "funding": [ { @@ -11331,8 +9937,6 @@ }, "node_modules/micromark-util-encode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "dev": true, "funding": [ { @@ -11348,8 +9952,6 @@ }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", "dev": true, "funding": [ { @@ -11365,8 +9967,6 @@ }, "node_modules/micromark-util-normalize-identifier": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "dev": true, "funding": [ { @@ -11385,8 +9985,6 @@ }, "node_modules/micromark-util-resolve-all": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "dev": true, "funding": [ { @@ -11405,8 +10003,6 @@ }, "node_modules/micromark-util-sanitize-uri": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dev": true, "funding": [ { @@ -11427,8 +10023,6 @@ }, "node_modules/micromark-util-subtokenize": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", "dev": true, "funding": [ { @@ -11450,8 +10044,6 @@ }, "node_modules/micromark-util-symbol": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "dev": true, "funding": [ { @@ -11467,8 +10059,6 @@ }, "node_modules/micromark-util-types": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", "dev": true, "funding": [ { @@ -11484,8 +10074,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -11498,8 +10086,6 @@ }, "node_modules/micromatch/node_modules/picomatch": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -11511,8 +10097,6 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", "engines": { @@ -11521,8 +10105,6 @@ }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "dependencies": { @@ -11534,18 +10116,16 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=6" } }, "node_modules/mimic-function": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true, "license": "MIT", "engines": { @@ -11557,8 +10137,6 @@ }, "node_modules/minimatch": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -11570,8 +10148,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { @@ -11580,18 +10156,16 @@ }, "node_modules/minipass": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, "license": "BlueOak-1.0.0", + "optional": true, + "peer": true, "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mri": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, "license": "MIT", "engines": { @@ -11600,17 +10174,15 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, "node_modules/napi-postinstall": { "version": "0.3.4", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", - "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "bin": { "napi-postinstall": "lib/cli.js" }, @@ -11623,8 +10195,6 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, @@ -11637,8 +10207,6 @@ }, "node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, "license": "MIT", "dependencies": { @@ -11658,8 +10226,6 @@ }, "node_modules/node-gyp-build": { "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", "dev": true, "license": "MIT", "bin": { @@ -11670,34 +10236,32 @@ }, "node_modules/node-int64": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/node-releases": { "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "path-key": "^3.0.0" }, @@ -11707,8 +10271,6 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "license": "MIT", "engines": { @@ -11717,15 +10279,11 @@ }, "node_modules/object-deep-merge": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-2.0.0.tgz", - "integrity": "sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==", "dev": true, "license": "MIT" }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", "engines": { @@ -11737,8 +10295,6 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -11747,8 +10303,6 @@ }, "node_modules/object.assign": { "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -11768,8 +10322,6 @@ }, "node_modules/object.entries": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { @@ -11784,8 +10336,6 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11803,8 +10353,6 @@ }, "node_modules/object.groupby": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11818,8 +10366,6 @@ }, "node_modules/object.values": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -11837,8 +10383,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "license": "ISC", "dependencies": { @@ -11847,10 +10391,10 @@ }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -11863,8 +10407,6 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -11881,15 +10423,11 @@ }, "node_modules/outdent": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", - "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", "dev": true, "license": "MIT" }, "node_modules/own-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -11906,8 +10444,6 @@ }, "node_modules/p-filter": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, "license": "MIT", "dependencies": { @@ -11919,8 +10455,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11935,8 +10469,6 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -11951,8 +10483,6 @@ }, "node_modules/p-map": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, "license": "MIT", "engines": { @@ -11961,8 +10491,6 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "license": "MIT", "engines": { @@ -11971,15 +10499,13 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, - "license": "BlueOak-1.0.0" + "license": "BlueOak-1.0.0", + "optional": true, + "peer": true }, "node_modules/package-manager-detector": { "version": "0.2.11", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", - "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11988,8 +10514,6 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -12001,8 +10525,6 @@ }, "node_modules/parse-imports-exports": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", - "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12011,10 +10533,10 @@ }, "node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -12030,15 +10552,11 @@ }, "node_modules/parse-statements": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", - "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", "dev": true, "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -12047,8 +10565,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", "engines": { @@ -12057,8 +10573,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -12067,17 +10581,15 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", + "optional": true, + "peer": true, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -12091,15 +10603,13 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "ISC" + "license": "ISC", + "optional": true, + "peer": true }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -12108,15 +10618,11 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { @@ -12128,8 +10634,6 @@ }, "node_modules/pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "license": "MIT", "engines": { @@ -12138,20 +10642,20 @@ }, "node_modules/pirates": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">= 6" } }, "node_modules/pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "find-up": "^4.0.0" }, @@ -12161,10 +10665,10 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -12175,10 +10679,10 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -12188,10 +10692,10 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "p-try": "^2.0.0" }, @@ -12204,10 +10708,10 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -12217,8 +10721,6 @@ }, "node_modules/pluralize": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, "license": "MIT", "engines": { @@ -12227,8 +10729,6 @@ }, "node_modules/possible-typed-array-names": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -12237,8 +10737,6 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -12247,8 +10745,6 @@ }, "node_modules/prettier": { "version": "3.8.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", - "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, "license": "MIT", "bin": { @@ -12263,8 +10759,6 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", - "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", "dev": true, "license": "MIT", "dependencies": { @@ -12276,10 +10770,10 @@ }, "node_modules/pretty-format": { "version": "30.3.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz", - "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", @@ -12291,8 +10785,6 @@ }, "node_modules/prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "license": "MIT", "dependencies": { @@ -12303,15 +10795,11 @@ }, "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, "license": "MIT" }, "node_modules/proxy-from-env": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", "dev": true, "license": "MIT", "engines": { @@ -12320,8 +10808,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -12330,8 +10816,6 @@ }, "node_modules/pure-rand": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", - "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", "dev": true, "funding": [ { @@ -12343,12 +10827,12 @@ "url": "https://opencollective.com/fast-check" } ], - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/quansync": { "version": "0.2.11", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", - "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", "dev": true, "funding": [ { @@ -12364,8 +10848,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -12385,15 +10867,13 @@ }, "node_modules/react-is": { "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/read-yaml-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", - "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", "dev": true, "license": "MIT", "dependencies": { @@ -12408,8 +10888,6 @@ }, "node_modules/read-yaml-file/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -12418,8 +10896,6 @@ }, "node_modules/read-yaml-file/node_modules/js-yaml": { "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -12432,8 +10908,6 @@ }, "node_modules/read-yaml-file/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -12442,8 +10916,6 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -12465,8 +10937,6 @@ }, "node_modules/regexp-tree": { "version": "0.1.27", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", - "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", "dev": true, "license": "MIT", "bin": { @@ -12475,8 +10945,6 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -12496,8 +10964,6 @@ }, "node_modules/regjsparser": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", - "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -12509,8 +10975,6 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { @@ -12519,8 +10983,6 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", "engines": { @@ -12529,8 +10991,6 @@ }, "node_modules/reserved-identifiers": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz", - "integrity": "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==", "dev": true, "license": "MIT", "engines": { @@ -12542,8 +11002,6 @@ }, "node_modules/resolve": { "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12563,10 +11021,10 @@ }, "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "resolve-from": "^5.0.0" }, @@ -12576,8 +11034,6 @@ }, "node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -12586,8 +11042,6 @@ }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, "license": "MIT", "funding": { @@ -12596,8 +11050,6 @@ }, "node_modules/restore-cursor": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "license": "MIT", "dependencies": { @@ -12613,8 +11065,6 @@ }, "node_modules/restore-cursor/node_modules/onetime": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12629,8 +11079,6 @@ }, "node_modules/restore-cursor/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -12642,8 +11090,6 @@ }, "node_modules/reusify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -12653,15 +11099,11 @@ }, "node_modules/rfdc": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, "license": "MIT" }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -12684,8 +11126,6 @@ }, "node_modules/safe-array-concat": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12704,8 +11144,6 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -12721,8 +11159,6 @@ }, "node_modules/safe-regex-test": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -12739,8 +11175,6 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "license": "MIT" }, @@ -12802,9 +11236,7 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", - "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", + "version": "7.8.0", "dev": true, "license": "ISC", "bin": { @@ -12816,8 +11248,6 @@ }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -12834,8 +11264,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12850,8 +11278,6 @@ }, "node_modules/set-proto": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -12865,8 +11291,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -12878,8 +11302,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { @@ -12888,8 +11310,6 @@ }, "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", "dependencies": { @@ -12908,8 +11328,6 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "license": "MIT", "dependencies": { @@ -12925,8 +11343,6 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", "dependencies": { @@ -12944,8 +11360,6 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", "dependencies": { @@ -12964,15 +11378,13 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "license": "ISC" + "license": "ISC", + "optional": true, + "peer": true }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -12981,8 +11393,6 @@ }, "node_modules/slice-ansi": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", - "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", "dev": true, "license": "MIT", "dependencies": { @@ -12998,8 +11408,6 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -13011,8 +11419,6 @@ }, "node_modules/smol-toml": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz", - "integrity": "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -13024,15 +11430,11 @@ }, "node_modules/sort-object-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.1.0.tgz", - "integrity": "sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==", "dev": true, "license": "MIT" }, "node_modules/sort-package-json": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.6.0.tgz", - "integrity": "sha512-fyJsPLhWvY7u2KsKPZn1PixbXp+1m7V8NWqU8CvgFRbMEX41Ffw1kD8n0CfJiGoaSfoAvbrqRRl/DcHO8omQOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13053,8 +11455,6 @@ }, "node_modules/sort-package-json/node_modules/detect-newline": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", - "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", "dev": true, "license": "MIT", "engines": { @@ -13066,8 +11466,6 @@ }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -13076,8 +11474,6 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", "dependencies": { @@ -13087,8 +11483,6 @@ }, "node_modules/spawndamnit": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", - "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -13098,8 +11492,6 @@ }, "node_modules/spawndamnit/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -13111,15 +11503,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", - "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13129,34 +11517,20 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.23", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", - "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", "dev": true, "license": "CC0-1.0" }, "node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, - "node_modules/stack-trace": { - "version": "1.0.0-pre2", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-1.0.0-pre2.tgz", - "integrity": "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - } - }, "node_modules/stack-utils": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -13166,18 +11540,16 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13190,8 +11562,6 @@ }, "node_modules/string-argv": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "license": "MIT", "engines": { @@ -13200,10 +11570,10 @@ }, "node_modules/string-length": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -13214,8 +11584,6 @@ }, "node_modules/string-width": { "version": "8.2.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", - "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", "dev": true, "license": "MIT", "dependencies": { @@ -13232,10 +11600,10 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13247,18 +11615,16 @@ }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { @@ -13273,8 +11639,6 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "license": "MIT", "dependencies": { @@ -13301,8 +11665,6 @@ }, "node_modules/string.prototype.repeat": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, "license": "MIT", "dependencies": { @@ -13312,8 +11674,6 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -13334,8 +11694,6 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13353,8 +11711,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -13371,8 +11727,6 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -13385,10 +11739,10 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13398,18 +11752,16 @@ }, "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, "node_modules/strip-ansi/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { @@ -13418,28 +11770,26 @@ }, "node_modules/strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=6" } }, "node_modules/strip-indent": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.1.1.tgz", - "integrity": "sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==", "dev": true, "license": "MIT", "engines": { @@ -13451,8 +11801,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -13464,8 +11812,6 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -13477,8 +11823,6 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -13490,8 +11834,6 @@ }, "node_modules/synckit": { "version": "0.11.12", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", - "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13506,8 +11848,6 @@ }, "node_modules/tapable": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", - "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "license": "MIT", "engines": { "node": ">=6" @@ -13519,8 +11859,6 @@ }, "node_modules/term-size": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true, "license": "MIT", "engines": { @@ -13532,8 +11870,6 @@ }, "node_modules/terser": { "version": "5.46.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", - "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -13643,17 +11979,15 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "license": "MIT" }, "node_modules/test-exclude": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -13665,8 +11999,6 @@ }, "node_modules/thingies": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz", - "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==", "dev": true, "license": "MIT", "engines": { @@ -13682,8 +12014,6 @@ }, "node_modules/tinybench": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-6.0.2.tgz", - "integrity": "sha512-FlHoQpcFvCzeXK5kVPvV7IVgW/hs/B36QWTz876iSdeJguBDfdTSRQmYmaHX+fQNt4hp+gEFB2XXw+8hT4/y8A==", "dev": true, "license": "MIT", "engines": { @@ -13691,9 +12021,7 @@ } }, "node_modules/tinyexec": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", - "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "version": "1.1.2", "dev": true, "license": "MIT", "engines": { @@ -13701,14 +12029,12 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", - "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "version": "0.2.15", "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.4" + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -13719,15 +12045,13 @@ }, "node_modules/tmpl": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "optional": true, + "peer": true }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13739,8 +12063,6 @@ }, "node_modules/to-valid-identifier": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-valid-identifier/-/to-valid-identifier-1.0.0.tgz", - "integrity": "sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==", "dev": true, "license": "MIT", "dependencies": { @@ -13757,7 +12079,6 @@ "node_modules/tooling": { "version": "1.26.3", "resolved": "git+ssh://git@github.com/webpack/tooling.git#a28b891e51fdf374f3eb6f574a7cac1327b5ead8", - "integrity": "sha512-JTi8iqaemnXByj6eNglfU+5rrrz2hX0N4pKmk/AIErwv53YW4CZZixtfklVCiMJrghudhk09ejhhJHNYe/hC9w==", "dev": true, "license": "MIT", "dependencies": { @@ -13776,8 +12097,6 @@ }, "node_modules/tooling/node_modules/ajv": { "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", "dependencies": { @@ -13793,22 +12112,16 @@ }, "node_modules/tooling/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true, "license": "MIT" }, "node_modules/tree-dump": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", - "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -13824,8 +12137,6 @@ }, "node_modules/ts-api-utils": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", - "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, "license": "MIT", "engines": { @@ -13837,8 +12148,6 @@ }, "node_modules/tsconfig-paths": { "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -13850,8 +12159,6 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -13863,8 +12170,6 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -13873,15 +12178,11 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -13893,20 +12194,20 @@ }, "node_modules/type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", + "optional": true, + "peer": true, "engines": { "node": ">=10" }, @@ -13916,8 +12217,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -13931,8 +12230,6 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -13951,8 +12248,6 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13973,8 +12268,6 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -13994,8 +12287,6 @@ }, "node_modules/typescript": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", - "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -14008,8 +12299,6 @@ }, "node_modules/typescript-eslint": { "version": "8.59.3", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.3.tgz", - "integrity": "sha512-KgusgyDgG4LI8Ih/sWaCtZ06tckLAS5CvT5A4D1Q7bYVoAAyzwiZvE4BmwDHkhRVkvhRBepKeASoFzQetha7Fg==", "dev": true, "license": "MIT", "dependencies": { @@ -14032,8 +12321,6 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -14051,15 +12338,11 @@ }, "node_modules/undici-types": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, "license": "MIT" }, "node_modules/unist-util-is": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", - "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "dev": true, "license": "MIT", "dependencies": { @@ -14072,8 +12355,6 @@ }, "node_modules/unist-util-remove-position": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14087,8 +12368,6 @@ }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14101,8 +12380,6 @@ }, "node_modules/unist-util-visit": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", - "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", "dev": true, "license": "MIT", "dependencies": { @@ -14117,8 +12394,6 @@ }, "node_modules/unist-util-visit-parents": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", - "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14132,8 +12407,6 @@ }, "node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", "engines": { @@ -14142,11 +12415,11 @@ }, "node_modules/unrs-resolver": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", - "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", "dev": true, "hasInstallScript": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "napi-postinstall": "^0.3.0" }, @@ -14177,8 +12450,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -14208,8 +12479,6 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -14218,10 +12487,10 @@ }, "node_modules/v8-to-istanbul": { "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -14233,24 +12502,20 @@ }, "node_modules/vscode-languageserver-textdocument": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", - "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", "dev": true, "license": "MIT" }, "node_modules/vscode-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", "dev": true, "license": "MIT" }, "node_modules/walker": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "license": "Apache-2.0", + "optional": true, + "peer": true, "dependencies": { "makeerror": "1.0.12" } @@ -14271,8 +12536,6 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true, "license": "BSD-2-Clause" }, @@ -14369,8 +12632,6 @@ }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "license": "MIT", "dependencies": { @@ -14380,8 +12641,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -14396,8 +12655,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -14416,8 +12673,6 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14444,8 +12699,6 @@ }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -14463,8 +12716,6 @@ }, "node_modules/which-typed-array": { "version": "1.1.20", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", - "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "dev": true, "license": "MIT", "dependencies": { @@ -14485,8 +12736,6 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -14495,8 +12744,6 @@ }, "node_modules/wrap-ansi": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", - "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14514,10 +12761,10 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -14532,10 +12779,10 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -14548,20 +12795,20 @@ }, "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14573,8 +12820,6 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -14586,8 +12831,6 @@ }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { @@ -14602,17 +12845,15 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" @@ -14623,10 +12864,10 @@ }, "node_modules/write-file-atomic/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", + "optional": true, + "peer": true, "engines": { "node": ">=14" }, @@ -14636,8 +12877,6 @@ }, "node_modules/xdg-basedir": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "dev": true, "license": "MIT", "engines": { @@ -14649,8 +12888,6 @@ }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { @@ -14659,15 +12896,11 @@ }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, "node_modules/yaml": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", - "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "version": "2.8.4", "dev": true, "license": "ISC", "bin": { @@ -14682,8 +12915,6 @@ }, "node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { @@ -14701,8 +12932,6 @@ }, "node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -14711,8 +12940,6 @@ }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -14721,8 +12948,6 @@ }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -14736,8 +12961,6 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -14749,8 +12972,6 @@ }, "node_modules/zod": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "dev": true, "license": "MIT", "funding": { @@ -14759,8 +12980,6 @@ }, "node_modules/zod-validation-error": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", - "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", "dev": true, "license": "MIT", "engines": { @@ -14772,8 +12991,6 @@ }, "node_modules/zwitch": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "dev": true, "license": "MIT", "funding": { diff --git a/package.json b/package.json index 7760dc52..319cfdb1 100644 --- a/package.json +++ b/package.json @@ -37,12 +37,11 @@ "fix": "npm run fix:code && npm run fix:special", "fix:code": "npm run lint:code -- --fix", "fix:special": "node node_modules/tooling/inherit-types --write && node node_modules/tooling/generate-types --write", - "type-report": "rimraf coverage && npm run cover:types && npm run cover:report && open-cli coverage/lcov-report/index.html", "pretest": "npm run lint", - "test": "npm run test:coverage", - "test:only": "jest", - "test:watch": "npm run test:only -- --watch", - "test:coverage": "npm run test:only -- --collectCoverageFrom=\"lib/**/*.js\" --coverage", + "test": "npm run test:only", + "test:only": "node scripts/test.js", + "test:watch": "node scripts/test.js --watch", + "test:coverage": "node scripts/test.js --experimental-test-coverage --test-coverage-include=\"lib/**\" --test-reporter=spec --test-reporter-destination=stdout --test-reporter=lcov --test-reporter-destination=coverage/lcov.info", "test:browser": "node --experimental-vm-modules test/smoke/browser-run.cjs", "version": "changeset version", "release": "changeset publish", @@ -66,13 +65,11 @@ "@changesets/get-github-info": "^0.8.0", "@codspeed/core": "^5.2.0", "@types/graceful-fs": "^4.1.6", - "@types/jest": "^30.0.0", "@types/node": "^24.10.4", "cspell": "^10.0.0", "eslint": "^9.39.2", "eslint-config-webpack": "^4.9.5", "husky": "^9.1.7", - "jest": "^30.3.0", "lint-staged": "^17.0.4", "memfs": "^4.56.11", "prettier": "^3.7.4", diff --git a/scripts/test.js b/scripts/test.js new file mode 100644 index 00000000..a911e05f --- /dev/null +++ b/scripts/test.js @@ -0,0 +1,38 @@ +"use strict"; + +// Runs the test suite with the Node.js built-in test runner. +// +// The files are enumerated explicitly instead of relying on `node --test` +// auto-discovery: the default discovery pattern treats every `.js` file under +// a `test/` directory as a test (including everything in `test/fixtures`), and +// native glob support in `node --test` is only available on newer Node.js +// versions. Passing an explicit list keeps behavior identical across the whole +// supported Node.js range and on every OS. + +const { spawn } = require("child_process"); +const { mkdirSync, readdirSync } = require("fs"); +const path = require("path"); + +const testDir = path.join(__dirname, "..", "test"); +const files = readdirSync(testDir) + .filter((file) => file.endsWith(".test.js")) + .sort() + .map((file) => path.join("test", file)); + +const nodeArgs = process.argv.slice(2); + +if (nodeArgs.includes("--experimental-test-coverage")) { + mkdirSync(path.join(__dirname, "..", "coverage"), { recursive: true }); +} + +const child = spawn(process.execPath, ["--test", ...nodeArgs, ...files], { + stdio: "inherit", +}); + +child.on("exit", (code, signal) => { + if (signal) { + process.kill(process.pid, signal); + } else { + process.exitCode = code === null ? 1 : code; + } +}); diff --git a/test/CachedInputFileSystem.test.js b/test/CachedInputFileSystem.test.js index cc520fff..c8c6e6cf 100644 --- a/test/CachedInputFileSystem.test.js +++ b/test/CachedInputFileSystem.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { afterEach, beforeEach, describe, it } = require("node:test"); + const path = require("path"); const url = require("url"); const { CachedInputFileSystem } = require("../"); @@ -40,39 +43,39 @@ describe("cachedInputFileSystem OperationMergerBackend ('stat' and 'statSync')", fs.purge(); }); - it("should join accesses", (done) => { + it("should join accesses", (t, done) => { fs.stat("a", (err, result) => { - expect(result).toBeDefined(); + assert.notStrictEqual(result, undefined); result.a = true; }); fs.stat("a", (err, result) => { - expect(result).toBeDefined(); - expect(result.a).toBeDefined(); + assert.notStrictEqual(result, undefined); + assert.notStrictEqual(result.a, undefined); done(); }); }); - it("should not join accesses with options", (done) => { + it("should not join accesses with options", (t, done) => { fs.stat("a", (err, result) => { - expect(result).toBeDefined(); + assert.notStrictEqual(result, undefined); result.a = true; - expect(result.path).toBe("a"); - expect(result.options).toBeUndefined(); + assert.strictEqual(result.path, "a"); + assert.strictEqual(result.options, undefined); }); fs.stat("a", { options: true }, (err, result) => { - expect(result).toBeDefined(); - expect(result.a).toBeUndefined(); - expect(result.path).toBe("a"); - expect(result.options).toMatchObject({ options: true }); + assert.notStrictEqual(result, undefined); + assert.strictEqual(result.a, undefined); + assert.strictEqual(result.path, "a"); + assert.strictEqual(result.options.options, true); done(); }); }); - it("should not cache accesses", (done) => { + it("should not cache accesses", (t, done) => { fs.stat("a", (err, result) => { result.a = true; fs.stat("a", (err, result) => { - expect(result.a).toBeUndefined(); + assert.strictEqual(result.a, undefined); done(); }); }); @@ -83,7 +86,7 @@ describe("cachedInputFileSystem OperationMergerBackend ('stat' and 'statSync')", result.a = true; const result2 = fs.statSync("a"); - expect(result2.a).toBeUndefined(); + assert.strictEqual(result2.a, undefined); }); }); @@ -123,42 +126,42 @@ describe("cachedInputFileSystem OperationMergerBackend ('lstat' and 'lstatSync') fs.purge(); }); - it("should join accesses", (done) => { + it("should join accesses", (t, done) => { fs.lstat("a", (err, result) => { - expect(result).toBeDefined(); + assert.notStrictEqual(result, undefined); result.a = true; }); fs.lstat("a", (err, result) => { - expect(result).toBeDefined(); - expect(result.a).toBeDefined(); + assert.notStrictEqual(result, undefined); + assert.notStrictEqual(result.a, undefined); done(); }); }); - it("should not join accesses with options", (done) => { + it("should not join accesses with options", (t, done) => { fs.lstat("a", (err, result) => { - expect(result).toBeDefined(); + assert.notStrictEqual(result, undefined); result.a = true; - expect(result).toBeDefined(); - expect(result.path).toBe("a"); - expect(result.options).toBeUndefined(); + assert.notStrictEqual(result, undefined); + assert.strictEqual(result.path, "a"); + assert.strictEqual(result.options, undefined); }); fs.lstat("a", { options: true }, (err, result) => { - expect(result).toBeDefined(); - expect(result.a).toBeUndefined(); - expect(result.path).toBe("a"); - expect(result.options).toMatchObject({ options: true }); + assert.notStrictEqual(result, undefined); + assert.strictEqual(result.a, undefined); + assert.strictEqual(result.path, "a"); + assert.strictEqual(result.options.options, true); done(); }); }); - it("should not cache accesses", (done) => { + it("should not cache accesses", (t, done) => { fs.lstat("a", (err, result) => { result.a = true; fs.lstat("a", (err, result) => { - expect(result.a).toBeUndefined(); + assert.strictEqual(result.a, undefined); done(); }); }); @@ -169,7 +172,7 @@ describe("cachedInputFileSystem OperationMergerBackend ('lstat' and 'lstatSync') result.a = true; const result2 = fs.lstatSync("a"); - expect(result2.a).toBeUndefined(); + assert.strictEqual(result2.a, undefined); }); }); @@ -209,42 +212,42 @@ describe("cachedInputFileSystem OperationMergerBackend ('realpath' and 'realpath fs.purge(); }); - it("should join accesses", (done) => { + it("should join accesses", (t, done) => { fs.realpath("a", (err, result) => { - expect(result).toBeDefined(); + assert.notStrictEqual(result, undefined); result.a = true; }); fs.realpath("a", (err, result) => { - expect(result).toBeDefined(); - expect(result.a).toBeDefined(); + assert.notStrictEqual(result, undefined); + assert.notStrictEqual(result.a, undefined); done(); }); }); - it("should not join accesses with options", (done) => { + it("should not join accesses with options", (t, done) => { fs.realpath("a", (err, result) => { - expect(result).toBeDefined(); + assert.notStrictEqual(result, undefined); result.a = true; - expect(result).toBeDefined(); - expect(result.path).toBe("a"); - expect(result.options).toBeUndefined(); + assert.notStrictEqual(result, undefined); + assert.strictEqual(result.path, "a"); + assert.strictEqual(result.options, undefined); }); fs.realpath("a", { options: true }, (err, result) => { - expect(result).toBeDefined(); - expect(result.a).toBeUndefined(); - expect(result.path).toBe("a"); - expect(result.options).toMatchObject({ options: true }); + assert.notStrictEqual(result, undefined); + assert.strictEqual(result.a, undefined); + assert.strictEqual(result.path, "a"); + assert.strictEqual(result.options.options, true); done(); }); }); - it("should not cache accesses", (done) => { + it("should not cache accesses", (t, done) => { fs.realpath("a", (err, result) => { result.a = true; fs.realpath("a", (err, result) => { - expect(result.a).toBeUndefined(); + assert.strictEqual(result.a, undefined); done(); }); }); @@ -255,7 +258,7 @@ describe("cachedInputFileSystem OperationMergerBackend ('realpath' and 'realpath result.a = true; const result2 = fs.realpathSync("a"); - expect(result2.a).toBeUndefined(); + assert.strictEqual(result2.a, undefined); }); }); @@ -298,61 +301,61 @@ describe("cachedInputFileSystem CacheBackend", () => { fs.purge(); }); - it("should join accesses", (done) => { + it("should join accesses", (t, done) => { fs.stat("a", (err, result) => { result.a = true; }); fs.stat("a", (err, result) => { - expect(result.a).toBeDefined(); + assert.notStrictEqual(result.a, undefined); done(); }); }); - it("should not call callback twice when combining sync and async calls", (done) => { + it("should not call callback twice when combining sync and async calls", (t, done) => { let called = false; fs.stat("a", (err, result) => { if (called) return done(new Error("callback was called twice")); called = true; - expect(result).toBeDefined(); + assert.notStrictEqual(result, undefined); result.a = true; done(); }); const syncResult = fs.statSync("a"); - expect(syncResult).toBeDefined(); - expect(syncResult.a).toBeDefined(); + assert.notStrictEqual(syncResult, undefined); + assert.notStrictEqual(syncResult.a, undefined); }); - it("should not join accesses with options", (done) => { + it("should not join accesses with options", (t, done) => { fs.stat("a", (err, result) => { result.a = true; - expect(result.path).toBe("a"); - expect(result.options).toBeUndefined(); + assert.strictEqual(result.path, "a"); + assert.strictEqual(result.options, undefined); }); fs.stat("a", { options: true }, (err, result) => { - expect(result.a).toBeUndefined(); - expect(result.path).toBe("a"); - expect(result.options).toMatchObject({ options: true }); + assert.strictEqual(result.a, undefined); + assert.strictEqual(result.path, "a"); + assert.strictEqual(result.options.options, true); done(); }); }); - it("should cache accesses", (done) => { + it("should cache accesses", (t, done) => { fs.stat("a", (err, result) => { result.a = true; let sync = true; fs.stat("a", (err, result) => { - expect(result.a).toBeDefined(); - expect(sync).toBe(true); + assert.notStrictEqual(result.a, undefined); + assert.strictEqual(sync, true); setTimeout(() => { fs.stat("a", (err, result) => { - expect(result.a).toBeUndefined(); + assert.strictEqual(result.a, undefined); result.b = true; let sync2 = true; fs.stat("a", (err, result) => { - expect(result.b).toBeDefined(); - expect(result.a).toBeUndefined(); - expect(sync2).toBe(true); + assert.notStrictEqual(result.b, undefined); + assert.strictEqual(result.a, undefined); + assert.strictEqual(sync2, true); done(); }); setTimeout(() => { @@ -371,26 +374,26 @@ describe("cachedInputFileSystem CacheBackend", () => { const result = fs.statSync("a"); result.a = true; const result2 = fs.statSync("a"); - expect(result2.a).toBeDefined(); + assert.notStrictEqual(result2.a, undefined); const result3 = fs.statSync("a", { options: true }); - expect(result3.a).toBeUndefined(); - expect(result3.options).toMatchObject({ options: true }); + assert.strictEqual(result3.a, undefined); + assert.strictEqual(result3.options.options, true); }); - it("should recover after passive periods", (done) => { + it("should recover after passive periods", (t, done) => { fs.stat("a", (err, result) => { result.a = true; setTimeout(() => { fs.stat("a", (err, result) => { - expect(result.a).toBeDefined(); + assert.notStrictEqual(result.a, undefined); setTimeout(() => { fs.stat("a", (err, result) => { - expect(result.a).toBeUndefined(); + assert.strictEqual(result.a, undefined); result.b = true; setTimeout(() => { fs.stat("a", (err, result) => { - expect(result.b).toBeDefined(); - expect(result.a).toBeUndefined(); + assert.notStrictEqual(result.b, undefined); + assert.strictEqual(result.a, undefined); done(); }); }, 500); @@ -401,17 +404,17 @@ describe("cachedInputFileSystem CacheBackend", () => { }); }); - it("should restart after timeout", (done) => { + it("should restart after timeout", (t, done) => { fs.stat("a", (err, result) => { result.a = true; setTimeout(() => { fs.stat("a", (err, result) => { - expect(result.a).toBeUndefined(); + assert.strictEqual(result.a, undefined); result.b = true; setTimeout(() => { fs.stat("a", (err, result) => { - expect(result.b).toBeDefined(); - expect(result.a).toBeUndefined(); + assert.notStrictEqual(result.b, undefined); + assert.strictEqual(result.a, undefined); done(); }); }, 50); @@ -420,36 +423,36 @@ describe("cachedInputFileSystem CacheBackend", () => { }); }); - it("should cache undefined value", (done) => { + it("should cache undefined value", (t, done) => { fs.stat(undefined, (_err, result) => { - expect(result).toBeUndefined(); + assert.strictEqual(result, undefined); fs.purge("a"); fs.purge(); done(); }); }); - it("should purge readdir correctly", (done) => { + it("should purge readdir correctly", (t, done) => { fs.readdir("/test/path", (err, r) => { - expect(r[0]).toBe("0"); + assert.strictEqual(r[0], "0"); fs.purge(["/test/path/sub/path"]); fs.readdir("/test/path", (err, r) => { - expect(r[0]).toBe("0"); + assert.strictEqual(r[0], "0"); fs.purge(["/test/path/sub"]); fs.readdir("/test/path", (err, r) => { - expect(r[0]).toBe("1"); + assert.strictEqual(r[0], "1"); fs.purge(["/test/path"]); fs.readdir("/test/path", (err, r) => { - expect(r[0]).toBe("2"); + assert.strictEqual(r[0], "2"); fs.purge([url.pathToFileURL("/test/path")]); fs.readdir("/test/path", (err, r) => { - expect(r[0]).toBe("2"); + assert.strictEqual(r[0], "2"); fs.purge(Buffer.from("/test/path")); fs.readdir("/test/path", (err, r) => { - expect(r[0]).toBe("3"); + assert.strictEqual(r[0], "3"); fs.purge([Buffer.from("/test/path")]); fs.readdir("/test/path", (err, r) => { - expect(r[0]).toBe("4"); + assert.strictEqual(r[0], "4"); done(); }); }); @@ -460,53 +463,53 @@ describe("cachedInputFileSystem CacheBackend", () => { }); }); - it("should not clear the entire cache when purging falsy keys 0 or ''", (done) => { + it("should not clear the entire cache when purging falsy keys 0 or ''", (t, done) => { // number 0 (a valid fd) and "" are valid cache keys per the signature; // passing them must not be confused with the no-arg "clear all" form. fs.stat("/test/path", (err, r1) => { r1.cached = true; fs.purge(0); fs.stat("/test/path", (err, r2) => { - expect(r2.cached).toBe(true); + assert.strictEqual(r2.cached, true); fs.purge(""); fs.stat("/test/path", (err, r3) => { // Empty string is a prefix of every key, so prefix-purge still clears // everything — but only because of the prefix semantics, not because // "" was misclassified as "no argument". - expect(r3.cached).toBeUndefined(); + assert.strictEqual(r3.cached, undefined); done(); }); }); }); }); - it("should not crash when options is null", (done) => { + it("should not crash when options is null", (t, done) => { fs.stat("/test/path", (err, r1) => { r1.cached = true; - expect(() => fs.purge("/test/path", null)).not.toThrow(); + assert.doesNotThrow(() => fs.purge("/test/path", null)); fs.stat("/test/path", (err, r2) => { // null is treated as "no options" — falls back to prefix purge - expect(r2.cached).toBeUndefined(); + assert.strictEqual(r2.cached, undefined); done(); }); }); }); - it("should purge exact entries only when exact: true", (done) => { + it("should purge exact entries only when exact: true", (t, done) => { fs.stat("/test/path", (err, r1) => { - expect(r1.path).toBe("/test/path"); + assert.strictEqual(r1.path, "/test/path"); r1.cached = true; fs.stat("/test/path/sub", (err, r2) => { - expect(r2.path).toBe("/test/path/sub"); + assert.strictEqual(r2.path, "/test/path/sub"); r2.cached = true; // Prefix purge with exact: true should NOT remove the child entry fs.purge("/test/path", { exact: true }); fs.stat("/test/path", (err, r3) => { // /test/path was the exact match, should be re-fetched (cached flag gone) - expect(r3.cached).toBeUndefined(); + assert.strictEqual(r3.cached, undefined); fs.stat("/test/path/sub", (err, r4) => { // /test/path/sub should still be cached - expect(r4.cached).toBe(true); + assert.strictEqual(r4.cached, true); done(); }); }); @@ -514,7 +517,7 @@ describe("cachedInputFileSystem CacheBackend", () => { }); }); - it("should purge an array exactly when exact: true", (done) => { + it("should purge an array exactly when exact: true", (t, done) => { fs.stat("/test/path", (err, r1) => { r1.cached = true; fs.stat("/test/path/sub", (err, r2) => { @@ -523,11 +526,11 @@ describe("cachedInputFileSystem CacheBackend", () => { r3.cached = true; fs.purge(["/test/path", "/other"], { exact: true }); fs.stat("/test/path", (err, r4) => { - expect(r4.cached).toBeUndefined(); + assert.strictEqual(r4.cached, undefined); fs.stat("/test/path/sub", (err, r5) => { - expect(r5.cached).toBe(true); + assert.strictEqual(r5.cached, true); fs.stat("/other", (err, r6) => { - expect(r6.cached).toBeUndefined(); + assert.strictEqual(r6.cached, undefined); done(); }); }); @@ -537,16 +540,16 @@ describe("cachedInputFileSystem CacheBackend", () => { }); }); - it("should still prefix-purge when exact is not set or false", (done) => { + it("should still prefix-purge when exact is not set or false", (t, done) => { fs.stat("/test/path", (err, r1) => { r1.cached = true; fs.stat("/test/path/sub", (err, r2) => { r2.cached = true; fs.purge("/test/path"); fs.stat("/test/path", (err, r3) => { - expect(r3.cached).toBeUndefined(); + assert.strictEqual(r3.cached, undefined); fs.stat("/test/path/sub", (err, r4) => { - expect(r4.cached).toBeUndefined(); + assert.strictEqual(r4.cached, undefined); done(); }); }); @@ -554,11 +557,11 @@ describe("cachedInputFileSystem CacheBackend", () => { }); }); - it("should purge readdir of the exact directory when exact: true", (done) => { + it("should purge readdir of the exact directory when exact: true", (t, done) => { fs.readdir("/test/path", (err, r1) => { - expect(r1[0]).toBe("0"); + assert.strictEqual(r1[0], "0"); fs.readdir("/test/path/sub", (err, r2) => { - expect(r2[0]).toBe("1"); + assert.strictEqual(r2[0], "1"); // Without exact, purging the dir path strips to dirname and prefix-purges // readdir for that parent — meaning readdir("/test/path") would NOT be evicted // by purge("/test/path/sub") in legacy mode (parent is "/test/path/", child of @@ -566,10 +569,10 @@ describe("cachedInputFileSystem CacheBackend", () => { // the caller is naming the directory itself, so it should evict directly. fs.purge("/test/path", { exact: true }); fs.readdir("/test/path", (err, r3) => { - expect(r3[0]).toBe("2"); + assert.strictEqual(r3[0], "2"); // sibling readdir cache should still be intact fs.readdir("/test/path/sub", (err, r4) => { - expect(r4[0]).toBe("1"); + assert.strictEqual(r4[0], "1"); done(); }); }); @@ -577,21 +580,21 @@ describe("cachedInputFileSystem CacheBackend", () => { }); }); - it("should accept Buffer with exact: true", (done) => { + it("should accept Buffer with exact: true", (t, done) => { fs.stat("/test/path", (err, r1) => { r1.cached = true; fs.stat("/test/path/sub", (err, r2) => { r2.cached = true; fs.purge(Buffer.from("/test/path"), { exact: true }); fs.stat("/test/path", (err, r3) => { - expect(r3.cached).toBeUndefined(); + assert.strictEqual(r3.cached, undefined); fs.stat("/test/path/sub", (err, r4) => { - expect(r4.cached).toBe(true); + assert.strictEqual(r4.cached, true); fs.purge([Buffer.from("/test/path/sub")], { exact: true, }); fs.stat("/test/path/sub", (err, r5) => { - expect(r5.cached).toBeUndefined(); + assert.strictEqual(r5.cached, undefined); done(); }); }); @@ -600,11 +603,11 @@ describe("cachedInputFileSystem CacheBackend", () => { }); }); - it("should not stack overflow when resolving in an async loop", (done) => { + it("should not stack overflow when resolving in an async loop", (t, done) => { let i = 10000; const next = () => { fs.stat(__dirname, (_err, result) => { - expect(result).toBeDefined(); + assert.notStrictEqual(result, undefined); if (i-- > 0) { next(); } else { @@ -652,17 +655,17 @@ describe("cachedInputFileSystem CacheBackend with Infinity duration", () => { }); it("should not crash the constructor with Infinity", () => { - expect(fs).toBeDefined(); + assert.notStrictEqual(fs, undefined); }); - it("should cache accesses forever", (done) => { + it("should cache accesses forever", (t, done) => { fs.stat("a", (err, result) => { result.a = true; fs.stat("a", (err, result) => { - expect(result.a).toBeDefined(); + assert.notStrictEqual(result.a, undefined); setTimeout(() => { fs.stat("a", (err, result) => { - expect(result.a).toBeDefined(); + assert.notStrictEqual(result.a, undefined); done(); }); }, 100); @@ -674,7 +677,7 @@ describe("cachedInputFileSystem CacheBackend with Infinity duration", () => { const result = fs.statSync("a"); result.a = true; const result2 = fs.statSync("a"); - expect(result2.a).toBeDefined(); + assert.notStrictEqual(result2.a, undefined); }); }); @@ -687,52 +690,52 @@ describe("cachedInputFileSystem CacheBackend and Node.JS filesystem", () => { const file = path.resolve(__dirname, "./fixtures/abc.txt"); - it("should work with string async", (done) => { + it("should work with string async", (t, done) => { fs.readFile(file, (err, r) => { if (err) { done(err); return; } - expect(r.toString()).toBe("abc"); + assert.strictEqual(r.toString(), "abc"); done(); }); }); it("should work with string sync", () => { const r = fs.readFileSync(file); - expect(r.toString()).toBe("abc"); + assert.strictEqual(r.toString(), "abc"); }); - it("should work with Buffer async", (done) => { + it("should work with Buffer async", (t, done) => { fs.readFile(Buffer.from(file), (err, r) => { if (err) { done(err); return; } - expect(r.toString()).toBe("abc"); + assert.strictEqual(r.toString(), "abc"); done(); }); }); it("should work with Buffer sync", () => { const r = fs.readFileSync(Buffer.from(file)); - expect(r.toString()).toBe("abc"); + assert.strictEqual(r.toString(), "abc"); }); - it("should work with URL async", (done) => { + it("should work with URL async", (t, done) => { fs.readFile(url.pathToFileURL(file), (err, r) => { if (err) { done(err); return; } - expect(r.toString()).toBe("abc"); + assert.strictEqual(r.toString(), "abc"); done(); }); }); it("should work with URL sync", () => { const r = fs.readFileSync(url.pathToFileURL(file)); - expect(r.toString()).toBe("abc"); + assert.strictEqual(r.toString(), "abc"); }); }); @@ -745,51 +748,51 @@ describe("cachedInputFileSystem OperationMergerBackend and Node.JS filesystem", const file = path.resolve(__dirname, "./fixtures/abc.txt"); - it("should work with string async", (done) => { + it("should work with string async", (t, done) => { fs.readFile(file, (err, r) => { if (err) { done(err); return; } - expect(r.toString()).toBe("abc"); + assert.strictEqual(r.toString(), "abc"); done(); }); }); it("should work with string sync", () => { const r = fs.readFileSync(file); - expect(r.toString()).toBe("abc"); + assert.strictEqual(r.toString(), "abc"); }); - it("should work with Buffer async", (done) => { + it("should work with Buffer async", (t, done) => { fs.readFile(Buffer.from(file), (err, r) => { if (err) { done(err); return; } - expect(r.toString()).toBe("abc"); + assert.strictEqual(r.toString(), "abc"); done(); }); }); it("should work with Buffer sync", () => { const r = fs.readFileSync(Buffer.from(file)); - expect(r.toString()).toBe("abc"); + assert.strictEqual(r.toString(), "abc"); }); - it("should work with URL async", (done) => { + it("should work with URL async", (t, done) => { fs.readFile(url.pathToFileURL(file), (err, r) => { if (err) { done(err); return; } - expect(r.toString()).toBe("abc"); + assert.strictEqual(r.toString(), "abc"); done(); }); }); it("should work with URL sync", () => { const r = fs.readFileSync(url.pathToFileURL(file)); - expect(r.toString()).toBe("abc"); + assert.strictEqual(r.toString(), "abc"); }); }); diff --git a/test/DescriptionFileUtils.test.js b/test/DescriptionFileUtils.test.js index dd71634d..79e4433e 100644 --- a/test/DescriptionFileUtils.test.js +++ b/test/DescriptionFileUtils.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { describe, it } = require("node:test"); + /* eslint-disable jsdoc/reject-any-type */ // Pure-function tests for helpers exported by DescriptionFileUtils, matching @@ -9,50 +12,54 @@ const DescriptionFileUtils = require("../lib/DescriptionFileUtils"); describe("DescriptionFileUtils.cdUp", () => { it("returns null for '/'", () => { - expect(DescriptionFileUtils.cdUp("/")).toBeNull(); + assert.strictEqual(DescriptionFileUtils.cdUp("/"), null); }); it("returns null for inputs without separators", () => { // cspell:ignore noslash - expect(DescriptionFileUtils.cdUp("noslash")).toBeNull(); + assert.strictEqual(DescriptionFileUtils.cdUp("noslash"), null); }); it("returns '/' when stripping the last directory", () => { - expect(DescriptionFileUtils.cdUp("/foo")).toBe("/"); + assert.strictEqual(DescriptionFileUtils.cdUp("/foo"), "/"); }); it("descends one level for posix paths", () => { - expect(DescriptionFileUtils.cdUp("/a/b/c")).toBe("/a/b"); + assert.strictEqual(DescriptionFileUtils.cdUp("/a/b/c"), "/a/b"); }); it("descends one level for windows paths", () => { - expect(DescriptionFileUtils.cdUp("C:\\a\\b\\c")).toBe("C:\\a\\b"); + assert.strictEqual(DescriptionFileUtils.cdUp("C:\\a\\b\\c"), "C:\\a\\b"); }); }); describe("DescriptionFileUtils.getField", () => { it("returns undefined for empty content", () => { - expect( + assert.strictEqual( DescriptionFileUtils.getField(/** @type {any} */ (null), "x"), - ).toBeUndefined(); + undefined, + ); }); it("walks an array field path", () => { const data = { a: { b: { c: 42 } } }; - expect( + assert.strictEqual( DescriptionFileUtils.getField(/** @type {any} */ (data), ["a", "b", "c"]), - ).toBe(42); + 42, + ); }); it("returns null when the path is broken mid-traversal", () => { - expect( + assert.strictEqual( DescriptionFileUtils.getField(/** @type {any} */ ({ a: 1 }), ["a", "b"]), - ).toBeNull(); + null, + ); }); it("returns the field value for a string field", () => { - expect( + assert.strictEqual( DescriptionFileUtils.getField(/** @type {any} */ ({ name: "x" }), "name"), - ).toBe("x"); + "x", + ); }); }); diff --git a/test/browserField.test.js b/test/browserField.test.js index 74411a00..0645d639 100644 --- a/test/browserField.test.js +++ b/test/browserField.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { beforeEach, describe, it } = require("node:test"); + const path = require("path"); const { ResolverFactory } = require("../"); @@ -30,65 +33,79 @@ describe("browserField", () => { }); }); - it("should ignore", (done) => { + it("should ignore", (t, done) => { resolver.resolve({}, p(), "./lib/ignore", {}, (err, result) => { if (err) throw err; - expect(result).toBe(false); + assert.strictEqual(result, false); done(); }); }); it("should ignore #2", () => { - expect(resolver.resolveSync({}, p(), "./lib/ignore")).toBe(false); - expect(resolver.resolveSync({}, p(), "./lib/ignore.js")).toBe(false); - expect(resolver.resolveSync({}, p("lib"), "./ignore")).toBe(false); - expect(resolver.resolveSync({}, p("lib"), "./ignore.js")).toBe(false); + assert.strictEqual(resolver.resolveSync({}, p(), "./lib/ignore"), false); + assert.strictEqual(resolver.resolveSync({}, p(), "./lib/ignore.js"), false); + assert.strictEqual(resolver.resolveSync({}, p("lib"), "./ignore"), false); + assert.strictEqual( + resolver.resolveSync({}, p("lib"), "./ignore.js"), + false, + ); }); it("should replace a file", () => { - expect(resolver.resolveSync({}, p(), "./lib/replaced")).toEqual( + assert.deepStrictEqual( + resolver.resolveSync({}, p(), "./lib/replaced"), p("lib", "browser.js"), ); - expect(resolver.resolveSync({}, p(), "./lib/replaced.js")).toEqual( + assert.deepStrictEqual( + resolver.resolveSync({}, p(), "./lib/replaced.js"), p("lib", "browser.js"), ); - expect(resolver.resolveSync({}, p("lib"), "./replaced")).toEqual( + assert.deepStrictEqual( + resolver.resolveSync({}, p("lib"), "./replaced"), p("lib", "browser.js"), ); - expect(resolver.resolveSync({}, p("lib"), "./replaced.js")).toEqual( + assert.deepStrictEqual( + resolver.resolveSync({}, p("lib"), "./replaced.js"), p("lib", "browser.js"), ); }); it("should replace a module with a file", () => { - expect(resolver.resolveSync({}, p(), "module-a")).toEqual( + assert.deepStrictEqual( + resolver.resolveSync({}, p(), "module-a"), p("browser", "module-a.js"), ); - expect(resolver.resolveSync({}, p("lib"), "module-a")).toEqual( + assert.deepStrictEqual( + resolver.resolveSync({}, p("lib"), "module-a"), p("browser", "module-a.js"), ); }); it("should replace a module with a module", () => { - expect(resolver.resolveSync({}, p(), "module-b")).toEqual( + assert.deepStrictEqual( + resolver.resolveSync({}, p(), "module-b"), p("node_modules", "module-c.js"), ); - expect(resolver.resolveSync({}, p("lib"), "module-b")).toEqual( + assert.deepStrictEqual( + resolver.resolveSync({}, p("lib"), "module-b"), p("node_modules", "module-c.js"), ); }); it("should resolve in nested property", () => { - expect(resolver.resolveSync({}, p(), "./lib/main1.js")).toEqual( + assert.deepStrictEqual( + resolver.resolveSync({}, p(), "./lib/main1.js"), p("lib", "main.js"), ); - expect(resolver.resolveSync({}, p(), "./lib/main2.js")).toEqual( + assert.deepStrictEqual( + resolver.resolveSync({}, p(), "./lib/main2.js"), p("lib", "browser.js"), ); }); it("should check only alias field properties", () => { - expect(resolver.resolveSync({}, p(), "./toString")).toEqual( + assert.deepStrictEqual( + resolver.resolveSync({}, p(), "./toString"), p("lib", "toString.js"), ); }); @@ -99,7 +116,7 @@ describe("browserField", () => { "alias-field-extras", ); - it("falls through when the browser alias value equals the inner request", (done) => { + it("falls through when the browser alias value equals the inner request", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], aliasFields: ["browser"], @@ -112,13 +129,16 @@ describe("browserField", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.join(aliasFieldExtras, "self-alias.js")); + assert.deepStrictEqual( + result, + path.join(aliasFieldExtras, "self-alias.js"), + ); done(); }, ); }); - it("falls through when a module alias value equals the inner request", (done) => { + it("falls through when a module alias value equals the inner request", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], aliasFields: ["browser"], @@ -126,26 +146,27 @@ describe("browserField", () => { }); resolver.resolve({}, aliasFieldExtras, "pkg", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(aliasFieldExtras, "node_modules/pkg/index.js"), ); done(); }); }); - it("propagates a resolution error when the browser alias target cannot be found", (done) => { + it("propagates a resolution error when the browser alias target cannot be found", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], aliasFields: ["browser"], fileSystem: fs, }); resolver.resolve({}, aliasFieldExtras, "./points-nowhere", {}, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("leaves resolution untouched when the configured field does not exist", (done) => { + it("leaves resolution untouched when the configured field does not exist", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], aliasFields: ["nonexistentField"], @@ -158,13 +179,13 @@ describe("browserField", () => { {}, (err) => { // Either resolves or errors — we just want to exercise the path. - expect(err === null || err instanceof Error).toBe(true); + assert.strictEqual(err === null || err instanceof Error, true); done(); }, ); }); - it("short-circuits when a browser field marks a path as false (directory ignore)", (done) => { + it("short-circuits when a browser field marks a path as false (directory ignore)", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], aliasFields: ["browser"], @@ -177,7 +198,7 @@ describe("browserField", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toBe(false); + assert.strictEqual(result, false); done(); }, ); diff --git a/test/dependencies.test.js b/test/dependencies.test.js index 086079b5..c0b290fc 100644 --- a/test/dependencies.test.js +++ b/test/dependencies.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { beforeEach, describe, it } = require("node:test"); + const { Volume } = require("memfs"); const resolve = require("../"); @@ -84,7 +87,7 @@ describe("dependencies", () => { for (const testCase of testCases) { // eslint-disable-next-line no-loop-func - it(`should report correct dependencies for ${testCase.name}`, (done) => { + it(`should report correct dependencies for ${testCase.name}`, (t, done) => { const fileDependencies = new Set(); const missingDependencies = new Set(); resolver( @@ -97,11 +100,13 @@ describe("dependencies", () => { (err, result) => { if (err) return done(err); - expect(result).toEqual(testCase.result); - expect([...fileDependencies].sort()).toEqual( + assert.deepStrictEqual(result, testCase.result); + assert.deepStrictEqual( + [...fileDependencies].sort(), testCase.fileDependencies.sort(), ); - expect([...missingDependencies].sort()).toEqual( + assert.deepStrictEqual( + [...missingDependencies].sort(), testCase.missingDependencies.sort(), ); done(); diff --git a/test/dos-device-paths.test.js b/test/dos-device-paths.test.js index 771f0b2d..c9bbd37e 100644 --- a/test/dos-device-paths.test.js +++ b/test/dos-device-paths.test.js @@ -1,11 +1,11 @@ "use strict"; -// eslint's jest plugin static-analyzes `describe` calls and doesn't recognize -// `describeWin` below as one — disable `require-top-level-describe` for the -// whole file rather than scatter per-test ignore comments. -/* eslint-disable jest/require-top-level-describe, jsdoc/reject-any-type */ - +const assert = require("assert"); const fs = require("fs"); +const { describe, test } = require("node:test"); + +/* eslint-disable jsdoc/reject-any-type */ + const path = require("path"); const { ResolverFactory } = require("../"); @@ -35,26 +35,30 @@ describeWin("DOS device path resolution (Windows)", () => { }); test("resolves a relative request against a \\\\?\\ context", async () => { - await expect(resolver.resolvePromise({}, dosFixtures, "./a")).resolves.toBe( + assert.strictEqual( + await resolver.resolvePromise({}, dosFixtures, "./a"), path.join(dosFixtures, "a.js"), ); }); test("resolves a relative request to a subdirectory's index.js", async () => { - await expect( - resolver.resolvePromise({}, dosFixtures, "./foo"), - ).resolves.toBe(path.join(dosFixtures, "foo", "index.js")); + assert.strictEqual( + await resolver.resolvePromise({}, dosFixtures, "./foo"), + path.join(dosFixtures, "foo", "index.js"), + ); }); test("resolves '.' to index.js in a \\\\?\\ context", async () => { - await expect( - resolver.resolvePromise({}, path.join(dosFixtures, "foo"), "."), - ).resolves.toBe(path.join(dosFixtures, "foo", "index.js")); + assert.strictEqual( + await resolver.resolvePromise({}, path.join(dosFixtures, "foo"), "."), + path.join(dosFixtures, "foo", "index.js"), + ); }); test("resolves an absolute \\\\?\\ request regardless of context", async () => { const request = path.join(dosFixtures, "a"); - await expect(resolver.resolvePromise({}, fixtures, request)).resolves.toBe( + assert.strictEqual( + await resolver.resolvePromise({}, fixtures, request), path.join(dosFixtures, "a.js"), ); }); @@ -62,7 +66,8 @@ describeWin("DOS device path resolution (Windows)", () => { test("resolves through the \\\\.\\ device namespace", async () => { // The `\\.\` walk used to infinite-loop in `cdUp` once it reached // the bare `\` root — this test proves it terminates. - await expect(resolver.resolvePromise({}, dotFixtures, "./a")).resolves.toBe( + assert.strictEqual( + await resolver.resolvePromise({}, dotFixtures, "./a"), path.join(dotFixtures, "a.js"), ); }); @@ -71,25 +76,28 @@ describeWin("DOS device path resolution (Windows)", () => { // The literal `?` inside `\\?\` must not be mistaken for a query // separator — the real query is the one trailing the path. const request = `${path.join(dosFixtures, "a")}?foo=bar`; - await expect(resolver.resolvePromise({}, fixtures, request)).resolves.toBe( + assert.strictEqual( + await resolver.resolvePromise({}, fixtures, request), `${path.join(dosFixtures, "a.js")}?foo=bar`, ); }); test("preserves a fragment on a \\\\?\\ request", async () => { const request = `${path.join(dosFixtures, "a")}#frag`; - await expect(resolver.resolvePromise({}, fixtures, request)).resolves.toBe( + assert.strictEqual( + await resolver.resolvePromise({}, fixtures, request), `${path.join(dosFixtures, "a.js")}#frag`, ); }); test("rejects a missing file under a DOS device context", async () => { - await expect( + await assert.rejects( resolver.resolvePromise({}, dosFixtures, "./does-not-exist"), - ).rejects.toThrow(/Can't resolve/); + /Can't resolve/, + ); }); - test("locates the nearest package.json when resolving through \\\\?\\", (done) => { + test("locates the nearest package.json when resolving through \\\\?\\", (t, done) => { // Uses the callback form because the `request` (third callback arg) // carries `descriptionFilePath`, which the promise form drops. resolver.resolve( @@ -99,10 +107,11 @@ describeWin("DOS device path resolution (Windows)", () => { {}, (err, result, request) => { if (err) return done(err); - expect(result).toBe(path.join(dosFixtures, "foo", "index.js")); + assert.strictEqual(result, path.join(dosFixtures, "foo", "index.js")); // The description-file walk must terminate — if `cdUp` didn't // treat bare `\` as a root, this callback would never fire. - expect(/** @type {any} */ (request).descriptionFilePath).toBe( + assert.strictEqual( + /** @type {any} */ (request).descriptionFilePath, path.join(dosFixtures, "foo", "package.json"), ); done(); diff --git a/test/entrypoints.test.js b/test/entrypoints.test.js index 7ccd682c..c8ec15ff 100644 --- a/test/entrypoints.test.js +++ b/test/entrypoints.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { describe, it } = require("node:test"); + const { processExportsField, processImportsField, @@ -8,21 +11,24 @@ const { describe("util/entrypoints processExportsField", () => { it("throws when the request ends with '/' (file required)", () => { const processor = processExportsField({ ".": "./index.js" }); - expect(() => processor("./", new Set(["node"]))).toThrow( + assert.throws( + () => processor("./", new Set(["node"])), /Only requesting file allowed/, ); }); it("throws when the request does not start with '.'", () => { const processor = processExportsField({ ".": "./index.js" }); - expect(() => processor("foo", new Set(["node"]))).toThrow( + assert.throws( + () => processor("foo", new Set(["node"])), /should be relative path and start with "\."/, ); }); it("throws when the request length>1 but second char is not '/'", () => { const processor = processExportsField({ ".": "./index.js" }); - expect(() => processor("..foo", new Set(["node"]))).toThrow( + assert.throws( + () => processor("..foo", new Set(["node"])), /should be relative path and start with "\.\/"/, ); }); @@ -30,13 +36,13 @@ describe("util/entrypoints processExportsField", () => { it("returns an empty array for an unmatched export key", () => { const processor = processExportsField({ ".": "./main.js" }); const [paths] = processor("./not-listed", new Set(["node"])); - expect(paths).toEqual([]); + assert.deepStrictEqual(paths, []); }); it("matches a direct mapping", () => { const processor = processExportsField({ "./a": "./main.js" }); const [paths] = processor("./a", new Set(["node"])); - expect(paths).toEqual(["./main.js"]); + assert.deepStrictEqual(paths, ["./main.js"]); }); it("orders sibling pattern keys consistently", () => { @@ -46,32 +52,35 @@ describe("util/entrypoints processExportsField", () => { "./shortest": "./s.js", }); const [paths1] = processor("./shortest", new Set(["node"])); - expect(paths1).toEqual(["./s.js"]); + assert.deepStrictEqual(paths1, ["./s.js"]); const [paths2] = processor("./a/foo", new Set(["node"])); - expect(paths2).toEqual(["./a/foo"]); + assert.deepStrictEqual(paths2, ["./a/foo"]); const [paths3] = processor("./longer/foo", new Set(["node"])); - expect(paths3).toEqual(["./l/foo"]); + assert.deepStrictEqual(paths3, ["./l/foo"]); }); }); describe("util/entrypoints processImportsField", () => { it("throws when the request does not start with '#'", () => { const processor = processImportsField({ "#a": "./main.js" }); - expect(() => processor("foo", new Set(["node"]))).toThrow( + assert.throws( + () => processor("foo", new Set(["node"])), /should start with "#"/, ); }); it("throws when request is just '#' (too short)", () => { const processor = processImportsField({ "#a": "./main.js" }); - expect(() => processor("#", new Set(["node"]))).toThrow( + assert.throws( + () => processor("#", new Set(["node"])), /at least 2 characters/, ); }); it("throws when import request ends with '/'", () => { const processor = processImportsField({ "#a": "./main.js" }); - expect(() => processor("#a/", new Set(["node"]))).toThrow( + assert.throws( + () => processor("#a/", new Set(["node"])), /Only requesting file allowed/, ); }); @@ -79,12 +88,12 @@ describe("util/entrypoints processImportsField", () => { it("returns an empty array for an unmatched import key", () => { const processor = processImportsField({ "#a": "./main.js" }); const [paths] = processor("#x", new Set(["node"])); - expect(paths).toEqual([]); + assert.deepStrictEqual(paths, []); }); it("matches a direct import key", () => { const processor = processImportsField({ "#a": "./main.js" }); const [paths] = processor("#a", new Set(["node"])); - expect(paths).toEqual(["./main.js"]); + assert.deepStrictEqual(paths, ["./main.js"]); }); }); diff --git a/test/extension-alias.test.js b/test/extension-alias.test.js index 2e42de13..ff42884e 100644 --- a/test/extension-alias.test.js +++ b/test/extension-alias.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const CachedInputFileSystem = require("../lib/CachedInputFileSystem"); @@ -22,46 +25,49 @@ describe("extension-alias", () => { }, }); - it("should alias fully specified file", (done) => { + it("should alias fully specified file", (t, done) => { resolver.resolve({}, fixture, "./index.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "index.ts")); + assert.deepStrictEqual(result, path.resolve(fixture, "index.ts")); done(); }); }); - it("should alias fully specified file when there are two alternatives", (done) => { + it("should alias fully specified file when there are two alternatives", (t, done) => { resolver.resolve({}, fixture, "./dir/index.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "dir", "index.ts")); + assert.deepStrictEqual(result, path.resolve(fixture, "dir", "index.ts")); done(); }); }); - it("should also allow the second alternative", (done) => { + it("should also allow the second alternative", (t, done) => { resolver.resolve({}, fixture, "./dir2/index.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "dir2", "index.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "dir2", "index.js")); done(); }); }); - it("should support alias option without an array", (done) => { + it("should support alias option without an array", (t, done) => { resolver.resolve({}, fixture, "./dir2/index.mjs", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "dir2", "index.mts")); + assert.deepStrictEqual( + result, + path.resolve(fixture, "dir2", "index.mts"), + ); done(); }); }); - it("should not allow to fallback to the original extension or add extensions", (done) => { + it("should not allow to fallback to the original extension or add extensions", (t, done) => { resolver.resolve({}, fixture, "./index.mjs", {}, (err, _result) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should try multiple extension aliases in order and logs each failure", (done) => { + it("should try multiple extension aliases in order and logs each failure", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensionAlias: { ".js": [".missing1", ".missing2", ".js"] }, @@ -74,12 +80,14 @@ describe("extension-alias", () => { { log: (m) => log.push(m) }, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(path.join(__dirname, "fixtures"), "a.js"), ); - expect( + assert.strictEqual( log.some((l) => l.includes("Failed to alias from extension alias")), - ).toBe(true); + true, + ); done(); }, ); @@ -92,32 +100,32 @@ describe("extension-alias", () => { "imports-field-extension-alias", ); - it("should apply extension alias to paths resolved via imports field", (done) => { + it("should apply extension alias to paths resolved via imports field", (t, done) => { resolver.resolve({}, importsFixture, "#foo", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(importsFixture, "foo.ts")); + assert.deepStrictEqual(result, path.resolve(importsFixture, "foo.ts")); done(); }); }); - it("should fall back to later alternatives when first alias does not exist", (done) => { + it("should fall back to later alternatives when first alias does not exist", (t, done) => { resolver.resolve({}, importsFixture, "#bar", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(importsFixture, "bar.js")); + assert.deepStrictEqual(result, path.resolve(importsFixture, "bar.js")); done(); }); }); - it("should support single-string alias (no array) via imports field", (done) => { + it("should support single-string alias (no array) via imports field", (t, done) => { resolver.resolve({}, importsFixture, "#only", {}, (err, _result) => { // ".mjs": ".mts" is a strict mapping with no fallback, so this // should error because only.mts does not exist - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should not fall back to the original extension via imports field (strict alias)", (done) => { + it("should not fall back to the original extension via imports field (strict alias)", (t, done) => { const strictResolver = ResolverFactory.createResolver({ extensions: [".js"], fileSystem: nodeFileSystem, @@ -125,7 +133,7 @@ describe("extension-alias", () => { }); strictResolver.resolve({}, importsFixture, "#bar", {}, (err, _result) => { // bar.ts does not exist and we explicitly disallow fallback - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); @@ -138,7 +146,7 @@ describe("extension-alias", () => { "exports-field-extension-alias-opt-in", ); - it("should not apply extension alias to exports-field targets by default (Node.js-aligned)", (done) => { + it("should not apply extension alias to exports-field targets by default (Node.js-aligned)", (t, done) => { const defaultResolver = ResolverFactory.createResolver({ extensions: [".js"], extensionAlias: { ".js": [".ts", ".js"] }, @@ -153,7 +161,8 @@ describe("extension-alias", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(exportsFixture, "./node_modules/pkg/dist/string.js"), ); done(); @@ -161,7 +170,7 @@ describe("extension-alias", () => { ); }); - it("should prefer the TS source over the exports-declared JS target when the option is enabled", (done) => { + it("should prefer the TS source over the exports-declared JS target when the option is enabled", (t, done) => { const tsResolver = ResolverFactory.createResolver({ extensions: [".js"], extensionAlias: { ".js": [".ts", ".js"] }, @@ -177,7 +186,8 @@ describe("extension-alias", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(exportsFixture, "./node_modules/pkg/dist/string.ts"), ); done(); @@ -196,18 +206,24 @@ describe("extension-alias", () => { }, }); - it("directory", (done) => { + it("directory", (t, done) => { resolver.resolve({}, fixture, "./dir2", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "dir2", "index.js")); + assert.deepStrictEqual( + result, + path.resolve(fixture, "dir2", "index.js"), + ); done(); }); }); - it("file", (done) => { + it("file", (t, done) => { resolver.resolve({}, fixture, "./dir2/index", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "dir2", "index.js")); + assert.deepStrictEqual( + result, + path.resolve(fixture, "dir2", "index.js"), + ); done(); }); }); diff --git a/test/extensions.test.js b/test/extensions.test.js index 4d6fd705..8df506da 100644 --- a/test/extensions.test.js +++ b/test/extensions.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); @@ -25,81 +28,85 @@ const resolver3 = ResolverFactory.createResolver({ const fixture = path.resolve(__dirname, "fixtures", "extensions"); describe("extensions", () => { - it("should resolve according to order of provided extensions", (done) => { + it("should resolve according to order of provided extensions", (t, done) => { resolver.resolve({}, fixture, "./foo", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture, "foo.ts")); + assert.deepStrictEqual(result, path.resolve(fixture, "foo.ts")); done(); }); }); - it("should resolve according to order of provided extensions (dir index)", (done) => { + it("should resolve according to order of provided extensions (dir index)", (t, done) => { resolver.resolve({}, fixture, "./dir", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture, "dir/index.ts")); + assert.deepStrictEqual(result, path.resolve(fixture, "dir/index.ts")); done(); }); }); - it("should resolve according to main field in module root", (done) => { + it("should resolve according to main field in module root", (t, done) => { resolver.resolve({}, fixture, ".", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture, "index.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "index.js")); done(); }); }); - it("should resolve single file module before directory", (done) => { + it("should resolve single file module before directory", (t, done) => { resolver.resolve({}, fixture, "module", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture, "node_modules/module.js")); + assert.deepStrictEqual( + result, + path.resolve(fixture, "node_modules/module.js"), + ); done(); }); }); - it("should resolve trailing slash directory before single file", (done) => { + it("should resolve trailing slash directory before single file", (t, done) => { resolver.resolve({}, fixture, "module/", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/module/index.ts"), ); done(); }); }); - it("should not resolve to file when request has a trailing slash (relative)", (done) => { + it("should not resolve to file when request has a trailing slash (relative)", (t, done) => { resolver.resolve({}, fixture, "./foo.js/", {}, (err, _result) => { if (!err) return done(new Error("No error")); - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should not resolve to file when request has a trailing slash (module)", (done) => { + it("should not resolve to file when request has a trailing slash (module)", (t, done) => { resolver.resolve({}, fixture, "module.js/", {}, (err, _result) => { if (!err) return done(new Error("No error")); - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should default enforceExtension to true when extensions includes an empty string", (done) => { + it("should default enforceExtension to true when extensions includes an empty string", (t, done) => { const missingDependencies = new Set(); resolver2.resolve({}, fixture, "./foo", { missingDependencies }, () => { - expect(missingDependencies).not.toContain(path.resolve(fixture, "foo")); + assert.ok(!missingDependencies.has(path.resolve(fixture, "foo"))); done(); }); }); - it("should respect enforceExtension when extensions includes an empty string", (done) => { + it("should respect enforceExtension when extensions includes an empty string", (t, done) => { const missingDependencies = new Set(); resolver3.resolve({}, fixture, "./foo", { missingDependencies }, () => { - expect(missingDependencies).toContain(path.resolve(fixture, "foo")); + assert.ok(missingDependencies.has(path.resolve(fixture, "foo"))); done(); }); }); diff --git a/test/forEachBail.test.js b/test/forEachBail.test.js index 8a9ce90b..629fcf03 100644 --- a/test/forEachBail.test.js +++ b/test/forEachBail.test.js @@ -1,9 +1,12 @@ "use strict"; +const assert = require("assert"); +const { describe, it } = require("node:test"); + const { forEachBail } = require("../"); describe("forEachBail", () => { - it("should iterate correctly", (done) => { + it("should iterate correctly", (t, done) => { const log = []; forEachBail( [0, 1, 2, 3, 4, 5, 6], @@ -17,48 +20,48 @@ describe("forEachBail", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("Should have result")); - expect(result).toEqual({ path: "test" }); - expect(log).toEqual([0, 1, 2, 3, 4, 5]); + assert.deepStrictEqual(result, { path: "test" }); + assert.deepStrictEqual(log, [0, 1, 2, 3, 4, 5]); done(); }, ); }); - it("should handle empty array", (done) => { + it("should handle empty array", (t, done) => { forEachBail( [], () => { done(new Error("Should not be called")); }, (err, result) => { - expect(err).toBeUndefined(); - expect(result).toBeUndefined(); + assert.strictEqual(err, undefined); + assert.strictEqual(result, undefined); done(); }, ); }); - it("should sync finish with undefined", (done) => { + it("should sync finish with undefined", (t, done) => { forEachBail( [2, 3, 4, 5, 6], (value, callback) => callback(), (err, result) => { - expect(err).toBeUndefined(); - expect(result).toBeUndefined(); + assert.strictEqual(err, undefined); + assert.strictEqual(result, undefined); done(); }, ); }); - it("should async finish with undefined", (done) => { + it("should async finish with undefined", (t, done) => { forEachBail( [2, 3, 4, 5, 6], (value, callback) => { process.nextTick(callback); }, (err, result) => { - expect(err).toBeUndefined(); - expect(result).toBeUndefined(); + assert.strictEqual(err, undefined); + assert.strictEqual(result, undefined); done(); }, ); diff --git a/test/fullSpecified.test.js b/test/fullSpecified.test.js index c8c666b3..dfdd7c1e 100644 --- a/test/fullSpecified.test.js +++ b/test/fullSpecified.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { describe, it } = require("node:test"); + const { Volume } = require("memfs"); const { ResolverFactory } = require("../"); @@ -80,9 +83,9 @@ describe("fullSpecified", () => { const request = failingResolves[key]; it(`should fail resolving ${key}`, () => { - expect(() => { + assert.throws(() => { resolver.resolveSync({}, "/a", request); - }).toThrow(/Can't resolve/); + }, /Can't resolve/); }); } @@ -91,7 +94,10 @@ describe("fullSpecified", () => { it(`should resolve ${key} successfully`, () => { try { - expect(resolver.resolveSync({}, "/a", request)).toEqual(expected); + assert.deepStrictEqual( + resolver.resolveSync({}, "/a", request), + expected, + ); } catch (err) { err.message += `\n${err.details}`; throw err; @@ -121,7 +127,8 @@ describe("fullSpecified", () => { it(`should resolve ${key} successfully to an context`, () => { try { - expect(contextResolver.resolveSync({}, "/a", request)).toEqual( + assert.deepStrictEqual( + contextResolver.resolveSync({}, "/a", request), expected, ); } catch (err) { diff --git a/test/getPaths.test.js b/test/getPaths.test.js index 7b5f5c8c..10e6e61a 100644 --- a/test/getPaths.test.js +++ b/test/getPaths.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { describe, it } = require("node:test"); + const getPaths = require("../lib/getPaths"); const { getPathsCached } = require("../lib/getPaths"); @@ -21,8 +24,8 @@ describe("get paths", () => { for (const case_ of cases) { it(case_[0], () => { const { paths, segments } = getPaths(case_[0]); - expect(paths).toEqual(case_[1].paths); - expect(segments).toEqual(case_[1].segments); + assert.deepStrictEqual(paths, case_[1].paths); + assert.deepStrictEqual(segments, case_[1].segments); }); } }); @@ -33,15 +36,19 @@ describe("getPathsCached", () => { const a = getPathsCached(fs, "/a/b/c"); const b = getPathsCached(fs, "/a/b/c"); // Same cached object — paths/segments arrays are shared. - expect(a).toBe(b); - expect(a.paths).toBe(b.paths); - expect(a.segments).toBe(b.segments); + assert.strictEqual(a, b); + assert.strictEqual(a.paths, b.paths); + assert.strictEqual(a.segments, b.segments); }); it("still returns correct values after cache miss", () => { const fs = /** @type {import("../lib/Resolver").FileSystem} */ ({}); - expect(getPathsCached(fs, "/a/b").paths).toEqual(["/a/b", "/a", "/"]); - expect(getPathsCached(fs, "/x/y/z").paths).toEqual([ + assert.deepStrictEqual(getPathsCached(fs, "/a/b").paths, [ + "/a/b", + "/a", + "/", + ]); + assert.deepStrictEqual(getPathsCached(fs, "/x/y/z").paths, [ "/x/y/z", "/x/y", "/x", @@ -53,9 +60,9 @@ describe("getPathsCached", () => { const fs = /** @type {import("../lib/Resolver").FileSystem} */ ({}); const a = getPathsCached(fs, "/"); const b = getPathsCached(fs, "/"); - expect(a).toBe(b); - expect(a.paths).toEqual(["/"]); - expect(a.segments).toEqual([""]); + assert.strictEqual(a, b); + assert.deepStrictEqual(a.paths, ["/"]); + assert.deepStrictEqual(a.segments, [""]); }); it("keeps caches independent across filesystems", () => { @@ -64,7 +71,7 @@ describe("getPathsCached", () => { const first = getPathsCached(fsA, "/p/q"); const second = getPathsCached(fsB, "/p/q"); // Values equal but not the same object — separate cache namespaces. - expect(first).not.toBe(second); - expect(first.paths).toEqual(second.paths); + assert.notStrictEqual(first, second); + assert.deepStrictEqual(first.paths, second.paths); }); }); diff --git a/test/identifier.test.js b/test/identifier.test.js index 5e730206..031dd231 100644 --- a/test/identifier.test.js +++ b/test/identifier.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { describe, it } = require("node:test"); + const { parseIdentifier } = require("../lib/util/identifier"); /** @@ -17,7 +20,7 @@ describe("identifier", () => { if (!parsed) throw new Error("should not be null"); - expect(parsed).toEqual(expected); + assert.deepStrictEqual(parsed, expected); }); } } @@ -190,11 +193,11 @@ describe("identifier", () => { describe("parse identifier. malformed inputs", () => { it("returns null for a single null-byte input (regex no-match)", () => { - expect(parseIdentifier("\0")).toBeNull(); + assert.strictEqual(parseIdentifier("\0"), null); }); it("returns null for an empty input", () => { - expect(parseIdentifier("")).toBeNull(); + assert.strictEqual(parseIdentifier(""), null); }); }); }); diff --git a/test/incorrect-description-file.test.js b/test/incorrect-description-file.test.js index a30a3b0c..86b3471d 100644 --- a/test/incorrect-description-file.test.js +++ b/test/incorrect-description-file.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); @@ -21,7 +24,7 @@ describe("incorrect description file", () => { fileSystem: nodeFileSystem, }); - it("should not resolve main in incorrect description file #1", (done) => { + it("should not resolve main in incorrect description file #1", (t, done) => { let called = false; const ctx = { fileDependencies: new Set(), @@ -31,14 +34,17 @@ describe("incorrect description file", () => { }; resolver.resolve({}, p("pack1"), ".", ctx, (err, _result) => { if (!err) return done(new Error("No error")); - expect(err).toBeInstanceOf(Error); - expect(ctx.fileDependencies.has(p("pack1", "package.json"))).toBe(true); - expect(called).toBe(true); + assert.ok(err instanceof Error); + assert.strictEqual( + ctx.fileDependencies.has(p("pack1", "package.json")), + true, + ); + assert.strictEqual(called, true); done(); }); }); - it("should not resolve main in incorrect description file #2", (done) => { + it("should not resolve main in incorrect description file #2", (t, done) => { let called = false; const ctx = { fileDependencies: new Set(), @@ -48,16 +54,19 @@ describe("incorrect description file", () => { }; resolver.resolve({}, p("pack2"), ".", ctx, (err, _result) => { if (!err) return done(new Error("No error")); - expect(ctx.fileDependencies.has(p("pack2", "package.json"))).toBe(true); - expect(called).toBe(true); + assert.strictEqual( + ctx.fileDependencies.has(p("pack2", "package.json")), + true, + ); + assert.strictEqual(called, true); done(); }); }); - it("should not resolve main in incorrect description file #3", (done) => { + it("should not resolve main in incorrect description file #3", (t, done) => { resolver.resolve({}, p("pack2"), ".", {}, (err, _result) => { if (!err) return done(new Error("No error")); - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); diff --git a/test/log-info.test.js b/test/log-info.test.js index 567d19ca..5952c37f 100644 --- a/test/log-info.test.js +++ b/test/log-info.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); const LogInfoPlugin = require("../lib/LogInfoPlugin"); @@ -9,7 +12,7 @@ const fixtures = path.join(__dirname, "fixtures"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); describe("LogInfoPlugin", () => { - it("logs resolution steps when a log function is provided", (done) => { + it("logs resolution steps when a log function is provided", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -24,14 +27,17 @@ describe("LogInfoPlugin", () => { { log: (m) => log.push(m) }, (err) => { if (err) return done(err); - expect(log.length).toBeGreaterThan(0); - expect(log.some((l) => l.includes("[resolve]"))).toBe(true); + assert.ok(log.length > 0); + assert.strictEqual( + log.some((l) => l.includes("[resolve]")), + true, + ); done(); }, ); }); - it("logs query and fragment when present in the request", (done) => { + it("logs query and fragment when present in the request", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -46,18 +52,20 @@ describe("LogInfoPlugin", () => { { log: (m) => log.push(m) }, (err) => { if (err) return done(err); - expect( + assert.strictEqual( log.some((l) => l.includes("Resolving request query: ?query")), - ).toBe(true); - expect( + true, + ); + assert.strictEqual( log.some((l) => l.includes("Resolving request fragment: #frag")), - ).toBe(true); + true, + ); done(); }, ); }); - it("logs a module request marker when resolving a module request", (done) => { + it("logs a module request marker when resolving a module request", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, plugins: [new LogInfoPlugin("normal-resolve")], @@ -71,23 +79,26 @@ describe("LogInfoPlugin", () => { { log: (m) => log.push(m) }, (err) => { if (err) return done(err); - expect( + assert.strictEqual( log.some((l) => l.includes("Request is an module request.")), - ).toBe(true); - expect(log.some((l) => l.includes("Has description data from"))).toBe( true, ); - expect( + assert.strictEqual( + log.some((l) => l.includes("Has description data from")), + true, + ); + assert.strictEqual( log.some((l) => l.includes("Relative path from description file is:"), ), - ).toBe(true); + true, + ); done(); }, ); }); - it("logs a directory marker when resolving a directory request", (done) => { + it("logs a directory marker when resolving a directory request", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, plugins: [new LogInfoPlugin("normal-resolve")], @@ -101,15 +112,16 @@ describe("LogInfoPlugin", () => { { log: (m) => log.push(m) }, (err) => { if (err) return done(err); - expect( + assert.strictEqual( log.some((l) => l.includes("Request is a directory request.")), - ).toBe(true); + true, + ); done(); }, ); }); - it("does not log when no log function is provided", (done) => { + it("does not log when no log function is provided", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -119,7 +131,7 @@ describe("LogInfoPlugin", () => { // This resolve should succeed without errors even though no log is provided. resolver.resolve({}, fixtures, "./a.js", {}, (err, result) => { if (err) return done(err); - expect(result).toBeTruthy(); + assert.ok(result); done(); }); }); diff --git a/test/main-fields.test.js b/test/main-fields.test.js index f3404b7d..e748f0c2 100644 --- a/test/main-fields.test.js +++ b/test/main-fields.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const { CachedInputFileSystem, ResolverFactory } = require("../"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); @@ -11,7 +14,7 @@ describe("mainFields normalization", () => { fileSystem: nodeFileSystem, mainFields: ["main"], }); - expect(r.options.mainFields).toEqual([ + assert.deepStrictEqual(r.options.mainFields, [ { name: ["main"], forceRelative: true }, ]); }); @@ -21,7 +24,7 @@ describe("mainFields normalization", () => { fileSystem: nodeFileSystem, mainFields: [["browser", "main"]], }); - expect(r.options.mainFields).toEqual([ + assert.deepStrictEqual(r.options.mainFields, [ { name: ["browser", "main"], forceRelative: true }, ]); }); @@ -31,7 +34,7 @@ describe("mainFields normalization", () => { fileSystem: nodeFileSystem, mainFields: [{ name: "main", forceRelative: false }], }); - expect(r.options.mainFields).toEqual([ + assert.deepStrictEqual(r.options.mainFields, [ { name: ["main"], forceRelative: false }, ]); }); @@ -41,7 +44,7 @@ describe("mainFields normalization", () => { fileSystem: nodeFileSystem, mainFields: [{ name: ["a", "b"], forceRelative: true }], }); - expect(r.options.mainFields).toEqual([ + assert.deepStrictEqual(r.options.mainFields, [ { name: ["a", "b"], forceRelative: true }, ]); }); diff --git a/test/missing.test.js b/test/missing.test.js index d185ea5a..bcbb2296 100644 --- a/test/missing.test.js +++ b/test/missing.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { describe, it } = require("node:test"); + const path = require("path"); const resolve = require("../"); @@ -72,22 +75,23 @@ describe("missing", () => { ], ]; for (const testCase of testCases) { - it(`should tell about missing file when trying to resolve ${testCase[1]}`, (done) => { + it(`should tell about missing file when trying to resolve ${testCase[1]}`, (t, done) => { const missingDependencies = new Set(); /** * @param {Error | null} _err err * @param {string} _filename _filename */ function callback(_err, _filename) { - expect([...missingDependencies].sort()).toEqual( - expect.arrayContaining(testCase[2].sort()), - ); + const actual = [...missingDependencies].sort(); + for (const dep of testCase[2]) { + assert.ok(actual.includes(dep)); + } done(); } resolve(testCase[0], testCase[1], { missingDependencies }, callback); }); - it(`should report error details exactly once when trying to resolve ${testCase[1]}`, (done) => { + it(`should report error details exactly once when trying to resolve ${testCase[1]}`, (t, done) => { /** * @param {Error & { details: string } | null} err err * @param {string} _filename _filename @@ -97,8 +101,9 @@ describe("missing", () => { const details = err.details.split("\n"); const firstDetail = details.shift(); - expect(firstDetail).toContain(testCase[1]); - expect(details).not.toContain(firstDetail); + assert.ok(firstDetail !== undefined); + assert.ok(firstDetail.includes(testCase[1])); + assert.ok(!details.includes(firstDetail)); } done(); diff --git a/test/path.test.js b/test/path.test.js index 9bcab677..655b988f 100644 --- a/test/path.test.js +++ b/test/path.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { describe, it } = require("node:test"); + const { PathType, createCachedBasename, @@ -17,100 +20,104 @@ const { describe("util/path getType", () => { it("returns Empty for the empty string", () => { - expect(getType("")).toBe(PathType.Empty); + assert.strictEqual(getType(""), PathType.Empty); }); it("classifies single-character inputs", () => { - expect(getType(".")).toBe(PathType.Relative); - expect(getType("/")).toBe(PathType.AbsolutePosix); - expect(getType("#")).toBe(PathType.Internal); - expect(getType("a")).toBe(PathType.Normal); + assert.strictEqual(getType("."), PathType.Relative); + assert.strictEqual(getType("/"), PathType.AbsolutePosix); + assert.strictEqual(getType("#"), PathType.Internal); + assert.strictEqual(getType("a"), PathType.Normal); }); it("classifies two-character inputs", () => { - expect(getType("..")).toBe(PathType.Relative); - expect(getType("./")).toBe(PathType.Relative); - expect(getType(".x")).toBe(PathType.Normal); - expect(getType("/a")).toBe(PathType.AbsolutePosix); - expect(getType("#a")).toBe(PathType.Internal); - expect(getType("C:")).toBe(PathType.AbsoluteWin); - expect(getType("c:")).toBe(PathType.AbsoluteWin); - expect(getType("ab")).toBe(PathType.Normal); - expect(getType("1:")).toBe(PathType.Normal); + assert.strictEqual(getType(".."), PathType.Relative); + assert.strictEqual(getType("./"), PathType.Relative); + assert.strictEqual(getType(".x"), PathType.Normal); + assert.strictEqual(getType("/a"), PathType.AbsolutePosix); + assert.strictEqual(getType("#a"), PathType.Internal); + assert.strictEqual(getType("C:"), PathType.AbsoluteWin); + assert.strictEqual(getType("c:"), PathType.AbsoluteWin); + assert.strictEqual(getType("ab"), PathType.Normal); + assert.strictEqual(getType("1:"), PathType.Normal); }); it("classifies longer inputs", () => { - expect(getType("./a")).toBe(PathType.Relative); - expect(getType("../a")).toBe(PathType.Relative); - expect(getType(".a")).toBe(PathType.Normal); - expect(getType("..a")).toBe(PathType.Normal); - expect(getType(".a/")).toBe(PathType.Normal); - expect(getType("/abc")).toBe(PathType.AbsolutePosix); - expect(getType("#foo")).toBe(PathType.Internal); - expect(getType("C:\\foo")).toBe(PathType.AbsoluteWin); - expect(getType("c:/foo")).toBe(PathType.AbsoluteWin); - expect(getType("foo")).toBe(PathType.Normal); - expect(getType("9:/foo")).toBe(PathType.Normal); - expect(getType("C:foo")).toBe(PathType.Normal); + assert.strictEqual(getType("./a"), PathType.Relative); + assert.strictEqual(getType("../a"), PathType.Relative); + assert.strictEqual(getType(".a"), PathType.Normal); + assert.strictEqual(getType("..a"), PathType.Normal); + assert.strictEqual(getType(".a/"), PathType.Normal); + assert.strictEqual(getType("/abc"), PathType.AbsolutePosix); + assert.strictEqual(getType("#foo"), PathType.Internal); + assert.strictEqual(getType("C:\\foo"), PathType.AbsoluteWin); + assert.strictEqual(getType("c:/foo"), PathType.AbsoluteWin); + assert.strictEqual(getType("foo"), PathType.Normal); + assert.strictEqual(getType("9:/foo"), PathType.Normal); + assert.strictEqual(getType("C:foo"), PathType.Normal); }); it("classifies DOS device paths as Windows-absolute", () => { // Win32 file namespace (\\?\) - expect(getType("\\\\?\\C:\\foo")).toBe(PathType.AbsoluteWin); - expect(getType("\\\\?\\C:\\foo\\bar")).toBe(PathType.AbsoluteWin); - expect(getType("\\\\?\\UNC\\server\\share")).toBe(PathType.AbsoluteWin); - expect(getType("\\\\?\\Volume{abc}\\f")).toBe(PathType.AbsoluteWin); + assert.strictEqual(getType("\\\\?\\C:\\foo"), PathType.AbsoluteWin); + assert.strictEqual(getType("\\\\?\\C:\\foo\\bar"), PathType.AbsoluteWin); + assert.strictEqual( + getType("\\\\?\\UNC\\server\\share"), + PathType.AbsoluteWin, + ); + assert.strictEqual(getType("\\\\?\\Volume{abc}\\f"), PathType.AbsoluteWin); // Win32 device namespace (\\.\) - expect(getType("\\\\.\\C:\\foo")).toBe(PathType.AbsoluteWin); - expect(getType("\\\\.\\PhysicalDrive0")).toBe(PathType.AbsoluteWin); + assert.strictEqual(getType("\\\\.\\C:\\foo"), PathType.AbsoluteWin); + assert.strictEqual(getType("\\\\.\\PhysicalDrive0"), PathType.AbsoluteWin); // Bare prefix still counts — the filesystem will reject it, but // classifying it as Windows-absolute keeps downstream calls on // `path.win32` instead of silently falling back to posix. - expect(getType("\\\\?\\")).toBe(PathType.AbsoluteWin); - expect(getType("\\\\.\\")).toBe(PathType.AbsoluteWin); + assert.strictEqual(getType("\\\\?\\"), PathType.AbsoluteWin); + assert.strictEqual(getType("\\\\.\\"), PathType.AbsoluteWin); }); it("does not classify non-DOS backslash paths as Windows-absolute", () => { // Plain UNC (\\server\share) is not a DOS device path — don't // misclassify it (its handling is out of scope of this change). - expect(getType("\\\\server\\share")).toBe(PathType.Normal); + assert.strictEqual(getType("\\\\server\\share"), PathType.Normal); // Too short to match a DOS device prefix. - expect(getType("\\\\?")).toBe(PathType.Normal); - expect(getType("\\\\.")).toBe(PathType.Normal); + assert.strictEqual(getType("\\\\?"), PathType.Normal); + assert.strictEqual(getType("\\\\."), PathType.Normal); // Second char must also be a backslash. - expect(getType("\\?\\C:\\foo")).toBe(PathType.Normal); + assert.strictEqual(getType("\\?\\C:\\foo"), PathType.Normal); // Forward-slash variants aren't equivalent — Windows won't normalize // a DOS device path expressed with `/`. - expect(getType("//?/C:/foo")).toBe(PathType.AbsolutePosix); + assert.strictEqual(getType("//?/C:/foo"), PathType.AbsolutePosix); }); }); describe("util/path normalize", () => { it("returns the input when empty", () => { - expect(normalize("")).toBe(""); + assert.strictEqual(normalize(""), ""); }); it("normalizes Windows absolute paths", () => { - expect(normalize("C:\\foo\\..\\bar")).toBe("C:\\bar"); + assert.strictEqual(normalize("C:\\foo\\..\\bar"), "C:\\bar"); }); it("keeps relative paths relative", () => { - expect(normalize("./a/b")).toBe("./a/b"); - expect(normalize("./a/../b")).toBe("./b"); + assert.strictEqual(normalize("./a/b"), "./a/b"); + assert.strictEqual(normalize("./a/../b"), "./b"); }); it("normalizes posix absolute paths", () => { - expect(normalize("/a/b/../c")).toBe("/a/c"); + assert.strictEqual(normalize("/a/b/../c"), "/a/c"); }); it("normalizes normal paths through posix normalize", () => { - expect(normalize("a/b/../c")).toBe("a/c"); + assert.strictEqual(normalize("a/b/../c"), "a/c"); }); it("normalizes DOS device paths via win32", () => { - expect(normalize("\\\\?\\C:\\foo\\..\\bar")).toBe("\\\\?\\C:\\bar"); - expect(normalize("\\\\.\\C:\\foo\\..\\bar")).toBe("\\\\.\\C:\\bar"); - expect(normalize("\\\\?\\UNC\\server\\share\\a\\..\\b")).toBe( + assert.strictEqual(normalize("\\\\?\\C:\\foo\\..\\bar"), "\\\\?\\C:\\bar"); + assert.strictEqual(normalize("\\\\.\\C:\\foo\\..\\bar"), "\\\\.\\C:\\bar"); + assert.strictEqual( + normalize("\\\\?\\UNC\\server\\share\\a\\..\\b"), "\\\\?\\UNC\\server\\share\\b", ); }); @@ -118,50 +125,51 @@ describe("util/path normalize", () => { describe("util/path join", () => { it("returns normalized rootPath when no request is given", () => { - expect(join("/a/b", "")).toBe("/a/b"); - expect(join("/a/b", undefined)).toBe("/a/b"); + assert.strictEqual(join("/a/b", ""), "/a/b"); + assert.strictEqual(join("/a/b", undefined), "/a/b"); }); it("uses an absolute posix request as-is", () => { - expect(join("/a/b", "/c/d")).toBe("/c/d"); + assert.strictEqual(join("/a/b", "/c/d"), "/c/d"); }); it("uses an absolute windows request as-is", () => { - expect(join("/a/b", "C:\\c\\d")).toBe("C:\\c\\d"); + assert.strictEqual(join("/a/b", "C:\\c\\d"), "C:\\c\\d"); }); it("joins rooted posix-style paths", () => { - expect(join("/a/b", "./c")).toBe("/a/b/c"); - expect(join("a/b", "c")).toBe("a/b/c"); - expect(join("./a", "b")).toBe("a/b"); + assert.strictEqual(join("/a/b", "./c"), "/a/b/c"); + assert.strictEqual(join("a/b", "c"), "a/b/c"); + assert.strictEqual(join("./a", "b"), "a/b"); }); it("joins rooted windows-style paths", () => { - expect(join("C:\\a", "b")).toBe("C:\\a\\b"); + assert.strictEqual(join("C:\\a", "b"), "C:\\a\\b"); }); it("joins DOS device paths with win32 semantics", () => { - expect(join("\\\\?\\C:\\a", "b")).toBe("\\\\?\\C:\\a\\b"); - expect(join("\\\\.\\C:\\a", "b")).toBe("\\\\.\\C:\\a\\b"); + assert.strictEqual(join("\\\\?\\C:\\a", "b"), "\\\\?\\C:\\a\\b"); + assert.strictEqual(join("\\\\.\\C:\\a", "b"), "\\\\.\\C:\\a\\b"); // Absolute DOS device request wins over any root. - expect(join("/posix/root", "\\\\?\\C:\\c")).toBe("\\\\?\\C:\\c"); + assert.strictEqual(join("/posix/root", "\\\\?\\C:\\c"), "\\\\?\\C:\\c"); }); }); describe("util/path dirname", () => { it("computes posix dirname for posix paths", () => { - expect(dirname("/a/b/c")).toBe("/a/b"); - expect(dirname("a/b")).toBe("a"); + assert.strictEqual(dirname("/a/b/c"), "/a/b"); + assert.strictEqual(dirname("a/b"), "a"); }); it("computes windows dirname for windows absolute paths", () => { - expect(dirname("C:\\foo\\bar")).toBe("C:\\foo"); + assert.strictEqual(dirname("C:\\foo\\bar"), "C:\\foo"); }); it("computes windows dirname for DOS device paths", () => { - expect(dirname("\\\\?\\C:\\foo\\bar")).toBe("\\\\?\\C:\\foo"); - expect(dirname("\\\\.\\C:\\foo\\bar")).toBe("\\\\.\\C:\\foo"); - expect(dirname("\\\\?\\UNC\\server\\share\\a\\b")).toBe( + assert.strictEqual(dirname("\\\\?\\C:\\foo\\bar"), "\\\\?\\C:\\foo"); + assert.strictEqual(dirname("\\\\.\\C:\\foo\\bar"), "\\\\.\\C:\\foo"); + assert.strictEqual( + dirname("\\\\?\\UNC\\server\\share\\a\\b"), "\\\\?\\UNC\\server\\share\\a", ); }); @@ -172,8 +180,8 @@ describe("util/path cachedJoin", () => { const cachedJoin = createCachedJoin().fn; const a = cachedJoin("/root", "a/b"); const b = cachedJoin("/root", "a/b"); - expect(a).toBe(b); - expect(a).toBe("/root/a/b"); + assert.strictEqual(a, b); + assert.strictEqual(a, "/root/a/b"); }); it("keeps separate caches per root", () => { @@ -181,8 +189,8 @@ describe("util/path cachedJoin", () => { const a = cachedJoin("/x", "req"); const b = cachedJoin("/y", "req"); const a2 = cachedJoin("/x", "req"); - expect(a).toBe(a2); - expect(a).not.toBe(b); + assert.strictEqual(a, a2); + assert.notStrictEqual(a, b); }); }); @@ -191,8 +199,8 @@ describe("util/path cachedDirname", () => { const cachedDirname = createCachedDirname().fn; const a = cachedDirname("/cached/a/b"); const b = cachedDirname("/cached/a/b"); - expect(a).toBe(b); - expect(a).toBe("/cached/a"); + assert.strictEqual(a, b); + assert.strictEqual(a, "/cached/a"); }); }); @@ -201,16 +209,16 @@ describe("util/path cachedBasename", () => { const cachedBasename = createCachedBasename().fn; const a = cachedBasename("/cached/a/b"); const b = cachedBasename("/cached/a/b"); - expect(a).toBe(b); - expect(a).toBe("b"); + assert.strictEqual(a, b); + assert.strictEqual(a, "b"); }); it("returns the same value on cache hit with suffix", () => { const cachedBasename = createCachedBasename().fn; const a = cachedBasename("/cached/a/b.ext", ".ext"); const b = cachedBasename("/cached/a/b.ext", ".ext"); - expect(a).toBe(b); - expect(a).toBe("b"); + assert.strictEqual(a, b); + assert.strictEqual(a, "b"); }); it("keeps separate caches per root", () => { @@ -218,8 +226,8 @@ describe("util/path cachedBasename", () => { const a = cachedBasename("/x"); const b = cachedBasename("/y"); const a2 = cachedBasename("/x"); - expect(a).toBe(a2); - expect(a).not.toBe(b); + assert.strictEqual(a, a2); + assert.notStrictEqual(a, b); }); it("keeps separate caches per root with suffix", () => { @@ -227,8 +235,8 @@ describe("util/path cachedBasename", () => { const a = cachedBasename("/x.ext", ".ext"); const b = cachedBasename("/y.ext", ".ext"); const a2 = cachedBasename("/x.ext", ".ext"); - expect(a).toBe(a2); - expect(a).not.toBe(b); + assert.strictEqual(a, a2); + assert.notStrictEqual(a, b); }); }); @@ -236,95 +244,95 @@ describe("util/path isRelativeRequest", () => { // Must match the legacy /^\.\.?(?:\/|$)/ regex exactly, since the helper // replaced it in several hot paths. Verify each branch individually. it("returns true for exactly '.'", () => { - expect(isRelativeRequest(".")).toBe(true); + assert.strictEqual(isRelativeRequest("."), true); }); it("returns true for exactly '..'", () => { - expect(isRelativeRequest("..")).toBe(true); + assert.strictEqual(isRelativeRequest(".."), true); }); it("returns true for './' and './foo/bar'", () => { - expect(isRelativeRequest("./")).toBe(true); - expect(isRelativeRequest("./foo")).toBe(true); - expect(isRelativeRequest("./foo/bar")).toBe(true); + assert.strictEqual(isRelativeRequest("./"), true); + assert.strictEqual(isRelativeRequest("./foo"), true); + assert.strictEqual(isRelativeRequest("./foo/bar"), true); }); it("returns true for '../' and '../foo'", () => { - expect(isRelativeRequest("../")).toBe(true); - expect(isRelativeRequest("../foo")).toBe(true); + assert.strictEqual(isRelativeRequest("../"), true); + assert.strictEqual(isRelativeRequest("../foo"), true); }); it("returns false for bare specifiers and absolute paths", () => { - expect(isRelativeRequest("")).toBe(false); - expect(isRelativeRequest("foo")).toBe(false); - expect(isRelativeRequest("/abs")).toBe(false); - expect(isRelativeRequest("#imports")).toBe(false); - expect(isRelativeRequest("C:\\win")).toBe(false); + assert.strictEqual(isRelativeRequest(""), false); + assert.strictEqual(isRelativeRequest("foo"), false); + assert.strictEqual(isRelativeRequest("/abs"), false); + assert.strictEqual(isRelativeRequest("#imports"), false); + assert.strictEqual(isRelativeRequest("C:\\win"), false); }); it("returns false for dotted names that are not relative requests", () => { // ".foo" is a normal specifier (hidden-file-style), not a relative request. - expect(isRelativeRequest(".foo")).toBe(false); + assert.strictEqual(isRelativeRequest(".foo"), false); // "..foo" likewise — only "..", "../..." are relative. - expect(isRelativeRequest("..foo")).toBe(false); + assert.strictEqual(isRelativeRequest("..foo"), false); }); }); describe("util/path isSubPath", () => { it("returns true for a child under parent", () => { - expect(isSubPath("/a/b", "/a/b/c")).toBe(true); + assert.strictEqual(isSubPath("/a/b", "/a/b/c"), true); }); it("returns false for a sibling that starts with the parent name", () => { - expect(isSubPath("/app", "/app-other/file")).toBe(false); + assert.strictEqual(isSubPath("/app", "/app-other/file"), false); }); it("handles parents that already end with a slash", () => { - expect(isSubPath("/a/b/", "/a/b/c")).toBe(true); + assert.strictEqual(isSubPath("/a/b/", "/a/b/c"), true); }); it("handles parents that already end with a backslash", () => { - expect(isSubPath("C:\\a\\b\\", "C:\\a\\b\\c")).toBe(true); + assert.strictEqual(isSubPath("C:\\a\\b\\", "C:\\a\\b\\c"), true); }); it("handles Windows-style children when the parent is not separator-terminated", () => { - expect(isSubPath("C:\\a", "C:\\a\\b")).toBe(true); + assert.strictEqual(isSubPath("C:\\a", "C:\\a\\b"), true); }); it("returns false when child and parent are equal (without trailing separator)", () => { // A path is not a subpath of itself — there has to be a separator // after the parent prefix. - expect(isSubPath("/a/b", "/a/b")).toBe(false); + assert.strictEqual(isSubPath("/a/b", "/a/b"), false); }); it("returns true when child equals a parent that already ends with a separator", () => { // `/a/b/` IS considered a "prefix" of `/a/b/` — startsWith is true // and the old implementation agreed. Lock it in so later refactors // don't silently regress. - expect(isSubPath("/a/b/", "/a/b/")).toBe(true); + assert.strictEqual(isSubPath("/a/b/", "/a/b/"), true); }); it("returns false when parent is longer than child", () => { - expect(isSubPath("/a/b/c", "/a/b")).toBe(false); + assert.strictEqual(isSubPath("/a/b/c", "/a/b"), false); }); it("returns true for an empty parent only when the child starts with a separator", () => { // Matches the old `normalize("" + "/") === "/"` fallback semantics. - expect(isSubPath("", "/a/b")).toBe(true); - expect(isSubPath("", "C:\\a")).toBe(false); - expect(isSubPath("", "foo")).toBe(false); - expect(isSubPath("", "")).toBe(false); + assert.strictEqual(isSubPath("", "/a/b"), true); + assert.strictEqual(isSubPath("", "C:\\a"), false); + assert.strictEqual(isSubPath("", "foo"), false); + assert.strictEqual(isSubPath("", ""), false); }); }); describe("util/path exported regexes", () => { it("deprecatedInvalidSegmentRegEx matches .. segments", () => { - expect(deprecatedInvalidSegmentRegEx.test("/foo/../bar")).toBe(true); + assert.strictEqual(deprecatedInvalidSegmentRegEx.test("/foo/../bar"), true); }); it("invalidSegmentRegEx matches node_modules segments", () => { - expect(invalidSegmentRegEx.test("/foo/node_modules/bar")).toBe(true); - expect(invalidSegmentRegEx.test("/foo/../bar")).toBe(true); + assert.strictEqual(invalidSegmentRegEx.test("/foo/node_modules/bar"), true); + assert.strictEqual(invalidSegmentRegEx.test("/foo/../bar"), true); }); }); @@ -332,23 +340,23 @@ describe("util/path join fallbacks for special rootPath types", () => { it("falls back when rootPath is Empty and request is Relative", () => { // rootPath empty → falls into the last switch. Relative request returns // posixNormalize("") === "." which is itself relative, returned as-is. - expect(join("", "./foo")).toBe("."); + assert.strictEqual(join("", "./foo"), "."); }); it("falls back when rootPath is Empty and request is a Normal name", () => { // Normal request: falls through to posixNormalize(rootPath) === "." - expect(join("", "foo")).toBe("."); + assert.strictEqual(join("", "foo"), "."); }); it("falls back when rootPath is Internal (#...) and request is Normal", () => { // rootPath "#x" (Internal) and request "foo" (Normal): falls through to // posixNormalize(rootPath). - expect(join("#x", "foo")).toBe("#x"); + assert.strictEqual(join("#x", "foo"), "#x"); }); it("falls back when rootPath is Internal (#...) and request is Relative", () => { // rootPath "#x" (Internal) and request "./foo" (Relative): returns // posixNormalize(rootPath) ("#x"), not relative, so prefixed with "./". - expect(join("#x", "./foo")).toBe("./#x"); + assert.strictEqual(join("#x", "./foo"), "./#x"); }); }); diff --git a/test/plugins.test.js b/test/plugins.test.js index 93284362..ca5e1f09 100644 --- a/test/plugins.test.js +++ b/test/plugins.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const { CachedInputFileSystem, @@ -9,7 +12,7 @@ const { } = require("../"); describe("plugins", () => { - it("should resolve with the CloneBasenamePlugin", (done) => { + it("should resolve with the CloneBasenamePlugin", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: require("fs"), plugins: [ @@ -28,7 +31,8 @@ describe("plugins", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve( __dirname, "fixtures/directory-default/directory-default.js", @@ -39,7 +43,7 @@ describe("plugins", () => { ); }); - it("should ignore 'false'/'null'/'undefined' plugins", (done) => { + it("should ignore 'false'/'null'/'undefined' plugins", (t, done) => { const FailedPlugin = class { apply() { throw new Error("FailedPlugin"); @@ -70,7 +74,8 @@ describe("plugins", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve( __dirname, "fixtures/directory-default/directory-default.js", @@ -92,6 +97,6 @@ describe("plugins", () => { }, ], }); - expect(seenResolver).toBe(r); + assert.strictEqual(seenResolver, r); }); }); diff --git a/test/pnp.test.js b/test/pnp.test.js index f43e0e6d..9723c961 100644 --- a/test/pnp.test.js +++ b/test/pnp.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { after, before, beforeEach, describe, it } = require("node:test"); + const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); @@ -28,7 +31,7 @@ describe("pnp", () => { let resolver; if (isAdmin) { - beforeAll(() => { + before(() => { fs.symlinkSync("dir", path.resolve(fixture, "pkg/symlink"), "dir"); }); } @@ -79,29 +82,29 @@ describe("pnp", () => { }); if (isAdmin) { - afterAll(() => { + after(() => { fs.unlinkSync(path.resolve(fixture, "pkg/symlink")); }); } - it("should resolve by going through the pnp api", (done) => { + it("should resolve by going through the pnp api", (t, done) => { pnpApi.mocks.set("pkg", path.resolve(fixture, "pkg")); resolver.resolve({}, __dirname, "pkg/dir/index.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "pkg/dir/index.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "pkg/dir/index.js")); done(); }); }); - it("should not resolve a not fully specified request when fullySpecified is set", (done) => { + it("should not resolve a not fully specified request when fullySpecified is set", (t, done) => { pnpApi.mocks.set("pkg", path.resolve(fixture, "pkg")); resolver.resolve({}, __dirname, "pkg/dir/index", {}, (err, _result) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should track dependency to the pnp api", (done) => { + it("should track dependency to the pnp api", (t, done) => { pnpApi.mocks.set("pkg", path.resolve(fixture, "pkg")); pnpApi.mocks.set("pnpapi", path.resolve(fixture, ".pnp.js")); const fileDependencies = new Set(); @@ -112,29 +115,32 @@ describe("pnp", () => { { fileDependencies }, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "pkg/dir/index.js")); - expect([...fileDependencies]).toContainEqual( - path.resolve(fixture, ".pnp.js"), + assert.deepStrictEqual( + result, + path.resolve(fixture, "pkg/dir/index.js"), + ); + assert.ok( + [...fileDependencies].includes(path.resolve(fixture, ".pnp.js")), ); done(); }, ); }); - it("should resolve module names with package.json", (done) => { + it("should resolve module names with package.json", (t, done) => { pnpApi.mocks.set("pkg", path.resolve(fixture, "pkg")); resolver.resolve({}, __dirname, "pkg", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "pkg/main.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "pkg/main.js")); done(); }); }); - it("should resolve namespaced module names", (done) => { + it("should resolve namespaced module names", (t, done) => { pnpApi.mocks.set("@user/pkg", path.resolve(fixture, "pkg")); resolver.resolve({}, __dirname, "@user/pkg", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "pkg/main.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "pkg/main.js")); done(); }); }); @@ -142,7 +148,7 @@ describe("pnp", () => { it( "should not resolve symlinks", isAdmin - ? (done) => { + ? (t, done) => { pnpApi.mocks.set("pkg", path.resolve(fixture, "pkg")); resolverFuzzy.resolve( {}, @@ -151,7 +157,8 @@ describe("pnp", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "pkg/symlink/index.js"), ); done(); @@ -161,7 +168,7 @@ describe("pnp", () => { : undefined, ); - it("should properly deal with other extensions", (done) => { + it("should properly deal with other extensions", (t, done) => { pnpApi.mocks.set("@user/pkg", path.resolve(fixture, "pkg")); resolverFuzzy.resolve( {}, @@ -170,7 +177,8 @@ describe("pnp", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "pkg/typescript/index.ts"), ); done(); @@ -178,7 +186,7 @@ describe("pnp", () => { ); }); - it("should properly deal package.json alias", (done) => { + it("should properly deal package.json alias", (t, done) => { pnpApi.mocks.set("pkg", path.resolve(fixture, "pkg")); resolverFuzzy.resolve( {}, @@ -187,7 +195,8 @@ describe("pnp", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "pkg/package-alias/browser.js"), ); done(); @@ -195,7 +204,7 @@ describe("pnp", () => { ); }); - it("should prefer pnp resolves over normal modules", (done) => { + it("should prefer pnp resolves over normal modules", (t, done) => { pnpApi.mocks.set("m1", path.resolve(fixture, "../node_modules/m2")); resolver.resolve( {}, @@ -204,7 +213,8 @@ describe("pnp", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "../node_modules/m2/b.js"), ); done(); @@ -212,7 +222,7 @@ describe("pnp", () => { ); }); - it("should prefer alternative module directories over pnp", (done) => { + it("should prefer alternative module directories over pnp", (t, done) => { pnpApi.mocks.set("m1", path.resolve(fixture, "../node_modules/m2")); resolver.resolve( {}, @@ -221,7 +231,8 @@ describe("pnp", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve( __dirname, "fixtures/prefer-pnp/alternative-modules/m1/b.js", @@ -232,7 +243,7 @@ describe("pnp", () => { ); }); - it("should prefer alias over pnp resolves", (done) => { + it("should prefer alias over pnp resolves", (t, done) => { pnpApi.mocks.set("alias", path.resolve(fixture, "pkg/dir")); resolver.resolve( {}, @@ -241,13 +252,13 @@ describe("pnp", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "pkg/index.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "pkg/index.js")); done(); }, ); }); - it("should prefer pnp over modules after node_modules", (done) => { + it("should prefer pnp over modules after node_modules", (t, done) => { pnpApi.mocks.set("m2", path.resolve(fixture, "pkg")); resolver.resolve( {}, @@ -256,13 +267,13 @@ describe("pnp", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "pkg/index.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "pkg/index.js")); done(); }, ); }); - it("should fallback to alternatives when pnp resolving fails", (done) => { + it("should fallback to alternatives when pnp resolving fails", (t, done) => { resolver.resolve( {}, path.resolve(__dirname, "fixtures"), @@ -270,13 +281,16 @@ describe("pnp", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "../pnp-a/m2/a.js")); + assert.deepStrictEqual( + result, + path.resolve(fixture, "../pnp-a/m2/a.js"), + ); done(); }, ); }); - it("should fallback to alternatives when pnp doesn't manage the issuer", (done) => { + it("should fallback to alternatives when pnp doesn't manage the issuer", (t, done) => { pnpApi.ignoredIssuers.add(`${path.resolve(__dirname, "fixtures")}/`); // Add the wrong path on purpose to make sure the issuer is ignored pnpApi.mocks.set("m2", path.resolve(fixture, "pkg")); @@ -287,7 +301,8 @@ describe("pnp", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(__dirname, "fixtures/node_modules/m2/b.js"), ); done(); @@ -295,7 +310,7 @@ describe("pnp", () => { ); }); - it("should handle the exports field when using PnP", (done) => { + it("should handle the exports field when using PnP", (t, done) => { pnpApi.mocks.set("m1", path.resolve(fixture, "pkg3")); resolver.resolve( {}, @@ -304,13 +319,13 @@ describe("pnp", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "pkg3/a.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "pkg3/a.js")); done(); }, ); }); - it("should handle the exports field when using PnP (with sub path)", (done) => { + it("should handle the exports field when using PnP (with sub path)", (t, done) => { pnpApi.mocks.set("@user/m1", path.resolve(fixture, "pkg3")); resolver.resolve( {}, @@ -319,13 +334,13 @@ describe("pnp", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "pkg3/a.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "pkg3/a.js")); done(); }, ); }); - it("falls through when pnpApi throws an UNDECLARED_DEPENDENCY error and logs each line", (done) => { + it("falls through when pnpApi throws an UNDECLARED_DEPENDENCY error and logs each line", (t, done) => { const pnpApi = { resolveToUnqualified() { const err = @@ -349,16 +364,20 @@ describe("pnp", () => { { log: (m) => logs.push(m) }, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixture, "../pnp-a/m2/a.js")); - expect( + assert.deepStrictEqual( + result, + path.resolve(fixture, "../pnp-a/m2/a.js"), + ); + assert.strictEqual( logs.some((l) => l.includes("request is not managed by the pnpapi")), - ).toBe(true); + true, + ); done(); }, ); }); - it("propagates unexpected errors from pnpApi", (done) => { + it("propagates unexpected errors from pnpApi", (t, done) => { const pnpApi = { resolveToUnqualified() { throw new Error("unexpected-pnp"); @@ -375,14 +394,17 @@ describe("pnp", () => { "m2/a.js", {}, (err) => { - expect(err).toBeTruthy(); - expect(/** @type {Error} */ (err).message).toBe("unexpected-pnp"); + assert.ok(err); + assert.strictEqual( + /** @type {Error} */ (err).message, + "unexpected-pnp", + ); done(); }, ); }); - it("returns an error when neither pnp nor the alternate find a result", (done) => { + it("returns an error when neither pnp nor the alternate find a result", (t, done) => { const pnpApi = { resolveToUnqualified() { return null; @@ -399,7 +421,7 @@ describe("pnp", () => { "no-such-package", {}, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }, ); @@ -413,9 +435,9 @@ describe("pnp", () => { value: "0.0.0", configurable: true, }); - expect(() => + assert.doesNotThrow(() => ResolverFactory.createResolver({ fileSystem: nodeFileSystem }), - ).not.toThrow(); + ); } finally { if (originalPnp === undefined) { // eslint-disable-next-line jsdoc/reject-any-type diff --git a/test/pr-53.test.js b/test/pr-53.test.js index 3e7b4293..c3b17890 100644 --- a/test/pr-53.test.js +++ b/test/pr-53.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { describe, it } = require("node:test"); + const { CachedInputFileSystem } = require("../"); describe("pr-53", () => { @@ -14,6 +17,6 @@ describe("pr-53", () => { 1000, ); if (!cfs.readJsonSync) throw new Error("readJsonSync must be available"); - expect(cfs.readJsonSync("xyz")).toBe("abcxyz"); + assert.strictEqual(cfs.readJsonSync("xyz"), "abcxyz"); }); }); diff --git a/test/recursion.test.js b/test/recursion.test.js index 29fd9f40..188b8e90 100644 --- a/test/recursion.test.js +++ b/test/recursion.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); @@ -8,7 +11,7 @@ const fixtures = path.join(__dirname, "fixtures"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); describe("recursion detection", () => { - it("surfaces a recursion error when a plugin re-invokes doResolve on the same hook/request", (done) => { + it("surfaces a recursion error when a plugin re-invokes doResolve on the same hook/request", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -26,15 +29,18 @@ describe("recursion detection", () => { }); resolver.resolve({}, fixtures, "./a.js", {}, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); // The recursion error may be wrapped; either shape is acceptable. const msg = /** @type {Error} */ (err).message; - expect(/Recursion in resolving|Can't resolve/.test(msg)).toBe(true); + assert.strictEqual( + /Recursion in resolving|Can't resolve/.test(msg), + true, + ); done(); }); }); - it("logs 'abort resolving because of recursion' when a log is provided", (done) => { + it("logs 'abort resolving because of recursion' when a log is provided", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -56,10 +62,11 @@ describe("recursion detection", () => { "./a.js", { log: (m) => log.push(m) }, (err) => { - expect(err).toBeInstanceOf(Error); - expect( + assert.ok(err instanceof Error); + assert.strictEqual( log.some((l) => l.includes("abort resolving because of recursion")), - ).toBe(true); + true, + ); done(); }, ); diff --git a/test/resolve-context-stack.test.js b/test/resolve-context-stack.test.js index a9ab9c58..b8953e5c 100644 --- a/test/resolve-context-stack.test.js +++ b/test/resolve-context-stack.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); @@ -14,15 +17,15 @@ describe("resolveContext.stack", () => { fileSystem: nodeFileSystem, }); - it("should resolve when no stack is supplied", (done) => { + it("should resolve when no stack is supplied", (t, done) => { resolver.resolve({}, fixture, "./foo", {}, (err, result) => { if (err) return done(err); - expect(result).toBeTruthy(); + assert.ok(result); done(); }); }); - it("should resolve when an empty StackEntry is supplied as stack", (done) => { + it("should resolve when an empty StackEntry is supplied as stack", (t, done) => { resolver.resolve( {}, fixture, @@ -30,13 +33,13 @@ describe("resolveContext.stack", () => { { stack: new Set() }, (err, result) => { if (err) return done(err); - expect(result).toBeTruthy(); + assert.ok(result); done(); }, ); }); - it("should resolve when a non-empty Set is supplied as stack", (done) => { + it("should resolve when a non-empty Set is supplied as stack", (t, done) => { // The values below are arbitrary tokens that must not collide with any // real `resolve` step. Providing them exercises the code path where a // caller pre-seeds the recursion-tracking stack. @@ -47,13 +50,13 @@ describe("resolveContext.stack", () => { { stack: new Set(["custom-entry-1", "custom-entry-2"]) }, (err, result) => { if (err) return done(err); - expect(result).toBeTruthy(); + assert.ok(result); done(); }, ); }); - it("should detect recursion against entries pre-seeded in the stack", (done) => { + it("should detect recursion against entries pre-seeded in the stack", (t, done) => { // The first stack entry that `resolve` pushes for this request is // `resolve: (…fixture…) ./foo`. Pre-seeding an identical string in // the context must trigger the recursion guard and abort the resolve. @@ -64,16 +67,17 @@ describe("resolveContext.stack", () => { "./foo", { stack: new Set([preSeededEntry]) }, (err) => { - expect(err).toBeTruthy(); - expect( + assert.ok(err); + assert.strictEqual( /** @type {Error & { recursion?: boolean }} */ (err).recursion, - ).toBe(true); + true, + ); done(); }, ); }); - it("should detect recursion against Set entries at deeper resolve steps", (done) => { + it("should detect recursion against Set entries at deeper resolve steps", (t, done) => { // `parsedResolve` runs after the top-level `resolve` hook, so // pre-seeding its entry only triggers recursion at a deeper // `doResolve` call. This exercises the path where the legacy Set @@ -86,10 +90,11 @@ describe("resolveContext.stack", () => { "./foo", { stack: new Set([deeperEntry]) }, (err) => { - expect(err).toBeTruthy(); - expect( + assert.ok(err); + assert.strictEqual( /** @type {Error & { recursion?: boolean }} */ (err).recursion, - ).toBe(true); + true, + ); done(); }, ); @@ -101,43 +106,45 @@ describe("resolveContext.stack", () => { // either omitting `stack` or assigning `undefined`. Both forms must clear // any prior pre-seeded entries so a follow-up resolve no longer recurses. - it("should reset the stack by assigning `undefined` (StackEntry equivalent of `new Set()`)", (done) => { + it("should reset the stack by assigning `undefined` (StackEntry equivalent of `new Set()`)", (t, done) => { // First call: pre-seed an entry that triggers recursion immediately. // Reuse the same `ctx` object on the second call after clearing the // field — the resolve must succeed because the seeded entry is gone. /** @type {import("../").ResolveContext} */ const ctx = { stack: new Set([`resolve: (${fixture}) ./foo`]) }; resolver.resolve({}, fixture, "./foo", ctx, (err) => { - expect(err).toBeTruthy(); - expect( + assert.ok(err); + assert.strictEqual( /** @type {Error & { recursion?: boolean }} */ (err).recursion, - ).toBe(true); + true, + ); ctx.stack = undefined; resolver.resolve({}, fixture, "./foo", ctx, (err2, result) => { if (err2) return done(err2); - expect(result).toBeTruthy(); + assert.ok(result); done(); }); }); }); - it("should reset the stack by assigning a fresh `new Set()` on a reused context", (done) => { + it("should reset the stack by assigning a fresh `new Set()` on a reused context", (t, done) => { // Same pattern, but using the legacy Set form for the reset to confirm // back-compat: a fresh empty Set clears the recursion guard just like // `undefined` does. /** @type {import("../").ResolveContext} */ const ctx = { stack: new Set([`resolve: (${fixture}) ./foo`]) }; resolver.resolve({}, fixture, "./foo", ctx, (err) => { - expect(err).toBeTruthy(); - expect( + assert.ok(err); + assert.strictEqual( /** @type {Error & { recursion?: boolean }} */ (err).recursion, - ).toBe(true); + true, + ); ctx.stack = new Set(); resolver.resolve({}, fixture, "./foo", ctx, (err2, result) => { if (err2) return done(err2); - expect(result).toBeTruthy(); + assert.ok(result); done(); }); }); @@ -205,7 +212,7 @@ describe("resolveContext.stack", () => { }); }; - it("succeeds when the plugin resets `stack` to undefined before re-issuing", (done) => { + it("succeeds when the plugin resets `stack` to undefined before re-issuing", (t, done) => { buildReplayResolver(true).resolve( {}, fixture, @@ -213,22 +220,23 @@ describe("resolveContext.stack", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toBeTruthy(); + assert.ok(result); done(); }, ); }); - it("trips the recursion guard if the plugin forgets to reset `stack`", (done) => { + it("trips the recursion guard if the plugin forgets to reset `stack`", (t, done) => { // Negative control: confirms the reset above isn't a no-op. // Without it, the inner `resolver.resolve()` inherits the outer // chain, sees its own `resolve: (...)` entry already on the stack, // and aborts. buildReplayResolver(false).resolve({}, fixture, "./foo", {}, (err) => { - expect(err).toBeTruthy(); - expect( + assert.ok(err); + assert.strictEqual( /** @type {Error & { recursion?: boolean }} */ (err).recursion, - ).toBe(true); + true, + ); done(); }); }); @@ -238,7 +246,7 @@ describe("resolveContext.stack", () => { // the stack and runs `String.prototype` methods on each entry. Pre-5.21 // this worked because `stack` was a `Set`; the iterator must // keep yielding strings so the snippet from the issue doesn't TypeError. - it("supports `[...resolveContext.stack].find(a => a.includes(...))` (issue #567)", (done) => { + it("supports `[...resolveContext.stack].find(a => a.includes(...))` (issue #567)", (t, done) => { /** @type {string | undefined} */ let moduleEntry; const plugin = { @@ -268,15 +276,18 @@ describe("resolveContext.stack", () => { }); r.resolve({}, fixture, "m1/a", {}, (err, result) => { if (err) return done(err); - expect(result).toBeTruthy(); + assert.ok(result); const entry = /** @type {string} */ (moduleEntry); - expect(entry).toBeTruthy(); - expect(typeof entry).toBe("string"); - expect(entry).toMatch(/^module: \(.+\) \.\//); + assert.ok(entry); + assert.strictEqual(typeof entry, "string"); + assert.match(entry, /^module: \(.+\) \.\//); // The exact regex from the issue's `DependencyDedupePlugin` // plugin: strip the `module: (path) ./` prefix and keep the // rest. For a `m1/a` request that yields `"m1/a"`. - expect(entry.replace(/^(module: \(.+\) \.\/)(?=.+$)/, "")).toBe("m1/a"); + assert.strictEqual( + entry.replace(/^(module: \(.+\) \.\/)(?=.+$)/, ""), + "m1/a", + ); done(); }); }); diff --git a/test/resolve-logging.test.js b/test/resolve-logging.test.js index ae4baec8..e9438cca 100644 --- a/test/resolve-logging.test.js +++ b/test/resolve-logging.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); const resolve = require("../"); @@ -14,7 +17,7 @@ describe("directory/file existence logging", () => { extensions: [".js"], }); - it("logs 'doesn't exist' when a directory is missing during resolution", (done) => { + it("logs 'doesn't exist' when a directory is missing during resolution", (t, done) => { const log = []; resolver.resolve( {}, @@ -22,14 +25,17 @@ describe("directory/file existence logging", () => { "./does-not-exist", { log: (m) => log.push(m) }, (err) => { - expect(err).toBeInstanceOf(Error); - expect(log.some((l) => l.includes("doesn't exist"))).toBe(true); + assert.ok(err instanceof Error); + assert.strictEqual( + log.some((l) => l.includes("doesn't exist")), + true, + ); done(); }, ); }); - it("tracks missing directories in resolveContext.missingDependencies", (done) => { + it("tracks missing directories in resolveContext.missingDependencies", (t, done) => { const missingDependencies = new Set(); resolver.resolve( {}, @@ -37,8 +43,8 @@ describe("directory/file existence logging", () => { "./does-not-exist", { missingDependencies }, (err) => { - expect(err).toBeInstanceOf(Error); - expect(missingDependencies.size).toBeGreaterThan(0); + assert.ok(err instanceof Error); + assert.ok(missingDependencies.size > 0); done(); }, ); @@ -51,18 +57,18 @@ describe("fragment handling (ParsePlugin)", () => { extensions: [".js"], }); - it("preserves unique fragments when parsing requests", (done) => { + it("preserves unique fragments when parsing requests", (t, done) => { resolver.resolve({}, fixtures, "./a.js#frag", {}, (err, result) => { if (err) return done(err); - expect(result).toBe(`${path.join(fixtures, "a.js")}#frag`); + assert.strictEqual(result, `${path.join(fixtures, "a.js")}#frag`); done(); }); }); - it("preserves queries together with fragments", (done) => { + it("preserves queries together with fragments", (t, done) => { resolver.resolve({}, fixtures, "./a.js?q#f", {}, (err, result) => { if (err) return done(err); - expect(result).toBe(`${path.join(fixtures, "a.js")}?q#f`); + assert.strictEqual(result, `${path.join(fixtures, "a.js")}?q#f`); done(); }); }); @@ -73,7 +79,7 @@ describe("resolver resolves request without a fragment or module marker", () => // that has no directory/module/query/fragment/descriptionFile attached. const LogInfoPlugin = require("../lib/LogInfoPlugin"); - it("runs without logging query/fragment/module/directory lines", (done) => { + it("runs without logging query/fragment/module/directory lines", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -89,11 +95,18 @@ describe("resolver resolves request without a fragment or module marker", () => if (err) return done(err); // The "file" hook sees a request where module/directory are false and // query/fragment are empty — so these branches are skipped. - expect(log.some((l) => l.includes("[file] Resolving in"))).toBe(true); - expect(log.some((l) => l.includes("Request is a directory"))).toBe( + assert.strictEqual( + log.some((l) => l.includes("[file] Resolving in")), + true, + ); + assert.strictEqual( + log.some((l) => l.includes("Request is a directory")), + false, + ); + assert.strictEqual( + log.some((l) => l.includes("Request is an module")), false, ); - expect(log.some((l) => l.includes("Request is an module"))).toBe(false); done(); }, ); @@ -102,24 +115,24 @@ describe("resolver resolves request without a fragment or module marker", () => // A convenience sanity check that the full top-level resolve() works. describe("top-level resolve()", () => { - it("resolves a fixture with the default node resolver", (done) => { + it("resolves a fixture with the default node resolver", (t, done) => { resolve(fixtures, "./a.js", (err, result) => { if (err) return done(err); - expect(result).toEqual(path.join(fixtures, "a.js")); + assert.deepStrictEqual(result, path.join(fixtures, "a.js")); done(); }); }); }); describe("resolving a directory as a file (FileExistsPlugin 'is not a file' branch)", () => { - it("emits an error when enforceExtension matches a directory", (done) => { + it("emits an error when enforceExtension matches a directory", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, enforceExtension: true, extensions: [".js"], }); resolver.resolve({}, fixtures, "./directory-default", {}, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); diff --git a/test/resolve.test.js b/test/resolve.test.js index 21051760..2f03c0d7 100644 --- a/test/resolve.test.js +++ b/test/resolve.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { describe, it } = require("node:test"); + const path = require("path"); const url = require("url"); const resolve = require("../"); @@ -41,23 +44,23 @@ function testResolve(name, context, moduleName, result) { describe(name, () => { it("should resolve sync correctly", () => { const filename = resolve.sync(context, moduleName); - expect(filename).toBeDefined(); - expect(filename).toEqual(result); + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual(filename, result); }); - it("should resolve async correctly", (done) => { + it("should resolve async correctly", (t, done) => { resolve(context, moduleName, (err, filename) => { if (err) return done(err); - expect(filename).toBeDefined(); - expect(filename).toEqual(result); + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual(filename, result); done(); }); }); it("should resolve promise correctly", async () => { const filename = await resolve.promise(context, moduleName); - expect(filename).toBeDefined(); - expect(filename).toEqual(result); + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual(filename, result); }); }); } @@ -71,25 +74,25 @@ function testResolve(name, context, moduleName, result) { */ function testResolveContext(name, context, moduleName, result) { describe(name, () => { - it("should resolve async correctly", (done) => { + it("should resolve async correctly", (t, done) => { asyncContextResolve(context, moduleName, (err, filename) => { if (err) done(err); - expect(filename).toBeDefined(); - expect(filename).toEqual(result); + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual(filename, result); done(); }); }); it("should resolve sync correctly", () => { const filename = syncContextResolve(context, moduleName); - expect(filename).toBeDefined(); - expect(filename).toEqual(result); + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual(filename, result); }); it("should resolve promise correctly", async () => { const filename = await promiseContextResolve(context, moduleName); - expect(filename).toBeDefined(); - expect(filename).toEqual(result); + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual(filename, result); }); }); } @@ -329,7 +332,7 @@ describe("resolve", () => { path.join(fixtures, "main1.js"), ); - it("should correctly resolve", (done) => { + it("should correctly resolve", (t, done) => { const issue238 = path.resolve(fixtures, "issue-238"); issue238Resolve( @@ -337,8 +340,9 @@ describe("resolve", () => { "config/myObjectFile", (err, filename) => { if (err) done(err); - expect(filename).toBeDefined(); - expect(filename).toEqual( + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual( + filename, path.resolve(issue238, "./src/common/config/myObjectFile.js"), ); done(); @@ -346,46 +350,47 @@ describe("resolve", () => { ); }); - it("should correctly resolve with preferRelative", (done) => { + it("should correctly resolve with preferRelative", (t, done) => { preferRelativeResolve(fixtures, "main1.js", (err, filename) => { if (err) done(err); - expect(filename).toBeDefined(); - expect(filename).toEqual(path.join(fixtures, "main1.js")); + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual(filename, path.join(fixtures, "main1.js")); done(); }); }); - it("should correctly resolve with preferRelative #2", (done) => { + it("should correctly resolve with preferRelative #2", (t, done) => { preferRelativeResolve(fixtures, "m1/a.js", (err, filename) => { if (err) done(err); - expect(filename).toBeDefined(); - expect(filename).toEqual( + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual( + filename, path.join(fixtures, "node_modules", "m1", "a.js"), ); done(); }); }); - it("should not crash when passing undefined as path", (done) => { + it("should not crash when passing undefined as path", (t, done) => { // @ts-expect-error testing invalid arguments resolve(fixtures, undefined, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should not crash when passing undefined as context", (done) => { + it("should not crash when passing undefined as context", (t, done) => { // @ts-expect-error testing invalid arguments resolve({}, undefined, "./test/resolve.js", (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should not crash when passing undefined everywhere", (done) => { + it("should not crash when passing undefined everywhere", (t, done) => { // @ts-expect-error testing invalid arguments resolve(undefined, undefined, undefined, undefined, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); diff --git a/test/resolver-cache.test.js b/test/resolver-cache.test.js index 2105b23d..8bbcea0a 100644 --- a/test/resolver-cache.test.js +++ b/test/resolver-cache.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); const { dirname, join } = require("../lib/util/path"); @@ -21,7 +24,7 @@ describe("Resolver join/dirname cache", () => { unsafeCache: true, }); - expect(resolver1.pathCache).toBe(resolver2.pathCache); + assert.strictEqual(resolver1.pathCache, resolver2.pathCache); }); it("should use independent caches for different fileSystems", () => { @@ -39,7 +42,7 @@ describe("Resolver join/dirname cache", () => { unsafeCache: true, }); - expect(resolver1.pathCache).not.toBe(resolver2.pathCache); + assert.notStrictEqual(resolver1.pathCache, resolver2.pathCache); }); it("should produce correct results", () => { @@ -51,14 +54,19 @@ describe("Resolver join/dirname cache", () => { unsafeCache: true, }); - expect(resolver.join("/a/b", "c")).toBe(join("/a/b", "c")); - expect(resolver.dirname("/a/b/c")).toBe(dirname("/a/b/c")); - expect(resolver.basename("/a/b/c")).toBe(path.basename("/a/b/c")); - expect(resolver.basename("/a/b/c.ext", ".ext")).toBe( + assert.strictEqual(resolver.join("/a/b", "c"), join("/a/b", "c")); + assert.strictEqual(resolver.dirname("/a/b/c"), dirname("/a/b/c")); + assert.strictEqual(resolver.basename("/a/b/c"), path.basename("/a/b/c")); + assert.strictEqual( + resolver.basename("/a/b/c.ext", ".ext"), path.basename("/a/b/c.ext", ".ext"), ); - expect(resolver.basename("/a/b/c.ext")).toBe(path.basename("/a/b/c.ext")); - expect(resolver.basename("/a/b/c.ext", ".other")).toBe( + assert.strictEqual( + resolver.basename("/a/b/c.ext"), + path.basename("/a/b/c.ext"), + ); + assert.strictEqual( + resolver.basename("/a/b/c.ext", ".other"), path.basename("/a/b/c.ext", ".other"), ); }); @@ -76,22 +84,22 @@ describe("Resolver join/dirname cache", () => { resolver.dirname("/a/b/c"); resolver.basename("/a/b/c"); - expect(resolver.pathCache.join.cache.size).toBeGreaterThan(0); - expect(resolver.pathCache.dirname.cache.size).toBeGreaterThan(0); - expect(resolver.pathCache.basename.cache.size).toBeGreaterThan(0); + assert.ok(resolver.pathCache.join.cache.size > 0); + assert.ok(resolver.pathCache.dirname.cache.size > 0); + assert.ok(resolver.pathCache.basename.cache.size > 0); resolver.pathCache.join.cache.clear(); resolver.pathCache.dirname.cache.clear(); resolver.pathCache.basename.cache.clear(); - expect(resolver.pathCache.join.cache.size).toBe(0); - expect(resolver.pathCache.dirname.cache.size).toBe(0); - expect(resolver.pathCache.basename.cache.size).toBe(0); + assert.strictEqual(resolver.pathCache.join.cache.size, 0); + assert.strictEqual(resolver.pathCache.dirname.cache.size, 0); + assert.strictEqual(resolver.pathCache.basename.cache.size, 0); // Still works after clearing - expect(resolver.join("/a/b", "c")).toBe(join("/a/b", "c")); - expect(resolver.dirname("/a/b/c")).toBe(dirname("/a/b/c")); - expect(resolver.basename("/a/b/c")).toBe(path.basename("/a/b/c")); + assert.strictEqual(resolver.join("/a/b", "c"), join("/a/b", "c")); + assert.strictEqual(resolver.dirname("/a/b/c"), dirname("/a/b/c")); + assert.strictEqual(resolver.basename("/a/b/c"), path.basename("/a/b/c")); }); it("should clear only join cache when calling pathCache.join.clear()", () => { @@ -109,9 +117,9 @@ describe("Resolver join/dirname cache", () => { resolver.pathCache.join.cache.clear(); - expect(resolver.pathCache.join.cache.size).toBe(0); - expect(resolver.pathCache.dirname.cache.size).toBeGreaterThan(0); - expect(resolver.pathCache.basename.cache.size).toBeGreaterThan(0); + assert.strictEqual(resolver.pathCache.join.cache.size, 0); + assert.ok(resolver.pathCache.dirname.cache.size > 0); + assert.ok(resolver.pathCache.basename.cache.size > 0); }); it("should clear only dirname cache when calling pathCache.dirname.clear()", () => { @@ -129,9 +137,9 @@ describe("Resolver join/dirname cache", () => { resolver.pathCache.dirname.cache.clear(); - expect(resolver.pathCache.join.cache.size).toBeGreaterThan(0); - expect(resolver.pathCache.dirname.cache.size).toBe(0); - expect(resolver.pathCache.basename.cache.size).toBeGreaterThan(0); + assert.ok(resolver.pathCache.join.cache.size > 0); + assert.strictEqual(resolver.pathCache.dirname.cache.size, 0); + assert.ok(resolver.pathCache.basename.cache.size > 0); }); it("should clear only dirname cache when calling pathCache.basename.clear()", () => { @@ -149,9 +157,9 @@ describe("Resolver join/dirname cache", () => { resolver.pathCache.basename.cache.clear(); - expect(resolver.pathCache.join.cache.size).toBeGreaterThan(0); - expect(resolver.pathCache.dirname.cache.size).toBeGreaterThan(0); - expect(resolver.pathCache.basename.cache.size).toBe(0); + assert.ok(resolver.pathCache.join.cache.size > 0); + assert.ok(resolver.pathCache.dirname.cache.size > 0); + assert.strictEqual(resolver.pathCache.basename.cache.size, 0); }); }); @@ -168,7 +176,7 @@ describe("Resolver join/dirname cache", () => { extensions: [".js"], }); - expect(resolver1.pathCache).toBe(resolver2.pathCache); + assert.strictEqual(resolver1.pathCache, resolver2.pathCache); }); }); }); diff --git a/test/roots.test.js b/test/roots.test.js index 040c7295..7d96224b 100644 --- a/test/roots.test.js +++ b/test/roots.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const CachedInputFileSystem = require("../lib/CachedInputFileSystem"); const ResolverFactory = require("../lib/ResolverFactory"); @@ -44,34 +47,34 @@ describe("roots", () => { resolveToContext: true, }); - it("should respect roots option", (done) => { + it("should respect roots option", (t, done) => { resolver.resolve({}, fixtures, "/fixtures/b.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixtures, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixtures, "b.js")); done(); }); }); - it("should try another root option, if it exists", (done) => { + it("should try another root option, if it exists", (t, done) => { resolver.resolve({}, fixtures, "/b.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixtures, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixtures, "b.js")); done(); }); }); - it("should respect extension", (done) => { + it("should respect extension", (t, done) => { resolver.resolve({}, fixtures, "/fixtures/b", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixtures, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixtures, "b.js")); done(); }); }); - it("should resolve in directory", (done) => { + it("should resolve in directory", (t, done) => { resolver.resolve( {}, fixtures, @@ -80,7 +83,8 @@ describe("roots", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixtures, "extensions/dir/index.js"), ); done(); @@ -88,16 +92,16 @@ describe("roots", () => { ); }); - it("should respect aliases", (done) => { + it("should respect aliases", (t, done) => { resolver.resolve({}, fixtures, "foo/b", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixtures, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixtures, "b.js")); done(); }); }); - it("should support roots options with resolveToContext", (done) => { + it("should support roots options with resolveToContext", (t, done) => { contextResolver.resolve( {}, fixtures, @@ -106,21 +110,21 @@ describe("roots", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixtures, "lib")); + assert.deepStrictEqual(result, path.resolve(fixtures, "lib")); done(); }, ); }); - it("should not work with relative path", (done) => { + it("should not work with relative path", (t, done) => { resolver.resolve({}, fixtures, "fixtures/b.js", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should resolve an absolute path (prefer absolute)", (done) => { + it("should resolve an absolute path (prefer absolute)", (t, done) => { resolverPreferAbsolute.resolve( {}, fixtures, @@ -129,34 +133,34 @@ describe("roots", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixtures, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixtures, "b.js")); done(); }, ); }); - it("should throw an error for empty requests (no root rewriting)", (done) => { + it("should throw an error for empty requests (no root rewriting)", (t, done) => { // Empty request should produce an error, not a root rewrite. resolver.resolve({}, fixtures, "", {}, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should work falls through for relative requests (no root rewriting)", (done) => { + it("should work falls through for relative requests (no root rewriting)", (t, done) => { // Relative request resolves normally (not via roots). resolver.resolve({}, fixtures, "./a.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.join(fixtures, "a.js")); + assert.deepStrictEqual(result, path.join(fixtures, "a.js")); done(); }); }); - it("should rewrites absolute-style requests against roots", (done) => { + it("should rewrites absolute-style requests against roots", (t, done) => { // Absolute request "/a.js" should be rewritten to roots[0] + /a.js resolver.resolve({}, fixtures, "/a.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.join(fixtures, "a.js")); + assert.deepStrictEqual(result, path.join(fixtures, "a.js")); done(); }); }); diff --git a/test/scoped-packages.test.js b/test/scoped-packages.test.js index a43e40f4..c06cc818 100644 --- a/test/scoped-packages.test.js +++ b/test/scoped-packages.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); @@ -14,33 +17,36 @@ const resolver = ResolverFactory.createResolver({ }); describe("scoped-packages", () => { - it("main field should work", (done) => { + it("main field should work", (t, done) => { resolver.resolve({}, fixture, "@scope/pack1", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/@scope/pack1/main.js"), ); done(); }); }); - it("browser field should work", (done) => { + it("browser field should work", (t, done) => { resolver.resolve({}, fixture, "@scope/pack2", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/@scope/pack2/main.js"), ); done(); }); }); - it("folder request should work", (done) => { + it("folder request should work", (t, done) => { resolver.resolve({}, fixture, "@scope/pack2/lib", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/@scope/pack2/lib/index.js"), ); done(); diff --git a/test/simple.test.js b/test/simple.test.js index a282967e..acd24776 100644 --- a/test/simple.test.js +++ b/test/simple.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const resolve = require("../"); const { CachedInputFileSystem, ResolverFactory } = require("../"); @@ -20,7 +23,7 @@ describe("simple", () => { ]; for (const pathToIt of pathsToIt) { - it(`should resolve itself callback ${pathToIt[2]}`, (done) => { + it(`should resolve itself callback ${pathToIt[2]}`, (t, done) => { resolve(pathToIt[0], pathToIt[1], (err, filename) => { if (err) { return done( @@ -28,13 +31,16 @@ describe("simple", () => { ); } - expect(filename).toBeDefined(); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); done(); }); }); - it(`should resolve itself callback ${pathToIt[2]} and accept context argument`, (done) => { + it(`should resolve itself callback ${pathToIt[2]} and accept context argument`, (t, done) => { resolve({}, pathToIt[0], pathToIt[1], (err, filename) => { if (err) { return done( @@ -42,13 +48,16 @@ describe("simple", () => { ); } - expect(filename).toBeDefined(); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); done(); }); }); - it(`should resolve itself callback ${pathToIt[2]} and accept a resolveContext argument`, (done) => { + it(`should resolve itself callback ${pathToIt[2]} and accept a resolveContext argument`, (t, done) => { const resolveContext = {}; resolve({}, pathToIt[0], pathToIt[1], resolveContext, (err, filename) => { if (err) { @@ -57,8 +66,11 @@ describe("simple", () => { ); } - expect(filename).toBeDefined(); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); done(); }); }); @@ -66,15 +78,21 @@ describe("simple", () => { it(`should resolve itself sync ${pathToIt[2]}`, () => { const filename = resolve.sync(pathToIt[0], pathToIt[1]); - expect(filename).toBeDefined(); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it(`should resolve itself sync ${pathToIt[2]} and accept a context argument`, () => { const filename = resolve.sync({}, pathToIt[0], pathToIt[1]); - expect(filename).toBeDefined(); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.notStrictEqual(filename, undefined); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it(`should resolve itself promise ${pathToIt[2]} and accept a resolveContext argument`, () => { @@ -86,21 +104,30 @@ describe("simple", () => { resolveContext, ); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it(`should resolve itself promise ${pathToIt[2]}`, async () => { const filename = await resolve.promise(pathToIt[0], pathToIt[1]); - expect(filename).toBeDefined(); - expect(typeof filename).toBe("string"); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.notStrictEqual(filename, undefined); + assert.strictEqual(typeof filename, "string"); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it(`should resolve itself promise ${pathToIt[2]} and accept a context argument`, async () => { const filename = await resolve.promise({}, pathToIt[0], pathToIt[1]); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it(`should resolve itself promise ${pathToIt[2]} and accept a resolveContext argument`, async () => { @@ -112,12 +139,15 @@ describe("simple", () => { resolveContext, ); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); } it("should reject on unresolvable requests", async () => { - await expect( + await assert.rejects( new Promise( /** * @param {(value: void) => void} res resolve @@ -130,22 +160,25 @@ describe("simple", () => { }); }, ), - ).rejects.toThrow(/Can't resolve/); + /Can't resolve/, + ); }); it("should reject on unresolvable requests sync", () => { - expect(() => - resolve.sync(__dirname, "this-module-should-not-exist"), - ).toThrow(/Can't resolve/); + assert.throws( + () => resolve.sync(__dirname, "this-module-should-not-exist"), + /Can't resolve/, + ); }); it("should reject on unresolvable requests promise", async () => { - await expect( + await assert.rejects( resolve.promise(__dirname, "this-module-should-not-exist"), - ).rejects.toThrow(/Can't resolve/); + /Can't resolve/, + ); }); - it("should create a async resolver", (done) => { + it("should create a async resolver", (t, done) => { const myResolve = resolve.create({ extensions: [".js", ".json", ".node"], }); @@ -156,12 +189,15 @@ describe("simple", () => { return; } - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); done(); }); }); - it("should create a async resolver and accepting context", (done) => { + it("should create a async resolver and accepting context", (t, done) => { const myResolve = resolve.create({ extensions: [".js", ".json", ".node"], }); @@ -172,7 +208,10 @@ describe("simple", () => { return; } - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); done(); }); }); @@ -182,7 +221,7 @@ describe("simple", () => { extensions: [".js"], }); - await expect( + await assert.rejects( new Promise( /** * @param {(value: void) => void} res resolve @@ -195,7 +234,8 @@ describe("simple", () => { }); }, ), - ).rejects.toThrow(/Can't resolve/); + /Can't resolve/, + ); }); it("should create a sync resolver", () => { @@ -204,7 +244,10 @@ describe("simple", () => { }); const filename = myResolve(__dirname, "../lib/index"); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it("should create a sync resolver and accepting context", () => { @@ -213,14 +256,18 @@ describe("simple", () => { }); const filename = myResolve({}, __dirname, "../lib/index"); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it("should create a sync resolver and throw an error on unresolvable request", () => { const myResolve = resolve.create.sync({ extensions: [".js"], }); - expect(() => myResolve(__dirname, "this-module-should-not-exist")).toThrow( + assert.throws( + () => myResolve(__dirname, "this-module-should-not-exist"), /Can't resolve/, ); }); @@ -231,7 +278,10 @@ describe("simple", () => { }); const filename = await myResolve(__dirname, "../lib/index"); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it("should create a promise resolver and accepting context", async () => { @@ -240,19 +290,23 @@ describe("simple", () => { }); const filename = await myResolve({}, __dirname, "../lib/index"); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it("should create a promise resolver and return rejected promise on unresolvable request", async () => { const myResolve = resolve.create.promise({ extensions: [".js"], }); - await expect( + await assert.rejects( myResolve(__dirname, "this-module-should-not-exist"), - ).rejects.toThrow(/Can't resolve/); + /Can't resolve/, + ); }); - it("should resolve via the Resolver.resolve method", (done) => { + it("should resolve via the Resolver.resolve method", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: new CachedInputFileSystem(fs, 4000), extensions: [".js", ".json", ".node"], @@ -264,12 +318,15 @@ describe("simple", () => { return; } - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); done(); }); }); - it("should resolve via the Resolver.resolve method with resolve context", (done) => { + it("should resolve via the Resolver.resolve method with resolve context", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: new CachedInputFileSystem(fs, 4000), extensions: [".js", ".json", ".node"], @@ -281,12 +338,15 @@ describe("simple", () => { return; } - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); done(); }); }); - it("should resolve via the Resolver.resolve method with context", (done) => { + it("should resolve via the Resolver.resolve method with context", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: new CachedInputFileSystem(fs, 4000), extensions: [".js", ".json", ".node"], @@ -298,12 +358,15 @@ describe("simple", () => { return; } - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); done(); }); }); - it("should resolve via the Resolver.resolve method with context and resolve context", (done) => { + it("should resolve via the Resolver.resolve method with context and resolve context", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: new CachedInputFileSystem(fs, 4000), extensions: [".js", ".json", ".node"], @@ -315,7 +378,10 @@ describe("simple", () => { return; } - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); done(); }); }); @@ -329,7 +395,10 @@ describe("simple", () => { const filename = resolver.resolveSync(__dirname, "../lib/index"); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it("should resolve via the Resolver.resolveSync method with resolve context", () => { @@ -341,7 +410,10 @@ describe("simple", () => { const filename = resolver.resolveSync(__dirname, "../lib/index", {}); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it("should resolve via the Resolver.resolveSync method with context", () => { @@ -353,7 +425,10 @@ describe("simple", () => { const filename = resolver.resolveSync({}, __dirname, "../lib/index"); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it("should resolve via the Resolver.resolveSync method with context and resolve context", () => { @@ -365,7 +440,10 @@ describe("simple", () => { const filename = resolver.resolveSync({}, __dirname, "../lib/index", {}); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it("should resolve via the Resolver.resolvePromise method", async () => { @@ -376,7 +454,10 @@ describe("simple", () => { const filename = await resolver.resolvePromise(__dirname, "../lib/index"); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it("should resolve via the Resolver.resolvePromise method with resolve context", async () => { @@ -391,7 +472,10 @@ describe("simple", () => { {}, ); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it("should resolve via the Resolver.resolvePromise method with context", async () => { @@ -406,7 +490,10 @@ describe("simple", () => { "../lib/index", ); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); it("should resolve via the Resolver.resolvePromise method with context and resolve context", async () => { @@ -421,7 +508,10 @@ describe("simple", () => { "../lib/index", ); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); }); describe("API", () => { @@ -433,61 +523,66 @@ describe("simple", () => { it("getHook returns the wrapped hook for 'before*' names", () => { const hook = resolver.getHook("beforeResolve"); - expect(typeof hook.tapAsync).toBe("function"); + assert.strictEqual(typeof hook.tapAsync, "function"); }); it("getHook returns the wrapped hook for 'after*' names", () => { const hook = resolver.getHook("afterResolve"); - expect(typeof hook.tapAsync).toBe("function"); + assert.strictEqual(typeof hook.tapAsync, "function"); }); it("getHook throws on an unknown hook name", () => { - expect(() => resolver.getHook("doesNotExist")).toThrow( - "Hook doesNotExist doesn't exist", + assert.throws( + () => resolver.getHook("doesNotExist"), + (err) => + err instanceof Error && + err.message.includes("Hook doesNotExist doesn't exist"), ); }); it("getHook returns the given hook instance as-is", () => { const hook = resolver.hooks.resolve; - expect(resolver.getHook(hook)).toBe(hook); + assert.strictEqual(resolver.getHook(hook), hook); }); it("ensureHook creates a hook when it does not exist", () => { const hook = resolver.ensureHook("customCreatedHook"); - expect(typeof hook.tapAsync).toBe("function"); + assert.strictEqual(typeof hook.tapAsync, "function"); // Calling again should return the same hook. const hook2 = resolver.ensureHook("customCreatedHook"); - expect(hook2).toBe(hook); + assert.strictEqual(hook2, hook); }); it("ensureHook wraps 'before*' and 'after*' names", () => { - expect(typeof resolver.ensureHook("beforeAnotherHook").tapAsync).toBe( + assert.strictEqual( + typeof resolver.ensureHook("beforeAnotherHook").tapAsync, "function", ); - expect(typeof resolver.ensureHook("afterAnotherHook").tapAsync).toBe( + assert.strictEqual( + typeof resolver.ensureHook("afterAnotherHook").tapAsync, "function", ); }); it("isModule recognizes module paths", () => { - expect(resolver.isModule("foo")).toBe(true); - expect(resolver.isModule("./foo")).toBe(false); - expect(resolver.isModule("/foo")).toBe(false); + assert.strictEqual(resolver.isModule("foo"), true); + assert.strictEqual(resolver.isModule("./foo"), false); + assert.strictEqual(resolver.isModule("/foo"), false); }); it("isPrivate recognizes internal paths", () => { - expect(resolver.isPrivate("#foo")).toBe(true); - expect(resolver.isPrivate("./foo")).toBe(false); + assert.strictEqual(resolver.isPrivate("#foo"), true); + assert.strictEqual(resolver.isPrivate("./foo"), false); }); it("isDirectory recognizes paths ending in /", () => { - expect(resolver.isDirectory("/foo/")).toBe(true); - expect(resolver.isDirectory("/foo")).toBe(false); + assert.strictEqual(resolver.isDirectory("/foo/"), true); + assert.strictEqual(resolver.isDirectory("/foo"), false); }); it("join and normalize delegate to util/path", () => { - expect(resolver.join("/a", "b")).toBe("/a/b"); - expect(resolver.normalize("/a/./b")).toBe("/a/b"); + assert.strictEqual(resolver.join("/a", "b"), "/a/b"); + assert.strictEqual(resolver.normalize("/a/./b"), "/a/b"); }); it("throws when resolveSync is used on a non-synchronous filesystem", () => { @@ -495,28 +590,33 @@ describe("simple", () => { fileSystem: nodeFileSystem, extensions: [".js"], }); - expect(() => asyncResolver.resolveSync({}, fixtures, "./a")).toThrow( - "Cannot 'resolveSync' because the fileSystem is not sync. Use 'resolve'!", + assert.throws( + () => asyncResolver.resolveSync({}, fixtures, "./a"), + (err) => + err instanceof Error && + err.message.includes( + "Cannot 'resolveSync' because the fileSystem is not sync. Use 'resolve'!", + ), ); }); - it("resolves when context is omitted", (done) => { + it("resolves when context is omitted", (t, done) => { resolver.resolve(fixtures, "./a", (err, result) => { if (err) return done(err); - expect(typeof result).toBe("string"); + assert.strictEqual(typeof result, "string"); done(); }); }); - it("resolves when context is omitted (with resolveContext)", (done) => { + it("resolves when context is omitted (with resolveContext)", (t, done) => { resolver.resolve(fixtures, "./a", {}, (err, result) => { if (err) return done(err); - expect(typeof result).toBe("string"); + assert.strictEqual(typeof result, "string"); done(); }); }); - it("reports an error when the path argument is not a string", (done) => { + it("reports an error when the path argument is not a string", (t, done) => { resolver.resolve( {}, // @ts-expect-error for tests @@ -524,16 +624,17 @@ describe("simple", () => { "./a", {}, (err) => { - expect(err).toBeInstanceOf(Error); - expect(/** @type {Error} */ (err).message).toMatch( - "path argument is not a string", + assert.ok(err instanceof Error); + assert.ok( + err /** @type {Error} */.message + .includes("path argument is not a string"), ); done(); }, ); }); - it("reports an error when the request argument is not a string", (done) => { + it("reports an error when the request argument is not a string", (t, done) => { resolver.resolve( {}, fixtures, @@ -541,24 +642,25 @@ describe("simple", () => { null, {}, (err) => { - expect(err).toBeInstanceOf(Error); - expect(/** @type {Error} */ (err).message).toMatch( - "request argument is not a string", + assert.ok(err instanceof Error); + assert.ok( + err /** @type {Error} */.message + .includes("request argument is not a string"), ); done(); }, ); }); - it("resolves when resolveContext is omitted", (done) => { + it("resolves when resolveContext is omitted", (t, done) => { resolver.resolve({}, fixtures, "./a", (err, result) => { if (err) return done(err); - expect(typeof result).toBe("string"); + assert.strictEqual(typeof result, "string"); done(); }); }); - it("resolves when resolveContext is null", (done) => { + it("resolves when resolveContext is null", (t, done) => { resolver.resolve( {}, fixtures, @@ -567,20 +669,25 @@ describe("simple", () => { null, (err, result) => { if (err) return done(err); - expect(typeof result).toBe("string"); + assert.strictEqual(typeof result, "string"); done(); }, ); }); it("throws when callback is not a function", () => { - expect(() => { - // @ts-expect-error for tests - resolver.resolve({}, fixtures, "./a", {}); - }).toThrow("callback argument is not a function"); + assert.throws( + () => { + // @ts-expect-error for tests + resolver.resolve({}, fixtures, "./a", {}); + }, + (err) => + err instanceof Error && + err.message.includes("callback argument is not a function"), + ); }); - it("invokes the noResolve hook on resolution failure", (done) => { + it("invokes the noResolve hook on resolution failure", (t, done) => { const customResolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -590,24 +697,25 @@ describe("simple", () => { failed.push({ request, err }); }); customResolver.resolve({}, fixtures, "./does-not-exist", {}, (err) => { - expect(err).toBeTruthy(); - expect(failed).toHaveLength(1); - expect(failed[0].err).toBe(err); + assert.ok(err); + assert.strictEqual(failed.length, 1); + assert.strictEqual(failed[0].err, err); done(); }); }); - it("populates error.details when a resolve fails", (done) => { + it("populates error.details when a resolve fails", (t, done) => { resolver.resolve({}, fixtures, "./does-not-exist", {}, (err) => { - expect(err).toBeInstanceOf(Error); - expect( + assert.ok(err instanceof Error); + assert.notStrictEqual( /** @type {Error & { details?: string }} */ (err).details, - ).toBeDefined(); + undefined, + ); done(); }); }); - it("populates error.details when a resolve fails and log is present", (done) => { + it("populates error.details when a resolve fails and log is present", (t, done) => { const log = []; resolver.resolve( {}, @@ -615,11 +723,12 @@ describe("simple", () => { "./does-not-exist", { log: (m) => log.push(m) }, (err) => { - expect(err).toBeInstanceOf(Error); - expect( + assert.ok(err instanceof Error); + assert.notStrictEqual( /** @type {Error & { details?: string }} */ (err).details, - ).toBeDefined(); - expect(log.length).toBeGreaterThan(0); + undefined, + ); + assert.ok(log.length > 0); done(); }, ); diff --git a/test/strip-json-comments.test.js b/test/strip-json-comments.test.js index 12098510..844d5f11 100644 --- a/test/strip-json-comments.test.js +++ b/test/strip-json-comments.test.js @@ -1,80 +1,83 @@ "use strict"; +const assert = require("assert"); +const { describe, it } = require("node:test"); + /* eslint-disable jsdoc/reject-any-type */ const stripJsonComments = require("../lib/util/strip-json-comments"); describe("util/strip-json-comments", () => { it("throws when given a non-string", () => { - expect(() => stripJsonComments(/** @type {any} */ (42))).toThrow(TypeError); + assert.throws(() => stripJsonComments(/** @type {any} */ (42)), TypeError); }); it("removes single-line comments (default: replace with whitespace)", () => { const input = '{"a": 1} // comment'; const result = stripJsonComments(input); - expect(result).toHaveLength(input.length); - expect(result.trim()).toBe('{"a": 1}'); + assert.strictEqual(result.length, input.length); + assert.strictEqual(result.trim(), '{"a": 1}'); }); it("removes single-line comments without whitespace when whitespace:false", () => { const result = stripJsonComments('{"a": 1} // comment', { whitespace: false, }); - expect(result).toBe('{"a": 1} '); + assert.strictEqual(result, '{"a": 1} '); }); it("handles single-line comments terminated by \\r\\n", () => { const result = stripJsonComments('{"a": 1} // c\r\n"b"'); - expect(result).toBe('{"a": 1} \r\n"b"'); + assert.strictEqual(result, '{"a": 1} \r\n"b"'); }); it("handles single-line comments terminated by \\n", () => { const input = '{"a": 1} // c\n"b"'; const result = stripJsonComments(input); - expect(result).toHaveLength(input.length); - expect(result).toContain("\n"); - expect(result).toContain('"b"'); + assert.strictEqual(result.length, input.length); + assert.ok(result.includes("\n")); + assert.ok(result.includes('"b"')); }); it("removes multi-line comments", () => { const input = '{"a": 1} /* a\nb */ "c"'; const result = stripJsonComments(input); - expect(result).toHaveLength(input.length); - expect(result).toContain('"c"'); - expect(result).not.toMatch("/*"); + assert.strictEqual(result.length, input.length); + assert.ok(result.includes('"c"')); + assert.ok(!result.includes("/*")); }); it("does not remove comments inside strings", () => { const result = stripJsonComments('{"a": "// not a comment"}'); - expect(result).toBe('{"a": "// not a comment"}'); + assert.strictEqual(result, '{"a": "// not a comment"}'); }); it("treats escaped quotes correctly", () => { const result = stripJsonComments('{"a": "x\\"//y"} // c'); - expect(result).toBe('{"a": "x\\"//y"} '); + assert.strictEqual(result, '{"a": "x\\"//y"} '); }); it("strips trailing commas when trailingCommas:true", () => { const result = stripJsonComments('{"a": 1,}', { trailingCommas: true }); - expect(result).toBe('{"a": 1 }'); + assert.strictEqual(result, '{"a": 1 }'); }); it("keeps non-trailing commas when trailingCommas:true", () => { const result = stripJsonComments('{"a": 1, "b": 2}', { trailingCommas: true, }); - expect(result).toBe('{"a": 1, "b": 2}'); + assert.strictEqual(result, '{"a": 1, "b": 2}'); }); it("strips trailing commas before ]", () => { const result = stripJsonComments("[1, 2, 3,]", { trailingCommas: true }); - expect(result).toBe("[1, 2, 3 ]"); + assert.strictEqual(result, "[1, 2, 3 ]"); }); it("handles an unterminated multiline comment at end of input", () => { const result = stripJsonComments('{"a": 1} /* unterminated'); // Multiline comments without closing */ are not stripped - expect(result).toBe('{"a": 1} /* unterminated'); + assert.strictEqual(result, '{"a": 1} /* unterminated'); }); it("parses valid JSONC into valid JSON", () => { @@ -84,7 +87,7 @@ describe("util/strip-json-comments", () => { trailingCommas: true, whitespace: true, }); - expect(() => JSON.parse(cleaned)).not.toThrow(); - expect(JSON.parse(cleaned)).toEqual({ a: 1, b: [1, 2] }); + assert.doesNotThrow(() => JSON.parse(cleaned)); + assert.deepStrictEqual(JSON.parse(cleaned), { a: 1, b: [1, 2] }); }); }); diff --git a/test/symlink.test.js b/test/symlink.test.js index cba9a7ae..a3759654 100644 --- a/test/symlink.test.js +++ b/test/symlink.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { afterEach, beforeEach, describe, it } = require("node:test"); + const { platform } = require("os"); const path = require("path"); const resolve = require("../"); @@ -210,19 +213,23 @@ describe("symlink", () => { "with symlinked directory in context path and symlinked directory (chained)", ], ]) { - it(`should resolve symlink to itself ${pathToIt[2]}`, (done) => { + it(`should resolve symlink to itself ${pathToIt[2]}`, (t, done) => { resolve(pathToIt[0], pathToIt[1], (err, filename) => { if (err) return done(err); - expect(filename).toBeDefined(); - expect(typeof filename).toBe("string"); - expect(filename).toEqual( + assert.notStrictEqual(filename, undefined); + assert.strictEqual(typeof filename, "string"); + assert.deepStrictEqual( + filename, path.join(__dirname, "..", "lib", "index.js"), ); resolveWithoutSymlinks(pathToIt[0], pathToIt[1], (err, filename) => { if (err) return done(err); - expect(typeof filename).toBe("string"); - expect(filename).toEqual(path.resolve(pathToIt[0], pathToIt[1])); + assert.strictEqual(typeof filename, "string"); + assert.deepStrictEqual( + filename, + path.resolve(pathToIt[0], pathToIt[1]), + ); done(); }); }); @@ -230,18 +237,23 @@ describe("symlink", () => { it(`should resolve symlink to itself sync ${pathToIt[2]}`, () => { let filename = resolve.sync(pathToIt[0], pathToIt[1]); - expect(filename).toBeDefined(); - expect(typeof filename).toBe("string"); - expect(filename).toEqual(path.join(__dirname, "..", "lib", "index.js")); + assert.notStrictEqual(filename, undefined); + assert.strictEqual(typeof filename, "string"); + assert.deepStrictEqual( + filename, + path.join(__dirname, "..", "lib", "index.js"), + ); filename = resolveSyncWithoutSymlinks(pathToIt[0], pathToIt[1]); - expect(typeof filename).toBe("string"); - expect(filename).toEqual(path.resolve(pathToIt[0], pathToIt[1])); + assert.strictEqual(typeof filename, "string"); + assert.deepStrictEqual( + filename, + path.resolve(pathToIt[0], pathToIt[1]), + ); }); } } else { - // eslint-disable-next-line jest/expect-expect it("cannot test symlinks because we have no permission to create them", () => { // Nothing }); diff --git a/test/tsconfig-paths.test.js b/test/tsconfig-paths.test.js index 29eeb1d8..7f83f19d 100644 --- a/test/tsconfig-paths.test.js +++ b/test/tsconfig-paths.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const { ResolverFactory } = require("../"); @@ -52,7 +55,7 @@ const extendsUnscopedPkgDir = path.resolve( ); describe("TsconfigPathsPlugin", () => { - it("resolves exact mapped path '@components/*' via tsconfig option (example)", (done) => { + it("resolves exact mapped path '@components/*' via tsconfig option (example)", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -70,7 +73,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(baseExampleDir, "src", "components", "button.ts"), ); done(); @@ -78,7 +82,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("when multiple patterns match a module specifier, the pattern with the longest matching prefix before any * token is used:", (done) => { + it("when multiple patterns match a module specifier, the pattern with the longest matching prefix before any * token is used:", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -90,13 +94,15 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, baseExampleDir, "longest/bar", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(baseExampleDir, "src", "mapped", "longest", "three.ts"), ); resolver.resolve({}, baseExampleDir, "longest/bar", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(baseExampleDir, "src", "mapped", "longest", "three.ts"), ); done(); @@ -104,7 +110,7 @@ describe("TsconfigPathsPlugin", () => { }); }); - it("resolves exact mapped path 'foo' via tsconfig option (example)", (done) => { + it("resolves exact mapped path 'foo' via tsconfig option (example)", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -117,14 +123,15 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, baseExampleDir, "foo", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(baseExampleDir, "src", "mapped", "foo", "index.ts"), ); done(); }); }); - it("resolves wildcard mapped path 'bar/*' via tsconfig option (example)", (done) => { + it("resolves wildcard mapped path 'bar/*' via tsconfig option (example)", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -137,14 +144,15 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, baseExampleDir, "bar/file1", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(baseExampleDir, "src", "mapped", "bar", "file1.ts"), ); done(); }); }); - it("resolves wildcard mapped path '*/old-file' to specific file via tsconfig option (example)", (done) => { + it("resolves wildcard mapped path '*/old-file' to specific file via tsconfig option (example)", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -162,7 +170,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(baseExampleDir, "src", "components", "new-file.ts"), ); done(); @@ -170,7 +179,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("falls through when no mapping exists (example)", (done) => { + it("falls through when no mapping exists (example)", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -186,8 +195,8 @@ describe("TsconfigPathsPlugin", () => { "does-not-exist", {}, (err, result) => { - expect(err).toBeInstanceOf(Error); - expect(result).toBeUndefined(); + assert.ok(err instanceof Error); + assert.strictEqual(result, undefined); done(); }, ); @@ -203,15 +212,17 @@ describe("TsconfigPathsPlugin", () => { useSyncFileSystemCalls: true, }); - expect(resolver.resolveSync({}, baseExampleDir, "@components/button")).toBe( + assert.strictEqual( + resolver.resolveSync({}, baseExampleDir, "@components/button"), path.join(baseExampleDir, "src", "components", "button.ts"), ); - expect(resolver.resolveSync({}, baseExampleDir, "bar/file1")).toBe( + assert.strictEqual( + resolver.resolveSync({}, baseExampleDir, "bar/file1"), path.join(baseExampleDir, "src", "mapped", "bar", "file1.ts"), ); - expect(() => { + assert.throws(() => { resolver.resolveSync({}, baseExampleDir, "does-not-exist"); - }).toThrow(/Can't resolve 'does-not-exist'/); + }, /Can't resolve 'does-not-exist'/); }); it("resolveSync surfaces missing-tsconfig errors instead of fileSystem-not-sync", () => { @@ -221,12 +232,12 @@ describe("TsconfigPathsPlugin", () => { useSyncFileSystemCalls: true, }); - expect(() => { + assert.throws(() => { resolver.resolveSync(process.cwd(), "test"); - }).toThrow(/Can't resolve 'test'/); + }, /Can't resolve 'test'/); }); - it("resolves '@components/*' using extends from extendsExampleDir project", (done) => { + it("resolves '@components/*' using extends from extendsExampleDir project", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -242,7 +253,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(extendsExampleDir, "src", "components", "button.ts"), ); done(); @@ -250,7 +262,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("resolves '@utils/*' using extends from extendsExampleDir project", (done) => { + it("resolves '@utils/*' using extends from extendsExampleDir project", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -267,7 +279,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(extendsExampleDir, "src", "utils", "date.ts"), ); done(); @@ -276,7 +289,7 @@ describe("TsconfigPathsPlugin", () => { }); describe("Path wildcard patterns", () => { - it("resolves 'foo/*' wildcard pattern", (done) => { + it("resolves 'foo/*' wildcard pattern", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -288,14 +301,15 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, baseExampleDir, "foo/file1", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result for foo")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(baseExampleDir, "src", "mapped", "bar", "file1.ts"), ); done(); }); }); - it("resolves '*' catch-all pattern to src/mapped/star/*", (done) => { + it("resolves '*' catch-all pattern to src/mapped/star/*", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -313,7 +327,8 @@ describe("TsconfigPathsPlugin", () => { (err, resultStar) => { if (err) return done(err); if (!resultStar) return done(new Error("No result for star/*")); - expect(resultStar).toEqual( + assert.deepStrictEqual( + resultStar, path.join( baseExampleDir, "src", @@ -328,7 +343,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("resolves package with mainFields", (done) => { + it("resolves package with mainFields", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -348,7 +363,8 @@ describe("TsconfigPathsPlugin", () => { if (!result) { return done(new Error("No result for main-field-package")); } - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join( baseExampleDir, "src", @@ -363,7 +379,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("resolves package with browser field", (done) => { + it("resolves package with browser field", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -383,7 +399,8 @@ describe("TsconfigPathsPlugin", () => { if (!result) { return done(new Error("No result for browser-field-package")); } - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join( baseExampleDir, "src", @@ -398,7 +415,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("resolves package with default index.ts", (done) => { + it("resolves package with default index.ts", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -418,7 +435,8 @@ describe("TsconfigPathsPlugin", () => { if (!result) { return done(new Error("No result for no-main-field-package")); } - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join( baseExampleDir, "src", @@ -434,7 +452,7 @@ describe("TsconfigPathsPlugin", () => { }); }); - it("should resolve paths when extending from npm package (node_modules)", (done) => { + it("should resolve paths when extending from npm package (node_modules)", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -453,13 +471,13 @@ describe("TsconfigPathsPlugin", () => { if (err) return done(err); if (!result) return done(new Error("No result")); // Should resolve to utils or components based on the paths in react/tsconfig.json - expect(result).toMatch(/src[\\/](utils|components)[\\/]button\.ts$/); + assert.match(result, /src[\\/](utils|components)[\\/]button\.ts$/); done(); }, ); }); - it("should handle malformed tsconfig.json gracefully", (done) => { + it("should handle malformed tsconfig.json gracefully", (t, done) => { const malformedExampleDir = path.resolve( __dirname, "fixtures", @@ -482,8 +500,8 @@ describe("TsconfigPathsPlugin", () => { "@components/button", {}, (err, result) => { - expect(err).toBeInstanceOf(Error); - expect(result).toBeUndefined(); + assert.ok(err instanceof Error); + assert.strictEqual(result, undefined); done(); }, ); @@ -492,7 +510,7 @@ describe("TsconfigPathsPlugin", () => { // eslint-disable-next-line no-template-curly-in-string describe("${configDir} template variable support", () => { // eslint-disable-next-line no-template-curly-in-string - it("should substitute ${configDir} in path mappings", (done) => { + it("should substitute ${configDir} in path mappings", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -510,7 +528,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(baseExampleDir, "src", "components", "button.ts"), ); done(); @@ -519,7 +538,7 @@ describe("TsconfigPathsPlugin", () => { }); // eslint-disable-next-line no-template-curly-in-string - it("should substitute ${configDir} in multiple path patterns", (done) => { + it("should substitute ${configDir} in multiple path patterns", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -532,7 +551,8 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, baseExampleDir, "@utils/date", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(baseExampleDir, "src", "utils", "date.ts"), ); @@ -540,7 +560,8 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, baseExampleDir, "foo", {}, (err2, result2) => { if (err2) return done(err2); if (!result2) return done(new Error("No result for foo")); - expect(result2).toEqual( + assert.deepStrictEqual( + result2, path.join(baseExampleDir, "src", "mapped", "foo", "index.ts"), ); done(); @@ -549,7 +570,7 @@ describe("TsconfigPathsPlugin", () => { }); // eslint-disable-next-line no-template-curly-in-string - it("should substitute ${configDir} in referenced projects", (done) => { + it("should substitute ${configDir} in referenced projects", (t, done) => { const appDir = path.join(referencesProjectDir, "packages", "app"); const resolver = ResolverFactory.createResolver({ fileSystem, @@ -566,13 +587,13 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, appDir, "@app/index", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.join(appDir, "src", "index.ts")); + assert.deepStrictEqual(result, path.join(appDir, "src", "index.ts")); done(); }); }); // eslint-disable-next-line no-template-curly-in-string - it("should substitute ${configDir} in extends field", (done) => { + it("should substitute ${configDir} in extends field", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -590,7 +611,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(extendsExampleDir, "src", "components", "button.ts"), ); done(); @@ -598,7 +620,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("should handle circular extends without hanging", (done) => { + it("should handle circular extends without hanging", (t, done) => { const aDir = path.join(extendsCircularDir, "a"); const resolver = ResolverFactory.createResolver({ fileSystem, @@ -612,13 +634,13 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, aDir, "@lib/foo", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.join(aDir, "src", "lib", "foo.ts")); + assert.deepStrictEqual(result, path.join(aDir, "src", "lib", "foo.ts")); done(); }); }); // eslint-disable-next-line no-template-curly-in-string - it("should substitute ${configDir} in references field", (done) => { + it("should substitute ${configDir} in references field", (t, done) => { const sharedDir = path.join(referencesProjectDir, "packages", "shared"); const resolver = ResolverFactory.createResolver({ fileSystem, @@ -635,7 +657,8 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, sharedDir, "@shared/helper", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(sharedDir, "src", "utils", "helper.ts"), ); done(); @@ -643,7 +666,7 @@ describe("TsconfigPathsPlugin", () => { }); }); - it("should override baseUrl from tsconfig with option", (done) => { + it("should override baseUrl from tsconfig with option", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -663,7 +686,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(baseExampleDir, "src", "utils", "date.ts"), ); done(); @@ -671,7 +695,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("should use baseUrl from tsconfig when not overridden", (done) => { + it("should use baseUrl from tsconfig when not overridden", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -692,7 +716,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(baseExampleDir, "src", "utils", "date.ts"), ); done(); @@ -701,7 +726,7 @@ describe("TsconfigPathsPlugin", () => { }); describe("TypeScript Project References", () => { - it("should support tsconfig object format with configFile", (done) => { + it("should support tsconfig object format with configFile", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -721,7 +746,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(baseExampleDir, "src", "components", "button.ts"), ); done(); @@ -729,7 +755,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("should resolve own paths (without cross-project references)", (done) => { + it("should resolve own paths (without cross-project references)", (t, done) => { const appDir = path.join(referencesProjectDir, "packages", "app"); const resolver = ResolverFactory.createResolver({ fileSystem, @@ -746,17 +772,17 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, appDir, "@app/index", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.join(appDir, "src", "index.ts")); + assert.deepStrictEqual(result, path.join(appDir, "src", "index.ts")); // @shared/* from app context should fail (not in app's paths) resolver.resolve({}, appDir, "@shared/utils/helper", {}, (err2) => { - expect(err2).toBeInstanceOf(Error); + assert.ok(err2 instanceof Error); done(); }); }); }); - it("should resolve self-references within a referenced project", (done) => { + it("should resolve self-references within a referenced project", (t, done) => { const appDir = path.join(referencesProjectDir, "packages", "app"); const sharedDir = path.join(referencesProjectDir, "packages", "shared"); @@ -775,14 +801,15 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, sharedDir, "@shared/helper", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(sharedDir, "src", "utils", "helper.ts"), ); done(); }); }); - it("should support explicit references array", (done) => { + it("should support explicit references array", (t, done) => { const appDir = path.join(referencesProjectDir, "packages", "app"); const sharedSrcDir = path.join( referencesProjectDir, @@ -811,13 +838,16 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.join(sharedSrcDir, "utils", "helper.ts")); + assert.deepStrictEqual( + result, + path.join(sharedSrcDir, "utils", "helper.ts"), + ); done(); }, ); }); - it("should not load references when references option is omitted", (done) => { + it("should not load references when references option is omitted", (t, done) => { const appDir = path.join(referencesProjectDir, "packages", "app"); const resolver = ResolverFactory.createResolver({ fileSystem, @@ -832,12 +862,12 @@ describe("TsconfigPathsPlugin", () => { // @shared/* should fail because references are not loaded resolver.resolve({}, appDir, "@shared/utils/helper", {}, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should handle nested references (when a referenced project has its own references)", (done) => { + it("should handle nested references (when a referenced project has its own references)", (t, done) => { const appDir = path.join(referencesProjectDir, "packages", "app"); const utilsSrcDir = path.join( referencesProjectDir, @@ -862,13 +892,16 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, utilsSrcDir, "@utils/date", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.join(utilsSrcDir, "core", "date.ts")); + assert.deepStrictEqual( + result, + path.join(utilsSrcDir, "core", "date.ts"), + ); done(); }); }); describe("modules resolution with references", () => { - it("should resolve modules from main project's baseUrl", (done) => { + it("should resolve modules from main project's baseUrl", (t, done) => { const appDir = path.join(referencesProjectDir, "packages", "app"); const resolver = ResolverFactory.createResolver({ fileSystem, @@ -890,7 +923,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(appDir, "src", "components", "Button.ts"), ); done(); @@ -898,7 +932,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("should resolve modules from referenced project's baseUrl (self-reference)", (done) => { + it("should resolve modules from referenced project's baseUrl (self-reference)", (t, done) => { const appDir = path.join(referencesProjectDir, "packages", "app"); const sharedSrcDir = path.join( referencesProjectDir, @@ -927,7 +961,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(sharedSrcDir, "utils", "helper.ts"), ); done(); @@ -935,7 +970,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("should resolve components from referenced project's baseUrl", (done) => { + it("should resolve components from referenced project's baseUrl", (t, done) => { const appDir = path.join(referencesProjectDir, "packages", "app"); const sharedSrcDir = path.join( referencesProjectDir, @@ -964,7 +999,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(sharedSrcDir, "components", "Input.ts"), ); done(); @@ -972,7 +1008,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("should use correct baseUrl based on request context", (done) => { + it("should use correct baseUrl based on request context", (t, done) => { const appDir = path.join(referencesProjectDir, "packages", "app"); const sharedDir = path.join(referencesProjectDir, "packages", "shared"); @@ -991,7 +1027,7 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, appDir, "src/index", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result from app")); - expect(result).toEqual(path.join(appDir, "src", "index.ts")); + assert.deepStrictEqual(result, path.join(appDir, "src", "index.ts")); // From shared context, 'utils/helper' should resolve to shared/src/utils/helper resolver.resolve( @@ -1002,7 +1038,8 @@ describe("TsconfigPathsPlugin", () => { (err2, result2) => { if (err2) return done(err2); if (!result2) return done(new Error("No result from shared")); - expect(result2).toEqual( + assert.deepStrictEqual( + result2, path.join(sharedDir, "src", "utils", "helper.ts"), ); done(); @@ -1011,7 +1048,7 @@ describe("TsconfigPathsPlugin", () => { }); }); - it("should support explicit references with modules resolution", (done) => { + it("should support explicit references with modules resolution", (t, done) => { const appDir = path.join(referencesProjectDir, "packages", "app"); const sharedSrcDir = path.join( referencesProjectDir, @@ -1040,7 +1077,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(sharedSrcDir, "utils", "helper.ts"), ); done(); @@ -1067,7 +1105,7 @@ describe("TsconfigPathsPlugin", () => { ); const refDir = path.join(referencesPriorityDir, "ref"); - it("resolves @lib/foo from the main context to main's target", (done) => { + it("resolves @lib/foo from the main context to main's target", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -1087,7 +1125,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(referencesPriorityDir, "main-lib", "foo.ts"), ); done(); @@ -1095,7 +1134,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("resolves @lib/foo from the reference context to the reference's target", (done) => { + it("resolves @lib/foo from the reference context to the reference's target", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -1110,12 +1149,15 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, refDir, "@lib/foo", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.join(refDir, "ref-lib", "foo.ts")); + assert.deepStrictEqual( + result, + path.join(refDir, "ref-lib", "foo.ts"), + ); done(); }); }); - it("reference paths do not leak into a sibling/unrelated main lookup", (done) => { + it("reference paths do not leak into a sibling/unrelated main lookup", (t, done) => { // When references are loaded but the request is made from the // main context, the reference's alias target must not win over // the main's target — even if the reference's target also exists. @@ -1137,7 +1179,10 @@ describe("TsconfigPathsPlugin", () => { {}, (err, result) => { if (err) return done(err); - expect(result).not.toEqual(path.join(refDir, "ref-lib", "foo.ts")); + assert.notDeepStrictEqual( + result, + path.join(refDir, "ref-lib", "foo.ts"), + ); done(); }, ); @@ -1153,7 +1198,7 @@ describe("TsconfigPathsPlugin", () => { "extends-deep-baseurl", ); - it("should resolve paths whose baseUrl comes from a grandparent extends in a non-sibling directory", (done) => { + it("should resolve paths whose baseUrl comes from a grandparent extends in a non-sibling directory", (t, done) => { const appDir = path.join(deepBaseUrlDir, "packages", "app"); const resolver = ResolverFactory.createResolver({ fileSystem, @@ -1166,7 +1211,8 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, appDir, "@base/utils/format", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join( deepBaseUrlDir, "tsconfig-base", @@ -1188,7 +1234,7 @@ describe("TsconfigPathsPlugin", () => { "extends-pkg-entry", ); - it("should resolve paths inherited from a scoped npm package tsconfig (extends '@my-tsconfig/base')", (done) => { + it("should resolve paths inherited from a scoped npm package tsconfig (extends '@my-tsconfig/base')", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -1200,7 +1246,8 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, pkgEntryDir, "@pkg/util", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join( pkgEntryDir, "node_modules", @@ -1215,7 +1262,7 @@ describe("TsconfigPathsPlugin", () => { }); }); - it("should not error when tsconfig is true but tsconfig.json does not exist", (done) => { + it("should not error when tsconfig is true but tsconfig.json does not exist", (t, done) => { const noTsconfigDir = path.resolve( __dirname, "fixtures", @@ -1235,12 +1282,15 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, noTsconfigDir, "./src/index", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.join(noTsconfigDir, "src", "index.ts")); + assert.deepStrictEqual( + result, + path.join(noTsconfigDir, "src", "index.ts"), + ); done(); }); }); - it("should error when tsconfig is an explicit path but the file does not exist", (done) => { + it("should error when tsconfig is an explicit path but the file does not exist", (t, done) => { const noTsconfigDir = path.resolve( __dirname, "fixtures", @@ -1258,9 +1308,12 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, noTsconfigDir, "./src/index", {}, (err, result) => { try { - expect(err).toBeTruthy(); - expect(/** @type {NodeJS.ErrnoException} */ (err).code).toBe("ENOENT"); - expect(result).toBeUndefined(); + assert.ok(err); + assert.strictEqual( + /** @type {NodeJS.ErrnoException} */ (err).code, + "ENOENT", + ); + assert.strictEqual(result, undefined); done(); } catch (err_) { done(err_); @@ -1276,7 +1329,7 @@ describe("TsconfigPathsPlugin", () => { "upward-traversal", ); - it("should find tsconfig.json in parent directory when resolving from subdirectory", (done) => { + it("should find tsconfig.json in parent directory when resolving from subdirectory", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -1294,7 +1347,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(upwardDir, "src", "utils", "helper.ts"), ); done(); @@ -1302,7 +1356,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("should still fall through when no tsconfig.json exists anywhere up", (done) => { + it("should still fall through when no tsconfig.json exists anywhere up", (t, done) => { const noTsconfigDir = path.resolve( __dirname, "fixtures", @@ -1321,7 +1375,10 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, noTsconfigDir, "./src/index", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.join(noTsconfigDir, "src", "index.ts")); + assert.deepStrictEqual( + result, + path.join(noTsconfigDir, "src", "index.ts"), + ); done(); }); }); @@ -1335,7 +1392,7 @@ describe("TsconfigPathsPlugin", () => { "no-baseurl-upward", ); - it("should resolve node_modules package instead of matching a file at tsconfig root", (done) => { + it("should resolve node_modules package instead of matching a file at tsconfig root", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".js", ".json"], @@ -1357,7 +1414,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join( noBaseUrlDir, "subdir", @@ -1380,7 +1438,7 @@ describe("TsconfigPathsPlugin", () => { "jsonc-comments", ); - it("should parse tsconfig.json with line comments (//)", (done) => { + it("should parse tsconfig.json with line comments (//)", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -1398,7 +1456,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(jsoncExampleDir, "src", "components", "button.ts"), ); done(); @@ -1406,7 +1465,7 @@ describe("TsconfigPathsPlugin", () => { ); }); - it("should parse tsconfig.json with block comments (/* */)", (done) => { + it("should parse tsconfig.json with block comments (/* */)", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -1419,14 +1478,15 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, jsoncExampleDir, "bar/index", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(jsoncExampleDir, "src", "mapped", "bar", "index.ts"), ); done(); }); }); - it("should parse tsconfig.json with mixed comments", (done) => { + it("should parse tsconfig.json with mixed comments", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -1439,7 +1499,8 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, jsoncExampleDir, "foo", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(jsoncExampleDir, "src", "mapped", "foo", "index.ts"), ); done(); @@ -1448,7 +1509,7 @@ describe("TsconfigPathsPlugin", () => { }); describe("bug: circular project references should not cause infinite recursion", () => { - it("should handle circular references without hanging or crashing", (done) => { + it("should handle circular references without hanging or crashing", (t, done) => { const aDir = path.join(referencesCircularDir, "a"); const resolver = ResolverFactory.createResolver({ fileSystem, @@ -1465,12 +1526,12 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, aDir, "@a/index", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.join(aDir, "src", "index.ts")); + assert.deepStrictEqual(result, path.join(aDir, "src", "index.ts")); done(); }); }); - it("should resolve paths from a circular-referenced project", (done) => { + it("should resolve paths from a circular-referenced project", (t, done) => { const aDir = path.join(referencesCircularDir, "a"); const bDir = path.join(referencesCircularDir, "b"); const resolver = ResolverFactory.createResolver({ @@ -1488,7 +1549,7 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, bDir, "@b/index", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.join(bDir, "src", "index.ts")); + assert.deepStrictEqual(result, path.join(bDir, "src", "index.ts")); done(); }); }); @@ -1502,7 +1563,7 @@ describe("TsconfigPathsPlugin", () => { "scoped-pkg-fallthrough", ); - it("should resolve '@helper' via the '@*' mapping when the mapped path exists", (done) => { + it("should resolve '@helper' via the '@*' mapping when the mapped path exists", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx", ".js"], @@ -1514,14 +1575,15 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, scopedPkgDir, "@helper", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(scopedPkgDir, "src", "helper", "index.ts"), ); done(); }); }); - it("should fall through to node_modules for '@sentry/react' when '@*' mapping does not resolve", (done) => { + it("should fall through to node_modules for '@sentry/react' when '@*' mapping does not resolve", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx", ".js"], @@ -1533,7 +1595,8 @@ describe("TsconfigPathsPlugin", () => { resolver.resolve({}, scopedPkgDir, "@sentry/react", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join( scopedPkgDir, "node_modules", @@ -1548,7 +1611,7 @@ describe("TsconfigPathsPlugin", () => { }); describe("bug: unscoped npm package in extends field", () => { - it("should resolve paths inherited from an unscoped npm package tsconfig (extends 'my-base-config')", (done) => { + it("should resolve paths inherited from an unscoped npm package tsconfig (extends 'my-base-config')", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -1565,7 +1628,8 @@ describe("TsconfigPathsPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join( extendsUnscopedPkgDir, "node_modules", diff --git a/test/unsafe-cache.test.js b/test/unsafe-cache.test.js index 63d6e421..27185bb0 100644 --- a/test/unsafe-cache.test.js +++ b/test/unsafe-cache.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { beforeEach, describe, it } = require("node:test"); + const path = require("path"); const resolve = require("../"); @@ -75,13 +78,13 @@ describe("unsafe-cache", () => { }); }); - it("should cache request", (done) => { + it("should cache request", (t, done) => { cachedResolve( path.join(__dirname, "fixtures"), "m2/b", (err, _result) => { if (err) return done(err); - expect(Object.keys(cache)).toHaveLength(1); + assert.strictEqual(Object.keys(cache).length, 1); for (const key of Object.keys(cache)) { cache[key] = { path: "yep", @@ -92,7 +95,7 @@ describe("unsafe-cache", () => { "m2/b", (err, result) => { if (err) return done(err); - expect(result).toBe("yep"); + assert.strictEqual(result, "yep"); done(); }, ); @@ -100,14 +103,14 @@ describe("unsafe-cache", () => { ); }); - it("should not return from cache if context does not match", (done) => { + it("should not return from cache if context does not match", (t, done) => { cachedResolve( context, path.join(__dirname, "fixtures"), "m2/b", (err, _result) => { if (err) return done(err); - expect(Object.keys(cache)).toHaveLength(1); + assert.strictEqual(Object.keys(cache).length, 1); for (const key of Object.keys(cache)) { cache[key] = { path: "yep", @@ -119,7 +122,7 @@ describe("unsafe-cache", () => { "m2/b", (err, result) => { if (err) return done(err); - expect(result).not.toBe("yep"); + assert.notStrictEqual(result, "yep"); done(); }, ); @@ -127,13 +130,13 @@ describe("unsafe-cache", () => { ); }); - it("should not return from cache if query does not match", (done) => { + it("should not return from cache if query does not match", (t, done) => { cachedResolve( path.join(__dirname, "fixtures"), "m2/b?query", (err, _result) => { if (err) return done(err); - expect(Object.keys(cache)).toHaveLength(1); + assert.strictEqual(Object.keys(cache).length, 1); for (const key of Object.keys(cache)) { cache[key] = { path: "yep", @@ -144,7 +147,7 @@ describe("unsafe-cache", () => { "m2/b?query2", (err, result) => { if (err) return done(err); - expect(result).not.toBe("yep"); + assert.notStrictEqual(result, "yep"); done(); }, ); @@ -162,14 +165,14 @@ describe("unsafe-cache", () => { }); }); - it("should cache request", (done) => { + it("should cache request", (t, done) => { cachedResolve( context, path.join(__dirname, "fixtures"), "m2/b", (err, _result) => { if (err) return done(err); - expect(Object.keys(cache)).toHaveLength(1); + assert.strictEqual(Object.keys(cache).length, 1); for (const key of Object.keys(cache)) { cache[key] = { path: "yep", @@ -181,7 +184,7 @@ describe("unsafe-cache", () => { "m2/b", (err, result) => { if (err) return done(err); - expect(result).toBe("yep"); + assert.strictEqual(result, "yep"); done(); }, ); @@ -189,14 +192,14 @@ describe("unsafe-cache", () => { ); }); - it("should return from cache even if context does not match", (done) => { + it("should return from cache even if context does not match", (t, done) => { cachedResolve( context, path.join(__dirname, "fixtures"), "m2/b", (err, _result) => { if (err) return done(err); - expect(Object.keys(cache)).toHaveLength(1); + assert.strictEqual(Object.keys(cache).length, 1); for (const key of Object.keys(cache)) { cache[key] = { path: "yep", @@ -208,7 +211,7 @@ describe("unsafe-cache", () => { "m2/b", (err, result) => { if (err) return done(err); - expect(result).toBe("yep"); + assert.strictEqual(result, "yep"); done(); }, ); @@ -226,33 +229,55 @@ describe("unsafe-cache", () => { }); it("should keep bare specifier cache keys tied to the lookup directory", () => { - expect(cachedResolve(deepContext, "react")).toBe(rootReactTarget); + assert.strictEqual(cachedResolve(deepContext, "react"), rootReactTarget); poisonCache("cache-hit"); - expect(cachedResolve(shallowContext, "react")).toBe(rootReactTarget); + assert.strictEqual( + cachedResolve(shallowContext, "react"), + rootReactTarget, + ); }); it("should reuse cached results for relative requests inside one package", () => { - expect(cachedResolve(deepContext, "../../shared")).toBe(rootSharedTarget); + assert.strictEqual( + cachedResolve(deepContext, "../../shared"), + rootSharedTarget, + ); poisonCache("cache-hit"); - expect(cachedResolve(shallowContext, "../shared")).toBe("cache-hit"); + assert.strictEqual( + cachedResolve(shallowContext, "../shared"), + "cache-hit", + ); }); it("should not reuse cached results across package boundaries", () => { - expect(cachedResolve(deepContext, "react")).toBe(rootReactTarget); + assert.strictEqual(cachedResolve(deepContext, "react"), rootReactTarget); poisonCache("cache-hit"); - expect(cachedResolve(nestedContext, "react")).toBe(nestedReactTarget); + assert.strictEqual( + cachedResolve(nestedContext, "react"), + nestedReactTarget, + ); }); it("should not reuse cached bare specifiers when a nested node_modules shadows the package root", () => { - expect(cachedResolve(shallowContext, "react")).toBe(rootReactTarget); + assert.strictEqual( + cachedResolve(shallowContext, "react"), + rootReactTarget, + ); poisonCache("cache-hit"); - expect(cachedResolve(shadowedContext, "react")).toBe(shadowedReactTarget); + assert.strictEqual( + cachedResolve(shadowedContext, "react"), + shadowedReactTarget, + ); }); it("should keep relative requests distinct from bare specifiers", () => { - expect(cachedResolve(deepContext, "../../shared")).toBe(rootSharedTarget); + assert.strictEqual( + cachedResolve(deepContext, "../../shared"), + rootSharedTarget, + ); poisonCache("cache-hit"); - expect(cachedResolve(shallowContext, "shared")).toBe( + assert.strictEqual( + cachedResolve(shallowContext, "shared"), rootSharedPackageTarget, ); }); @@ -261,7 +286,7 @@ describe("unsafe-cache", () => { describe("unsafe-cache more tests", () => { const fixtures = path.join(__dirname, "fixtures"); - it("passes through without caching when cachePredicate returns false", (done) => { + it("passes through without caching when cachePredicate returns false", (t, done) => { const cache = {}; const cachedResolve = resolve.create({ // @ts-expect-error for tests @@ -270,13 +295,13 @@ describe("unsafe-cache", () => { }); cachedResolve(fixtures, "./a.js", (err, result) => { if (err) return done(err); - expect(result).toEqual(path.join(fixtures, "a.js")); - expect(Object.keys(cache)).toHaveLength(0); + assert.deepStrictEqual(result, path.join(fixtures, "a.js")); + assert.strictEqual(Object.keys(cache).length, 0); done(); }); }); - it("returns a poisoned cache entry on a re-resolve (non-array branch)", (done) => { + it("returns a poisoned cache entry on a re-resolve (non-array branch)", (t, done) => { const cache = {}; const cachedResolve = resolve.create({ // @ts-expect-error for tests @@ -289,7 +314,7 @@ describe("unsafe-cache", () => { } cachedResolve(fixtures, "./a.js", (err2, result) => { if (err2) return done(err2); - expect(result).toBe("poisoned"); + assert.strictEqual(result, "poisoned"); done(); }); }); diff --git a/test/util-fs.test.js b/test/util-fs.test.js index 63ff34a7..f4a2ef76 100644 --- a/test/util-fs.test.js +++ b/test/util-fs.test.js @@ -1,5 +1,8 @@ "use strict"; +const assert = require("assert"); +const { describe, it } = require("node:test"); + /* eslint-disable jsdoc/reject-any-type */ // `readJson` is the JSONC loader used internally by TsconfigPathsPlugin. @@ -34,7 +37,7 @@ describe("util/fs readJson", () => { }, }); const result = await readJsonPromise(fileSystem, "/a/package.json"); - expect(result).toEqual(content); + assert.deepStrictEqual(result, content); }); it("rejects if readJson yields an error", async () => { @@ -46,9 +49,10 @@ describe("util/fs readJson", () => { callback(null, Buffer.from("{}")); }, }); - await expect( + await assert.rejects( readJsonPromise(fileSystem, "/a/package.json"), - ).rejects.toThrow("boom"); + (err) => err instanceof Error && err.message.includes("boom"), + ); }); it("falls back to readFile when stripComments is true", async () => { @@ -66,7 +70,7 @@ describe("util/fs readJson", () => { const result = await readJsonPromise(fileSystem, "/a/tsconfig.json", { stripComments: true, }); - expect(result).toEqual({ a: 1, b: [1, 2] }); + assert.deepStrictEqual(result, { a: 1, b: [1, 2] }); }); it("falls back to readFile when readJson is unavailable", async () => { @@ -76,7 +80,7 @@ describe("util/fs readJson", () => { }, }); const result = await readJsonPromise(fileSystem, "/a/package.json"); - expect(result).toEqual({ hello: "world" }); + assert.deepStrictEqual(result, { hello: "world" }); }); it("decodes a Uint8Array (non-Node file system) result", async () => { @@ -112,9 +116,10 @@ describe("util/fs readJson", () => { callback(new Error("read-fail")); }, }); - await expect( + await assert.rejects( readJsonPromise(fileSystem, "/a/package.json"), - ).rejects.toThrow("read-fail"); + (err) => err instanceof Error && err.message.includes("read-fail"), + ); }); it("invokes the callback synchronously when the file system is synchronous", () => { @@ -135,8 +140,8 @@ describe("util/fs readJson", () => { sync = true; }, ); - expect(sync).toBe(true); - expect(result).toEqual({ sync: true }); + assert.strictEqual(sync, true); + assert.deepStrictEqual(result, { sync: true }); }); // Regression: a file system may return a string from readFile (more likely diff --git a/test/yield.test.js b/test/yield.test.js index bb3e46cb..2f52c356 100644 --- a/test/yield.test.js +++ b/test/yield.test.js @@ -1,6 +1,9 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); +const { describe, it } = require("node:test"); + const path = require("path"); const { ResolverFactory } = require("../"); @@ -46,7 +49,7 @@ describe("should resolve all aliases", () => { fileSystem: nodeFileSystem, }); - it("should yield all b files", (done) => { + it("should yield all b files", (t, done) => { const paths = []; const yield_ = ({ path }) => paths.push(path); const fileDependencies = new Set(); @@ -61,10 +64,13 @@ describe("should resolve all aliases", () => { }; resolver.resolve({}, fixtures, "index/b", context, (err, result) => { - expect(err).toBeNull(); - expect(result).toBeUndefined(); - expect(paths).toEqual(makeFixturePaths(["/a/foo/b", "/a/foo-2/b"])); - expect(contextifyDependencies(fileDependencies)).toEqual([ + assert.strictEqual(err, null); + assert.strictEqual(result, undefined); + assert.deepStrictEqual( + paths, + makeFixturePaths(["/a/foo/b", "/a/foo-2/b"]), + ); + assert.deepStrictEqual(contextifyDependencies(fileDependencies), [ "", "/a", "/a/foo", @@ -72,7 +78,7 @@ describe("should resolve all aliases", () => { "/a/foo-2/b", "/a/foo/b", ]); - expect(contextifyDependencies(missingDependencies)).toEqual([ + assert.deepStrictEqual(contextifyDependencies(missingDependencies), [ "/a/foo-2/b", "/a/foo-2/b.js", "/a/foo-2/package.json", @@ -82,12 +88,12 @@ describe("should resolve all aliases", () => { "/a/package.json", "/package.json", ]); - expect([...contextDependencies].sort()).toEqual([]); + assert.deepStrictEqual([...contextDependencies].sort(), []); done(); }); }); - it("should yield all foo files", (done) => { + it("should yield all foo files", (t, done) => { const paths = []; const yield_ = ({ path }) => paths.push(path); const fileDependencies = new Set(); @@ -102,10 +108,10 @@ describe("should resolve all aliases", () => { }; modulesResolver.resolve({}, fixtures, "foo/a", context, (err, result) => { - expect(err).toBeNull(); - expect(result).toBeUndefined(); - expect(paths).toEqual(makeFixturePaths(["/a/foo/a", "/b/foo/a"])); - expect(contextifyDependencies(fileDependencies)).toEqual([ + assert.strictEqual(err, null); + assert.strictEqual(result, undefined); + assert.deepStrictEqual(paths, makeFixturePaths(["/a/foo/a", "/b/foo/a"])); + assert.deepStrictEqual(contextifyDependencies(fileDependencies), [ "", "/a", "/a/foo", @@ -114,7 +120,7 @@ describe("should resolve all aliases", () => { "/b/foo", "/b/foo/a", ]); - expect(contextifyDependencies(missingDependencies)).toEqual([ + assert.deepStrictEqual(contextifyDependencies(missingDependencies), [ "/a/foo/a", "/a/foo/a.js", "/a/foo/package.json", @@ -125,12 +131,12 @@ describe("should resolve all aliases", () => { "/b/package.json", "/package.json", ]); - expect([...contextDependencies].sort()).toEqual([]); + assert.deepStrictEqual([...contextDependencies].sort(), []); done(); }); }); - it("should yield c file", (done) => { + it("should yield c file", (t, done) => { const paths = []; const yield_ = ({ path }) => paths.push(path); /** @type {ResolveContext} */ @@ -139,14 +145,14 @@ describe("should resolve all aliases", () => { }; resolver.resolve({}, fixtures, "index/c", context, (err, result) => { - expect(err).toBeNull(); - expect(result).toBeUndefined(); - expect(paths).toEqual(makeFixturePaths(["/a/foo-2/c"])); + assert.strictEqual(err, null); + assert.strictEqual(result, undefined); + assert.deepStrictEqual(paths, makeFixturePaths(["/a/foo-2/c"])); done(); }); }); - it("should resolve false alias", (done) => { + it("should resolve false alias", (t, done) => { const paths = []; const yield_ = ({ path }) => paths.push(path); const fileDependencies = new Set(); @@ -161,20 +167,20 @@ describe("should resolve all aliases", () => { }; resolver.resolve({}, fixtures, "foo", context, (err, result) => { - expect(err).toBeNull(); - expect(result).toBeUndefined(); - expect(paths).toEqual([false]); - expect(contextifyDependencies(fileDependencies)).toEqual([]); - expect(contextifyDependencies(missingDependencies)).toEqual([ + assert.strictEqual(err, null); + assert.strictEqual(result, undefined); + assert.deepStrictEqual(paths, [false]); + assert.deepStrictEqual(contextifyDependencies(fileDependencies), []); + assert.deepStrictEqual(contextifyDependencies(missingDependencies), [ "/node_modules", "/package.json", ]); - expect([...contextDependencies].sort()).toEqual([]); + assert.deepStrictEqual([...contextDependencies].sort(), []); done(); }); }); - it("should return error if no resolve", (done) => { + it("should return error if no resolve", (t, done) => { const paths = []; const yield_ = ({ path }) => paths.push(path); const fileDependencies = new Set(); @@ -189,12 +195,12 @@ describe("should resolve all aliases", () => { }; resolver.resolve({}, fixtures, "index/unknown", context, (err, result) => { - expect(err).not.toBeNull(); - expect(err).toBeDefined(); - expect(result).toBeUndefined(); - expect(paths).toEqual([]); - expect(contextifyDependencies(fileDependencies)).toEqual([]); - expect(contextifyDependencies(missingDependencies)).toEqual([ + assert.notStrictEqual(err, null); + assert.notStrictEqual(err, undefined); + assert.strictEqual(result, undefined); + assert.deepStrictEqual(paths, []); + assert.deepStrictEqual(contextifyDependencies(fileDependencies), []); + assert.deepStrictEqual(contextifyDependencies(missingDependencies), [ "/a/foo-2/package.json", "/a/foo-2/unknown", "/a/foo-2/unknown.js", @@ -204,13 +210,13 @@ describe("should resolve all aliases", () => { "/a/package.json", "/package.json", ]); - expect([...contextDependencies].sort()).toEqual([]); + assert.deepStrictEqual([...contextDependencies].sort(), []); done(); }); }); describe("resolve alias field", () => { - it("should handle false in alias field", (done) => { + it("should handle false in alias field", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], alias: { @@ -239,21 +245,21 @@ describe("should resolve all aliases", () => { resolver.resolve({}, fixtures, "index/a", context, (err, result) => { calls++; - expect(calls).toBe(1); - expect(err).toBeNull(); - expect(result).toBeUndefined(); - expect(paths).toEqual([false]); - expect(contextifyDependencies(fileDependencies)).toEqual([ + assert.strictEqual(calls, 1); + assert.strictEqual(err, null); + assert.strictEqual(result, undefined); + assert.deepStrictEqual(paths, [false]); + assert.deepStrictEqual(contextifyDependencies(fileDependencies), [ "/c/foo/package.json", ]); - expect(contextifyDependencies(missingDependencies)).toEqual([ + assert.deepStrictEqual(contextifyDependencies(missingDependencies), [ "/c/foo/a", "/c/foo/a.js", "/package.json", ]); - expect([...contextDependencies].sort()).toEqual([]); + assert.deepStrictEqual([...contextDependencies].sort(), []); - expect(beatifyLogs(logs)).toEqual([ + assert.deepStrictEqual(beatifyLogs(logs), [ "resolve 'index/a' in 'fixtures'", " Parsed request is a module", " using description file (relative path: ./test/fixtures/yield)", @@ -349,18 +355,18 @@ describe("should resolve all aliases", () => { resolver.resolve({}, fixtures, "index/a", context, (err, result) => { calls++; - expect(calls).toBe(1); - expect(err).toBeNull(); - expect(result).toBeUndefined(); - expect(paths).toEqual(makeFixturePaths(expectedResult)); - expect(contextifyDependencies(fileDependencies)).toEqual([ + assert.strictEqual(calls, 1); + assert.strictEqual(err, null); + assert.strictEqual(result, undefined); + assert.deepStrictEqual(paths, makeFixturePaths(expectedResult)); + assert.deepStrictEqual(contextifyDependencies(fileDependencies), [ "", "/a", "/a/foo", "/a/foo/a", "/c/foo/package.json", ]); - expect(contextifyDependencies(missingDependencies)).toEqual([ + assert.deepStrictEqual(contextifyDependencies(missingDependencies), [ "/a/foo/a", "/a/foo/a.js", "/a/foo/package.json", @@ -369,15 +375,14 @@ describe("should resolve all aliases", () => { "/c/foo/a.js", "/package.json", ]); - expect([...contextDependencies].sort()).toEqual([]); - expect(beatifyLogs(logs)).toEqual(expectedLogs); + assert.deepStrictEqual([...contextDependencies].sort(), []); + assert.deepStrictEqual(beatifyLogs(logs), expectedLogs); done(); }); } - // eslint-disable-next-line jest/expect-expect - it("default order", (done) => { + it("default order", (t, done) => { resolver = createResolver(["/c/foo", "/a/foo"]); run( done, @@ -392,8 +397,7 @@ describe("should resolve all aliases", () => { ); }); - // eslint-disable-next-line jest/expect-expect - it("reverse order", (done) => { + it("reverse order", (t, done) => { resolver = createResolver(["/a/foo", "/c/foo"]); run( done, @@ -417,7 +421,7 @@ describe("should resolve all aliases", () => { fileSystem: nodeFileSystem, }); - it("should correctly handle resolve in callback", (done) => { + it("should correctly handle resolve in callback", (t, done) => { const getResult = (request) => ({ ...request, path: "/a" }); const resolver = createResolver({ apply(resolver) { @@ -437,14 +441,14 @@ describe("should resolve all aliases", () => { }; resolver.resolve({}, fixtures, "unknown", context, (err, result) => { if (err) done(err); - expect(err).toBeNull(); - expect(result).toBeUndefined(); - expect(paths).toEqual(["/a"]); + assert.strictEqual(err, null); + assert.strictEqual(result, undefined); + assert.deepStrictEqual(paths, ["/a"]); done(); }); }); - it("should correctly handle error in callback", (done) => { + it("should correctly handle error in callback", (t, done) => { const resolver = createResolver({ apply(resolver) { resolver @@ -460,10 +464,10 @@ describe("should resolve all aliases", () => { }; resolver.resolve({}, fixtures, "unknown", context, (err, result) => { if (!err) return done(new Error("error expected")); - expect(err).not.toBeNull(); - expect(err.message).toBe("error"); - expect(result).toBeUndefined(); - expect(paths).toEqual([]); + assert.notStrictEqual(err, null); + assert.strictEqual(err.message, "error"); + assert.strictEqual(result, undefined); + assert.deepStrictEqual(paths, []); done(); }); }); @@ -471,7 +475,7 @@ describe("should resolve all aliases", () => { describe("unsafe cache", () => { // same case as in "should yield all b files" - it("should return result from cache", (done) => { + it("should return result from cache", (t, done) => { const cache = /** @type {Cache} */ ({}); const resolver = ResolverFactory.createResolver({ extensions: [".js"], @@ -496,13 +500,14 @@ describe("should resolve all aliases", () => { "index/b", { yield: (obj) => paths.push(obj.path) }, (err, result) => { - expect(err).toBeNull(); - expect(result).toBeUndefined(); - expect(paths).toEqual( + assert.strictEqual(err, null); + assert.strictEqual(result, undefined); + assert.deepStrictEqual( + paths, makeFixturePaths(["/a/foo/b", "/a/foo-2/b"]), ); // original + 2 aliases - expect(Object.keys(cache)).toHaveLength(3); + assert.strictEqual(Object.keys(cache).length, 3); const cacheId = /** @type {string} */ @@ -517,12 +522,13 @@ describe("should resolve all aliases", () => { return request === "index/b"; }) ); - expect(cacheId).toBeDefined(); - expect(Array.isArray(cache[cacheId])).toBe(true); - expect( + assert.notStrictEqual(cacheId, undefined); + assert.strictEqual(Array.isArray(cache[cacheId]), true); + assert.deepStrictEqual( /** @type {ResolveRequest[]} */ (cache[cacheId]).map((o) => o.path), - ).toEqual(makeFixturePaths(["/a/foo/b", "/a/foo-2/b"])); + makeFixturePaths(["/a/foo/b", "/a/foo-2/b"]), + ); done(); }, ); @@ -531,7 +537,7 @@ describe("should resolve all aliases", () => { }); // same as "should handle false in alias field" - it("should return ignore result from cache", (done) => { + it("should return ignore result from cache", (t, done) => { const cache = /** @type {Cache} */ ({}); const resolver = ResolverFactory.createResolver({ extensions: [".js"], @@ -551,20 +557,21 @@ describe("should resolve all aliases", () => { "foo", { yield: (obj) => paths.push(obj.path) }, (err, result) => { - expect(err).toBeNull(); - expect(result).toBeUndefined(); - expect(paths).toEqual([false]); + assert.strictEqual(err, null); + assert.strictEqual(result, undefined); + assert.deepStrictEqual(paths, [false]); // original + 0 aliases - expect(Object.keys(cache)).toHaveLength(1); + assert.strictEqual(Object.keys(cache).length, 1); const [cacheId] = Object.keys(cache); - expect(cacheId).toBeDefined(); - expect(Array.isArray(cache[cacheId])).toBe(true); - expect( + assert.notStrictEqual(cacheId, undefined); + assert.strictEqual(Array.isArray(cache[cacheId]), true); + assert.deepStrictEqual( /** @type {ResolveRequest[]} */ (cache[cacheId]).map((o) => o.path), - ).toEqual([false]); + [false], + ); done(); }, ); diff --git a/tsconfig.types.test.json b/tsconfig.types.test.json index 50d014a6..23541773 100644 --- a/tsconfig.types.test.json +++ b/tsconfig.types.test.json @@ -5,7 +5,7 @@ "noImplicitThis": true, "alwaysStrict": true, "strictNullChecks": true, - "types": ["node", "jest"] + "types": ["node"] }, "include": ["test/*.js"] } From 7933118ece1bfb3b4b1b817d3e11486340806105 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Fri, 29 May 2026 12:32:17 +0000 Subject: [PATCH 02/12] test: drop redundant Error cast flagged by review `assert.ok(err instanceof Error)` already narrows `err` to `Error`, so the following `/** @type {Error} */` cast was inert (and reflowed into a misleading position). Remove it and access `err.message` directly. --- test/simple.test.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/test/simple.test.js b/test/simple.test.js index acd24776..cf2156f1 100644 --- a/test/simple.test.js +++ b/test/simple.test.js @@ -625,10 +625,7 @@ describe("simple", () => { {}, (err) => { assert.ok(err instanceof Error); - assert.ok( - err /** @type {Error} */.message - .includes("path argument is not a string"), - ); + assert.ok(err.message.includes("path argument is not a string")); done(); }, ); @@ -643,10 +640,7 @@ describe("simple", () => { {}, (err) => { assert.ok(err instanceof Error); - assert.ok( - err /** @type {Error} */.message - .includes("request argument is not a string"), - ); + assert.ok(err.message.includes("request argument is not a string")); done(); }, ); From 7c3b1067053ff9bfdbaa251150d4ff9ab4964591 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Tue, 9 Jun 2026 15:34:06 +0000 Subject: [PATCH 03/12] test: run the suite under jest on legacy Node.js via a runtime bridge The previous attempt validated old Node.js with a `node:assert` smoke test that only exercised a few public-API call sites. This replaces it with the real test suite running under jest on the legacy CI matrix: - Add `test/_runner.js`, a tiny runtime bridge that re-exports `node:test` on Node.js 18+ and adapts the jest globals (including the `(t, done)` callback signature) onto the same surface when the same file is executed by jest. It also polyfills `assert.match`/`doesNotMatch` for Node.js < 13.6. - Repoint every test file's `require("node:test")` at `./_runner`, so the same source runs unchanged on both runtimes. - Restore a minimal `jest.config.js` (consumed only when jest is installed) that scopes jest to `test/`, ignores `test/fixtures` (a deliberately malformed package.json would otherwise crash jest-haste-map), and loads the TextEncoder polyfill main added. - Replace the smoke-test CI job with a `legacy-test` job that installs `jest@^27` and `memfs@^3` ad-hoc on Node.js 10/12/14/16 (Linux and Windows) and runs `npx jest`, mirroring the install pattern main uses today. - Drop `scripts/smoke-test.js` and the `test:legacy` npm script; both are superseded by the jest run. - Migrate the four jest-style test files main added since the branch forked (file-url-options, fileURLToPath, path-browser, uint8array-fs) and re-migrate the new tests in util-fs after the rebase. - Restore the rule relaxations on `test/smoke/**` that the now-inert jest eslint config used to provide (id-length, no-console, jsdoc blank/require, and the `engines.node` builtin/syntax checks). --- .github/workflows/test.yml | 40 +++ eslint.config.mjs | 11 +- jest.config.js | 11 + test/CachedInputFileSystem.test.js | 2 +- test/DescriptionFileUtils.test.js | 4 +- test/_runner.js | 77 ++++ test/alias.test.js | 192 ++++++---- test/browserField.test.js | 2 +- test/dependencies.test.js | 2 +- test/description-file.test.js | 44 +-- test/dos-device-paths.test.js | 2 +- test/entrypoints.test.js | 3 +- test/exportsField.test.js | 453 ++++++++++++++---------- test/extension-alias.test.js | 2 +- test/extensions.test.js | 2 +- test/fallback.test.js | 88 +++-- test/file-url-options.test.js | 114 +++--- test/fileURLToPath.test.js | 41 ++- test/forEachBail.test.js | 3 +- test/fullSpecified.test.js | 2 +- test/getPaths.test.js | 2 +- test/identifier.test.js | 3 +- test/importsField.test.js | 298 +++++++++------- test/incorrect-description-file.test.js | 2 +- test/log-info.test.js | 2 +- test/main-fields.test.js | 3 +- test/missing.test.js | 2 +- test/path-browser.test.js | 25 +- test/path.test.js | 3 +- test/plugins.test.js | 2 +- test/pnp.test.js | 2 +- test/pr-53.test.js | 3 +- test/recursion.test.js | 2 +- test/resolve-context-stack.test.js | 2 +- test/resolve-logging.test.js | 2 +- test/resolve.test.js | 2 +- test/resolver-cache.test.js | 2 +- test/restrictions.test.js | 232 +++++------- test/roots.test.js | 2 +- test/scoped-packages.test.js | 2 +- test/simple.test.js | 2 +- test/strip-json-comments.test.js | 5 +- test/symlink.test.js | 2 +- test/tsconfig-paths.test.js | 2 +- test/uint8array-fs.test.js | 8 +- test/unsafe-cache.test.js | 2 +- test/util-fs.test.js | 35 +- test/yield.test.js | 2 +- 48 files changed, 1024 insertions(+), 722 deletions(-) create mode 100644 jest.config.js create mode 100644 test/_runner.js diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cf38e5bf..f96561a2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,6 +24,46 @@ jobs: - run: npm ci - run: npm run lint + # The `node:test` based suite needs Node.js 18+. The library itself still + # supports Node.js >= 10.13, so legacy versions run the same test files + # under jest, which the test runner shim (`test/_runner.js`) bridges to + # transparently. jest, memfs and the runtime deps are installed ad-hoc so + # the modern dev toolchain (eslint, typescript, prettier) is never required + # by the legacy matrix. + legacy-test: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] + node-version: [10.x, 12.x, 14.x, 16.x] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + with: + node-version: ${{ matrix.node-version }} + + - name: Install jest (Node 10) + if: matrix.node-version == '10.x' + shell: bash + run: | + rm -f package-lock.json + npm config set progress false + yarn add -D jest@^27 memfs@^3 --ignore-scripts --ignore-engines + + - name: Install jest (Node 12-16) + if: matrix.node-version != '10.x' + shell: bash + run: | + rm -f package-lock.json + npm config set progress false + npm install -g npm@7 + npm install -D jest@^27 memfs@^3 --ignore-scripts --no-audit --prefer-offline --no-save --no-package-lock + + - name: Run jest + run: npx jest --ci test: strategy: fail-fast: false diff --git a/eslint.config.mjs b/eslint.config.mjs index 41f1e5f1..56cf1aa9 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -24,12 +24,21 @@ export default defineConfig([ }, { // Cross-runtime smoke scripts run standalone on node/bun/deno and in a - // browser sandbox; relax the library-grade JSDoc typing rules for them. + // browser sandbox; relax library-grade rules and the `engines.node` + // version checks (these files target newer runtimes by design). Mirrors + // the relaxations the shared config used to apply via the jest plugin. files: ["test/smoke/**/*"], rules: { "jsdoc/no-restricted-syntax": "off", "jsdoc/reject-any-type": "off", + "jsdoc/no-blank-blocks": "off", + "jsdoc/require-jsdoc": "off", "unicorn/prefer-native-coercion-functions": "off", + "n/no-unsupported-features/es-builtins": "off", + "n/no-unsupported-features/es-syntax": "off", + "n/no-unsupported-features/node-builtins": "off", + "id-length": "off", + "no-console": "off", }, }, { diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..0f552c5e --- /dev/null +++ b/jest.config.js @@ -0,0 +1,11 @@ +"use strict"; + +// Jest config is only consumed by the legacy CI matrix (Node.js < 18) where +// `node:test` is not available. Modern runs use `node --test` via +// scripts/test.js and ignore this file. +module.exports = { + roots: ["/test"], + moduleFileExtensions: ["js", "mjs", "cjs", "ts"], + modulePathIgnorePatterns: ["/test/fixtures/"], + setupFiles: ["/test/polyfill-text-encoding.js"], +}; diff --git a/test/CachedInputFileSystem.test.js b/test/CachedInputFileSystem.test.js index c8c6e6cf..954b790f 100644 --- a/test/CachedInputFileSystem.test.js +++ b/test/CachedInputFileSystem.test.js @@ -1,11 +1,11 @@ "use strict"; const assert = require("assert"); -const { afterEach, beforeEach, describe, it } = require("node:test"); const path = require("path"); const url = require("url"); const { CachedInputFileSystem } = require("../"); +const { afterEach, beforeEach, describe, it } = require("./_runner"); describe("cachedInputFileSystem OperationMergerBackend ('stat' and 'statSync')", () => { let fs; diff --git a/test/DescriptionFileUtils.test.js b/test/DescriptionFileUtils.test.js index 79e4433e..d376713c 100644 --- a/test/DescriptionFileUtils.test.js +++ b/test/DescriptionFileUtils.test.js @@ -1,14 +1,14 @@ "use strict"; const assert = require("assert"); -const { describe, it } = require("node:test"); +const DescriptionFileUtils = require("../lib/DescriptionFileUtils"); +const { describe, it } = require("./_runner"); /* eslint-disable jsdoc/reject-any-type */ // Pure-function tests for helpers exported by DescriptionFileUtils, matching // the style of test/getPaths.test.js and test/identifier.test.js for lib/ // modules whose helpers are difficult to exercise end-to-end. -const DescriptionFileUtils = require("../lib/DescriptionFileUtils"); describe("DescriptionFileUtils.cdUp", () => { it("returns null for '/'", () => { diff --git a/test/_runner.js b/test/_runner.js new file mode 100644 index 00000000..a76af76e --- /dev/null +++ b/test/_runner.js @@ -0,0 +1,77 @@ +// @ts-nocheck +// (This bridge is intentionally untyped: it branches on the runtime +// (jest vs node:test) and patches `assert` at module load. The assertion +// polyfills mirror Node's real `assert.match`/`assert.doesNotMatch` shape, +// and the jest branch only runs when the `jest` global is in scope.) + +"use strict"; + +// Bridge between `node:test` and jest so a single test source runs on: +// - Node.js 18+ via the built-in `node --test` runner. +// - Legacy Node.js (10-16) via jest, which doesn't ship `node:test`. +// The runtime is auto-detected by the presence of jest's `jest` global. + +const assert = require("assert"); + +// `assert.match` and `assert.doesNotMatch` were added in Node.js 13.6. Legacy +// jest CI also runs on Node.js 10/12, so polyfill them when missing. The +// signature mirrors the built-in. +if (typeof assert.match !== "function") { + assert.match = function match(value, regExp, message) { + if (!regExp.test(value)) { + throw new assert.AssertionError({ + message: + message || + `The input did not match the regular expression ${regExp}. Input:\n\n${value}\n`, + actual: value, + expected: regExp, + operator: "match", + }); + } + }; +} +if (typeof assert.doesNotMatch !== "function") { + assert.doesNotMatch = function doesNotMatch(value, regExp, message) { + if (regExp.test(value)) { + throw new assert.AssertionError({ + message: + message || + `The input matched the regular expression ${regExp}. Input:\n\n${value}\n`, + actual: value, + expected: regExp, + operator: "doesNotMatch", + }); + } + }; +} + +if (typeof jest === "undefined") { + module.exports = require("node:test"); +} else { + // jest's callback-style test function takes `(done)`; node:test passes + // `(t, done)`. The migrated tests use the node:test shape, so wrap to + // inject a throwaway `t` when jest invokes the function. + const wrap = (fn) => + typeof fn === "function" && fn.length >= 2 + ? function bridged(done) { + return fn.call(this, {}, done); + } + : fn; + const named = (g) => (name, fn) => g(name, wrap(fn)); + + module.exports = { + describe: global.describe, + it: Object.assign(named(global.it), { + skip: named(global.it.skip), + only: named(global.it.only), + }), + test: Object.assign(named(global.test), { + skip: named(global.test.skip), + only: named(global.test.only), + }), + before: global.beforeAll, + after: global.afterAll, + beforeEach: global.beforeEach, + afterEach: global.afterEach, + }; +} diff --git a/test/alias.test.js b/test/alias.test.js index 00ea0239..6ba5c674 100644 --- a/test/alias.test.js +++ b/test/alias.test.js @@ -1,10 +1,13 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); + const path = require("path"); const { Volume } = require("memfs"); const { ResolverFactory } = require("../"); const CachedInputFileSystem = require("../lib/CachedInputFileSystem"); +const { beforeEach, describe, it } = require("./_runner"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); @@ -58,94 +61,138 @@ describe("alias", () => { }); it("should resolve a not aliased module", () => { - expect(resolver.resolveSync({}, "/", "a")).toBe("/a/index"); - expect(resolver.resolveSync({}, "/", "a/index")).toBe("/a/index"); - expect(resolver.resolveSync({}, "/", "a/dir")).toBe("/a/dir/index"); - expect(resolver.resolveSync({}, "/", "a/dir/index")).toBe("/a/dir/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "a"), "/a/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "a/index"), "/a/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "a/dir"), "/a/dir/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "a/dir/index"), + "/a/dir/index", + ); }); it("should resolve an aliased module", () => { - expect(resolver.resolveSync({}, "/", "aliasA")).toBe("/a/index"); - expect(resolver.resolveSync({}, "/", "aliasA/index")).toBe("/a/index"); - expect(resolver.resolveSync({}, "/", "aliasA/dir")).toBe("/a/dir/index"); - expect(resolver.resolveSync({}, "/", "aliasA/dir/index")).toBe( + assert.strictEqual(resolver.resolveSync({}, "/", "aliasA"), "/a/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "aliasA/index"), + "/a/index", + ); + assert.strictEqual( + resolver.resolveSync({}, "/", "aliasA/dir"), + "/a/dir/index", + ); + assert.strictEqual( + resolver.resolveSync({}, "/", "aliasA/dir/index"), "/a/dir/index", ); }); it('should resolve "#" alias', () => { - expect(resolver.resolveSync({}, "/", "#")).toBe("/c/dir/index"); - expect(resolver.resolveSync({}, "/", "#/index")).toBe("/c/dir/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "#"), "/c/dir/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "#/index"), + "/c/dir/index", + ); }); it('should resolve "@" alias', () => { - expect(resolver.resolveSync({}, "/", "@")).toBe("/c/dir/index"); - expect(resolver.resolveSync({}, "/", "@/index")).toBe("/c/dir/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "@"), "/c/dir/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "@/index"), + "/c/dir/index", + ); }); it("should resolve wildcard alias", () => { - expect(resolver.resolveSync({}, "/", "@a")).toBe("/a/index"); - expect(resolver.resolveSync({}, "/", "@a/dir")).toBe("/a/dir/index"); - expect(resolver.resolveSync({}, "/", "@e/dir/file")).toBe("/e/dir/file"); - expect(resolver.resolveSync({}, "/", "@e/anotherDir")).toBe( + assert.strictEqual(resolver.resolveSync({}, "/", "@a"), "/a/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "@a/dir"), "/a/dir/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "@e/dir/file"), + "/e/dir/file", + ); + assert.strictEqual( + resolver.resolveSync({}, "/", "@e/anotherDir"), "/e/anotherDir/index", ); - expect(resolver.resolveSync({}, "/", "@e/dir/file")).toBe("/e/dir/file"); + assert.strictEqual( + resolver.resolveSync({}, "/", "@e/dir/file"), + "/e/dir/file", + ); }); it("should resolve an ignore module", () => { - expect(resolver.resolveSync({}, "/", "ignored")).toBe(false); + assert.strictEqual(resolver.resolveSync({}, "/", "ignored"), false); }); it("should resolve a recursive aliased module", () => { - expect(resolver.resolveSync({}, "/", "recursive")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "recursive"), "/recursive/dir/index", ); - expect(resolver.resolveSync({}, "/", "recursive/index")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "recursive/index"), "/recursive/dir/index", ); - expect(resolver.resolveSync({}, "/", "recursive/dir")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "recursive/dir"), "/recursive/dir/index", ); - expect(resolver.resolveSync({}, "/", "recursive/dir/index")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "recursive/dir/index"), "/recursive/dir/index", ); }); it("should resolve a file aliased module", () => { - expect(resolver.resolveSync({}, "/", "b")).toBe("/a/index"); - expect(resolver.resolveSync({}, "/", "c")).toBe("/a/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "b"), "/a/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "c"), "/a/index"); }); it("should resolve a file aliased module with a query", () => { - expect(resolver.resolveSync({}, "/", "b?query")).toBe("/a/index?query"); - expect(resolver.resolveSync({}, "/", "c?query")).toBe("/a/index?query"); + assert.strictEqual( + resolver.resolveSync({}, "/", "b?query"), + "/a/index?query", + ); + assert.strictEqual( + resolver.resolveSync({}, "/", "c?query"), + "/a/index?query", + ); }); it("should resolve a path in a file aliased module", () => { - expect(resolver.resolveSync({}, "/", "b/index")).toBe("/b/index"); - expect(resolver.resolveSync({}, "/", "b/dir")).toBe("/b/dir/index"); - expect(resolver.resolveSync({}, "/", "b/dir/index")).toBe("/b/dir/index"); - expect(resolver.resolveSync({}, "/", "c/index")).toBe("/c/index"); - expect(resolver.resolveSync({}, "/", "c/dir")).toBe("/c/dir/index"); - expect(resolver.resolveSync({}, "/", "c/dir/index")).toBe("/c/dir/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "b/index"), "/b/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "b/dir"), "/b/dir/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "b/dir/index"), + "/b/dir/index", + ); + assert.strictEqual(resolver.resolveSync({}, "/", "c/index"), "/c/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "c/dir"), "/c/dir/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "c/dir/index"), + "/c/dir/index", + ); }); it("should resolve a file aliased file", () => { - expect(resolver.resolveSync({}, "/", "d")).toBe("/c/index"); - expect(resolver.resolveSync({}, "/", "d/dir/index")).toBe("/c/dir/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "d"), "/c/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "d/dir/index"), + "/c/dir/index", + ); }); it("should resolve a file in multiple aliased dirs", () => { - expect(resolver.resolveSync({}, "/", "multiAlias/dir/file")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "multiAlias/dir/file"), "/e/dir/file", ); - expect(resolver.resolveSync({}, "/", "multiAlias/anotherDir")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "multiAlias/anotherDir"), "/e/anotherDir/index", ); }); - it("should log the correct info", (done) => { + it("should log the correct info", (t, done) => { const log = []; resolver.resolve( {}, @@ -155,8 +202,8 @@ describe("alias", () => { (err, result) => { if (err) return done(err); - expect(result).toBe("/a/dir/index"); - expect(log).toEqual([ + assert.strictEqual(result, "/a/dir/index"); + assert.deepStrictEqual(log, [ "resolve 'aliasA/dir' in '/'", " Parsed request is a module", " No description file found in / or above", @@ -191,7 +238,7 @@ describe("alias", () => { ); }); - it("should work with absolute paths", (done) => { + it("should work with absolute paths", (t, done) => { const resolver = ResolverFactory.createResolver({ alias: { [path.resolve(__dirname, "fixtures", "foo")]: false, @@ -202,7 +249,7 @@ describe("alias", () => { resolver.resolve({}, __dirname, "foo/index", {}, (err, result) => { if (err) done(err); - expect(result).toBe(false); + assert.strictEqual(result, false); done(); }); }); @@ -216,14 +263,23 @@ describe("alias", () => { // char-code screen ever diverges from the startsWith comparison // these resolves silently fall through to the original target. it("should not skip absolute path aliasing", () => { - expect(resolver.resolveSync({}, "/", "/d/dir")).toBe("/c/dir/index"); - expect(resolver.resolveSync({}, "/", "/d/dir/index")).toBe("/c/dir/index"); - expect(resolver.resolveSync({}, "/", "d/dir/index")).toBe("/c/dir/index"); - expect(resolver.resolveSync({}, "/", "d")).toBe("/c/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "/d/dir"), "/c/dir/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "/d/dir/index"), + "/c/dir/index", + ); + assert.strictEqual( + resolver.resolveSync({}, "/", "d/dir/index"), + "/c/dir/index", + ); + assert.strictEqual(resolver.resolveSync({}, "/", "d"), "/c/index"); }); it("should resolve a wildcard alias with multiple targets correctly", () => { - expect(resolver.resolveSync({}, "/", "shared/b")).toBe("/src/components/b"); + assert.strictEqual( + resolver.resolveSync({}, "/", "shared/b"), + "/src/components/b", + ); }); // Absolute-path aliasing — OS-native (posix on Linux CI, backslash @@ -252,7 +308,7 @@ describe("alias", () => { fileSystem: nodeFileSystem, }); - it("aliases a raw absolute subpath request (raw-resolve hook)", (done) => { + it("aliases a raw absolute subpath request (raw-resolve hook)", (t, done) => { // path.join uses the OS-native separator, so on windows this // is `...\\imaginary-foo\\index` and exercises the backslash // fallback; on linux it is `.../imaginary-foo/index`. @@ -263,21 +319,21 @@ describe("alias", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toBe(expectedIndex); + assert.strictEqual(result, expectedIndex); done(); }, ); }); - it("aliases a request that equals the alias name (exact equality)", (done) => { + it("aliases a request that equals the alias name (exact equality)", (t, done) => { absResolver.resolve({}, fixturesDir, aliasName, {}, (err, result) => { if (err) return done(err); - expect(result).toBe(expectedIndex); + assert.strictEqual(result, expectedIndex); done(); }); }); - it("aliases after JoinRequestPlugin normalizes the path (file hook)", (done) => { + it("aliases after JoinRequestPlugin normalizes the path (file hook)", (t, done) => { // A relative request hits `JoinRequestPlugin` first, which // turns it into `request.path` with `request.request` set to // `undefined`. That hits the `absolutePath`-only branch of @@ -289,20 +345,20 @@ describe("alias", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toBe(expectedIndex); + assert.strictEqual(result, expectedIndex); done(); }, ); }); - it("does not fire for a different absolute prefix sharing the same head", (done) => { + it("does not fire for a different absolute prefix sharing the same head", (t, done) => { // `imaginary-food` shares `imaginary-foo` as a prefix but // not `imaginary-foo`. The alias must not fire, and // since `imaginary-food` does not exist, the resolve fails. const requestPath = path.join(fixturesDir, "imaginary-food", "index"); absResolver.resolve({}, fixturesDir, requestPath, {}, (err, result) => { - expect(err).toBeInstanceOf(Error); - expect(result).toBeFalsy(); + assert.ok(err instanceof Error); + assert.ok(!result); done(); }); }); @@ -352,13 +408,15 @@ describe("alias", () => { "/default-theme/Hello.js": "", }); - expect(resolver.resolveSync({}, "/", "theme/Hello")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "theme/Hello"), "/fancy-theme/Hello.js", ); fileSystem.unlinkSync("/fancy-theme/Hello.js"); - expect(resolver.resolveSync({}, "/", "theme/Hello")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "theme/Hello"), "/default-theme/Hello.js", ); }); @@ -368,19 +426,21 @@ describe("alias", () => { "/default-theme/Hello.js": "", }); - expect(resolver.resolveSync({}, "/", "theme/Hello")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "theme/Hello"), "/default-theme/Hello.js", ); fileSystem.mkdirSync("/fancy-theme"); fileSystem.writeFileSync("/fancy-theme/Hello.js", ""); - expect(resolver.resolveSync({}, "/", "theme/Hello")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "theme/Hello"), "/fancy-theme/Hello.js", ); }); - it("reports a missing-higher-priority path as a missing dependency so watchers can invalidate", (done) => { + it("reports a missing-higher-priority path as a missing dependency so watchers can invalidate", (t, done) => { const { resolver } = createThemeResolver({ "/default-theme/Hello.js": "", }); @@ -395,12 +455,18 @@ describe("alias", () => { { fileDependencies, missingDependencies }, (err, result) => { if (err) return done(err); - expect(result).toBe("/default-theme/Hello.js"); + assert.strictEqual(result, "/default-theme/Hello.js"); // The winning file is tracked so that deletions invalidate. - expect(fileDependencies.has("/default-theme/Hello.js")).toBe(true); + assert.strictEqual( + fileDependencies.has("/default-theme/Hello.js"), + true, + ); // The non-existent higher-priority file is tracked so that // its creation triggers a re-resolve (see issue #250). - expect(missingDependencies.has("/fancy-theme/Hello.js")).toBe(true); + assert.strictEqual( + missingDependencies.has("/fancy-theme/Hello.js"), + true, + ); done(); }, ); diff --git a/test/browserField.test.js b/test/browserField.test.js index 0645d639..51f484b9 100644 --- a/test/browserField.test.js +++ b/test/browserField.test.js @@ -2,10 +2,10 @@ const assert = require("assert"); const fs = require("fs"); -const { beforeEach, describe, it } = require("node:test"); const path = require("path"); const { ResolverFactory } = require("../"); +const { beforeEach, describe, it } = require("./_runner"); const browserModule = path.join(__dirname, "fixtures", "browser-module"); diff --git a/test/dependencies.test.js b/test/dependencies.test.js index c0b290fc..95e59a6d 100644 --- a/test/dependencies.test.js +++ b/test/dependencies.test.js @@ -1,10 +1,10 @@ "use strict"; const assert = require("assert"); -const { beforeEach, describe, it } = require("node:test"); const { Volume } = require("memfs"); const resolve = require("../"); +const { beforeEach, describe, it } = require("./_runner"); describe("dependencies", () => { let resolver; diff --git a/test/description-file.test.js b/test/description-file.test.js index 63c2d16c..0b82cf36 100644 --- a/test/description-file.test.js +++ b/test/description-file.test.js @@ -1,10 +1,13 @@ "use strict"; +const assert = require("assert"); +const fs = require("fs"); + /* eslint-disable jsdoc/reject-any-type */ -const fs = require("fs"); const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); +const { describe, it } = require("./_runner"); const fixtures = path.join(__dirname, "fixtures"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); @@ -32,7 +35,7 @@ function fsWithoutReadJson() { } describe("description file (readFile fallback)", () => { - it("surfaces 'No content in file' when the description file is empty", (done) => { + it("surfaces 'No content in file' when the description file is empty", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: fsWithoutReadJson(), extensions: [".js"], @@ -43,19 +46,17 @@ describe("description file (readFile fallback)", () => { ".", {}, (err) => { - expect(err).toBeInstanceOf(Error); - expect(/** @type {Error} */ (err).message).toMatch( - // JSON.parse("") differs by engine: V8 (node/deno) says - // "Unexpected end of JSON input", JavaScriptCore (bun) says - // "JSON Parse error: Unexpected EOF". - /No content in file|Unexpected end of JSON|JSON Parse error|Can't resolve/, + assert.ok(err instanceof Error); + assert.match( + /** @type {Error} */ (err).message, + /No content in file|Unexpected end of JSON|Can't resolve/, ); done(); }, ); }); - it("surfaces a parse error when the description file contains invalid JSON", (done) => { + it("surfaces a parse error when the description file contains invalid JSON", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: fsWithoutReadJson(), extensions: [".js"], @@ -66,20 +67,23 @@ describe("description file (readFile fallback)", () => { ".", {}, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }, ); }); - it("resolves through the readFile path when readJson is not available", (done) => { + it("resolves through the readFile path when readJson is not available", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: fsWithoutReadJson(), extensions: [".js"], }); resolver.resolve({}, fixtures, "m1/a", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.join(fixtures, "node_modules/m1/a.js")); + assert.deepStrictEqual( + result, + path.join(fixtures, "node_modules/m1/a.js"), + ); done(); }); }); @@ -88,7 +92,7 @@ describe("description file (readFile fallback)", () => { describe("self-reference resolution", () => { const selfPkg = path.join(fixtures, "self-reference-pkg"); - it("resolves a package's own name via the exports field", (done) => { + it("resolves a package's own name via the exports field", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, conditionNames: ["node"], @@ -96,12 +100,12 @@ describe("self-reference resolution", () => { }); resolver.resolve({}, selfPkg, "self-pkg", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.join(selfPkg, "index.js")); + assert.deepStrictEqual(result, path.join(selfPkg, "index.js")); done(); }); }); - it("resolves a sub-path via self-reference + exports", (done) => { + it("resolves a sub-path via self-reference + exports", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, conditionNames: ["node"], @@ -109,12 +113,12 @@ describe("self-reference resolution", () => { }); resolver.resolve({}, selfPkg, "self-pkg/sub", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.join(selfPkg, "sub.js")); + assert.deepStrictEqual(result, path.join(selfPkg, "sub.js")); done(); }); }); - it("falls through when the request is not the package name", (done) => { + it("falls through when the request is not the package name", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -123,14 +127,14 @@ describe("self-reference resolution", () => { }); resolver.resolve({}, selfPkg, "./index", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.join(selfPkg, "index.js")); + assert.deepStrictEqual(result, path.join(selfPkg, "index.js")); done(); }); }); }); describe("self-reference negative case", () => { - it("does not self-reference when the package name doesn't match the request prefix", (done) => { + it("does not self-reference when the package name doesn't match the request prefix", (t, done) => { const selfPkg = path.join(fixtures, "self-reference-pkg"); const resolver = ResolverFactory.createResolver({ extensions: [".js"], @@ -139,7 +143,7 @@ describe("self-reference negative case", () => { fileSystem: nodeFileSystem, }); resolver.resolve({}, selfPkg, "other-pkg", {}, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); diff --git a/test/dos-device-paths.test.js b/test/dos-device-paths.test.js index c9bbd37e..848a3f7e 100644 --- a/test/dos-device-paths.test.js +++ b/test/dos-device-paths.test.js @@ -2,12 +2,12 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, test } = require("node:test"); /* eslint-disable jsdoc/reject-any-type */ const path = require("path"); const { ResolverFactory } = require("../"); +const { describe, test } = require("./_runner"); // DOS device paths (`\\?\…`, `\\.\…`) are Windows-only constructs. The real // resolver tests below hit the actual filesystem through those prefixes, so diff --git a/test/entrypoints.test.js b/test/entrypoints.test.js index c8ec15ff..3d1d9fde 100644 --- a/test/entrypoints.test.js +++ b/test/entrypoints.test.js @@ -1,12 +1,11 @@ "use strict"; const assert = require("assert"); -const { describe, it } = require("node:test"); - const { processExportsField, processImportsField, } = require("../lib/util/entrypoints"); +const { describe, it } = require("./_runner"); describe("util/entrypoints processExportsField", () => { it("throws when the request ends with '/' (file required)", () => { diff --git a/test/exportsField.test.js b/test/exportsField.test.js index 315ad5d4..f01f8255 100644 --- a/test/exportsField.test.js +++ b/test/exportsField.test.js @@ -1,10 +1,13 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); + const path = require("path"); const CachedInputFileSystem = require("../lib/CachedInputFileSystem"); const ResolverFactory = require("../lib/ResolverFactory"); const { processExportsField } = require("../lib/util/entrypoints"); +const { describe, it } = require("./_runner"); /** @typedef {import("../lib/util/entrypoints").ExportsField} ExportsField */ @@ -2158,20 +2161,23 @@ describe("process exports field", () => { for (const testCase of testCases) { it(testCase.name, () => { if (testCase.expect instanceof Error) { - expect(() => { - // eslint-disable-next-line no-unused-expressions - processExportsField(testCase.suite[0])( - testCase.suite[1], - new Set(testCase.suite[2]), - )[0]; - }).toThrow(testCase.expect.message); + const { message } = testCase.expect; + assert.throws( + () => + processExportsField(testCase.suite[0])( + testCase.suite[1], + new Set(testCase.suite[2]), + ), + (err) => err instanceof Error && err.message.includes(message), + ); } else { - expect( + assert.deepStrictEqual( processExportsField(testCase.suite[0])( testCase.suite[1], new Set(testCase.suite[2]), )[0], - ).toEqual(testCase.expect); + testCase.expect, + ); } }); } @@ -2193,18 +2199,19 @@ describe("exportsFieldPlugin", () => { conditionNames: ["webpack"], }); - it("resolve root using exports field, not a main field", (done) => { + it("resolve root using exports field, not a main field", (t, done) => { resolver.resolve({}, fixture, "exports-field", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/exports-field/x.js"), ); done(); }); }); - it("resolve using exports field, not a browser field #1", (done) => { + it("resolve using exports field, not a browser field #1", (t, done) => { const resolver = ResolverFactory.createResolver({ aliasFields: ["browser"], conditionNames: ["custom"], @@ -2220,7 +2227,8 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/exports-field/lib/lib2/main.js"), ); done(); @@ -2228,7 +2236,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("resolve using exports field and a browser alias field #2", (done) => { + it("resolve using exports field and a browser alias field #2", (t, done) => { const resolver = ResolverFactory.createResolver({ aliasFields: ["browser"], conditionNames: ["node"], @@ -2244,7 +2252,8 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture2, "node_modules/exports-field/lib/browser.js"), ); done(); @@ -2252,7 +2261,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("throw error if extension not provided", (done) => { + it("throw error if extension not provided", (t, done) => { resolver.resolve( {}, fixture2, @@ -2260,17 +2269,17 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); // exports field maps ./dist/main -> ./lib/main, but ./lib/main (no ext) doesn't exist. // Resolution stops at the exports field level with a "Package path" error // (no fallback to parent node_modules per issue #399 fix). - expect(err.message).toMatch(/Package path/); + assert.match(err.message, /Package path/); done(); }, ); }); - it("throw error if extension not provided #2", (done) => { + it("throw error if extension not provided #2", (t, done) => { resolver.resolve( {}, fixture2, @@ -2278,14 +2287,14 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Package path/); + assert.ok(err instanceof Error); + assert.match(err.message, /Package path/); done(); }, ); }); - it("should resolve extension without fullySpecified", (done) => { + it("should resolve extension without fullySpecified", (t, done) => { commonjsResolver.resolve( {}, fixture2, @@ -2294,7 +2303,8 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture2, "node_modules/exports-field/lib/main.js"), ); done(); @@ -2302,7 +2312,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("resolver should respect condition names", (done) => { + it("resolver should respect condition names", (t, done) => { resolver.resolve( {}, fixture, @@ -2311,7 +2321,8 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/exports-field/lib/main.js"), ); done(); @@ -2319,7 +2330,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("resolver should respect fallback", (done) => { + it("resolver should respect fallback", (t, done) => { resolver.resolve( {}, fixture2, @@ -2328,7 +2339,8 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture2, "node_modules/exports-field/lib/browser.js"), ); done(); @@ -2336,7 +2348,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("resolver should respect query parameters #1", (done) => { + it("resolver should respect query parameters #1", (t, done) => { resolver.resolve( {}, fixture2, @@ -2345,7 +2357,8 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve( fixture2, "node_modules/exports-field/lib/browser.js?foo", @@ -2356,16 +2369,16 @@ describe("exportsFieldPlugin", () => { ); }); - it("resolver should respect query parameters #2. Direct matching", (done) => { + it("resolver should respect query parameters #2. Direct matching", (t, done) => { resolver.resolve({}, fixture2, "exports-field?foo", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/"\.\/\?foo" is not exported/); + assert.ok(err instanceof Error); + assert.match(err.message, /"\.\/\?foo" is not exported/); done(); }); }); - it("resolver should respect fragment parameters #1", (done) => { + it("resolver should respect fragment parameters #1", (t, done) => { resolver.resolve( {}, fixture2, @@ -2374,7 +2387,8 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve( fixture2, "node_modules/exports-field/lib/browser.js#foo", @@ -2385,16 +2399,16 @@ describe("exportsFieldPlugin", () => { ); }); - it("resolver should respect fragment parameters #2. Direct matching", (done) => { + it("resolver should respect fragment parameters #2. Direct matching", (t, done) => { resolver.resolve({}, fixture2, "exports-field#foo", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/"\.\/#foo" is not exported/); + assert.ok(err instanceof Error); + assert.match(err.message, /"\.\/#foo" is not exported/); done(); }); }); - it("resolver should respect query and fragment parameters together", (done) => { + it("resolver should respect query and fragment parameters together", (t, done) => { resolver.resolve( {}, fixture2, @@ -2403,7 +2417,8 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve( fixture2, "node_modules/exports-field/lib/browser.js?foo=bar#frag", @@ -2414,7 +2429,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("relative path should work, if relative path as request is used", (done) => { + it("relative path should work, if relative path as request is used", (t, done) => { resolver.resolve( {}, fixture, @@ -2423,7 +2438,8 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/exports-field/lib/main.js"), ); done(); @@ -2431,7 +2447,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("relative path should not work with exports field", (done) => { + it("relative path should not work with exports field", (t, done) => { resolver.resolve( {}, fixture, @@ -2439,14 +2455,14 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Can't resolve/); + assert.ok(err instanceof Error); + assert.match(err.message, /Can't resolve/); done(); }, ); }); - it("backtracking should not work for request", (done) => { + it("backtracking should not work for request", (t, done) => { resolver.resolve( {}, fixture, @@ -2454,8 +2470,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\.\/lib\/lib2\/\.\.\/\.\.\/\.\.\/a\.js" defined for "\.\/dist\/"/, ); done(); @@ -2463,7 +2480,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("backtracking should not work for exports field target", (done) => { + it("backtracking should not work for exports field target", (t, done) => { resolver.resolve( {}, fixture, @@ -2471,8 +2488,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\.\/\.\.\/\.\.\/a\.js" defined for "\.\/dist\/a\.js"/, ); done(); @@ -2480,16 +2498,16 @@ describe("exportsFieldPlugin", () => { ); }); - it("self-resolving root", (done) => { + it("self-resolving root", (t, done) => { resolver.resolve({}, fixture, "@exports-field/core", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "./a.js")); done(); }); }); - it("not exported error", (done) => { + it("not exported error", (t, done) => { resolver.resolve( {}, fixture, @@ -2497,8 +2515,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /not exported under the condition "webpack" from package/, ); done(); @@ -2506,7 +2525,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("field name path #1", (done) => { + it("field name path #1", (t, done) => { const resolver = ResolverFactory.createResolver({ aliasFields: ["browser"], exportsFields: [["exportsField", "exports"]], @@ -2517,14 +2536,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture3, "exports-field", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture3, "node_modules/exports-field/main.js"), ); done(); }); }); - it("field name path #2", (done) => { + it("field name path #2", (t, done) => { const resolver = ResolverFactory.createResolver({ aliasFields: ["browser"], exportsFields: [["exportsField", "exports"], "exports"], @@ -2535,14 +2555,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture3, "exports-field", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture3, "node_modules/exports-field/main.js"), ); done(); }); }); - it("field name path #3", (done) => { + it("field name path #3", (t, done) => { const resolver = ResolverFactory.createResolver({ aliasFields: ["browser"], exportsFields: ["exports", ["exportsField", "exports"]], @@ -2553,14 +2574,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture3, "exports-field", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture3, "node_modules/exports-field/main.js"), ); done(); }); }); - it("field name path #4", (done) => { + it("field name path #4", (t, done) => { const resolver = ResolverFactory.createResolver({ aliasFields: ["browser"], exportsFields: [["exports"]], @@ -2571,14 +2593,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture2, "exports-field", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture2, "node_modules/exports-field/index.js"), ); done(); }); }); - it("field name path #5", (done) => { + it("field name path #5", (t, done) => { const resolver = ResolverFactory.createResolver({ aliasFields: ["browser"], exportsFields: ["ex", ["exportsField", "exports"]], @@ -2589,52 +2612,54 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture3, "exports-field", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture3, "node_modules/exports-field/index"), ); done(); }); }); - it("request ending with slash #1", (done) => { + it("request ending with slash #1", (t, done) => { resolver.resolve({}, fixture, "exports-field/", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Resolving to directories is not possible/); + assert.ok(err instanceof Error); + assert.match(err.message, /Resolving to directories is not possible/); done(); }); }); - it("request ending with slash #2", (done) => { + it("request ending with slash #2", (t, done) => { resolver.resolve({}, fixture, "exports-field/dist/", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Resolving to directories is not possible/); + assert.ok(err instanceof Error); + assert.match(err.message, /Resolving to directories is not possible/); done(); }); }); - it("request ending with slash #3", (done) => { + it("request ending with slash #3", (t, done) => { resolver.resolve({}, fixture, "exports-field/lib/", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Resolving to directories is not possible/); + assert.ok(err instanceof Error); + assert.match(err.message, /Resolving to directories is not possible/); done(); }); }); - it("should throw error if target is invalid", (done) => { + it("should throw error if target is invalid", (t, done) => { resolver.resolve({}, fixture4, "exports-field", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\.\/a\/\.\.\/b\/\.\.\/\.\.\/pack1\/index\.js" defined for "\."/, ); done(); }); }); - it("throw error if exports field is invalid", (done) => { + it("throw error if exports field is invalid", (t, done) => { resolver.resolve( {}, fixture, @@ -2642,15 +2667,15 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/should be relative path/); - expect(err.message).toMatch(/umd/); + assert.ok(err instanceof Error); + assert.match(err.message, /should be relative path/); + assert.match(err.message, /umd/); done(); }, ); }); - it("should log the correct info", (done) => { + it("should log the correct info", (t, done) => { const log = []; resolver.resolve( {}, @@ -2660,30 +2685,32 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/exports-field/lib/browser.js"), ); - expect( + assert.deepStrictEqual( log.map((line) => line.replace(fixture, "...").replace(/\\/g, "/")), - ).toEqual([ - "resolve 'exports-field/dist/browser.js' in '...'", - " Parsed request is a module", - " using description file: .../package.json (relative path: .)", - " resolve as module", - " looking for modules in .../node_modules", - " existing directory .../node_modules/exports-field", - " using description file: .../node_modules/exports-field/package.json (relative path: .)", - " using exports field: ./lib/browser.js", - " using description file: .../node_modules/exports-field/package.json (relative path: ./lib/browser.js)", - " existing file: .../node_modules/exports-field/lib/browser.js", - " reporting result .../node_modules/exports-field/lib/browser.js", - ]); + [ + "resolve 'exports-field/dist/browser.js' in '...'", + " Parsed request is a module", + " using description file: .../package.json (relative path: .)", + " resolve as module", + " looking for modules in .../node_modules", + " existing directory .../node_modules/exports-field", + " using description file: .../node_modules/exports-field/package.json (relative path: .)", + " using exports field: ./lib/browser.js", + " using description file: .../node_modules/exports-field/package.json (relative path: ./lib/browser.js)", + " existing file: .../node_modules/exports-field/lib/browser.js", + " reporting result .../node_modules/exports-field/lib/browser.js", + ], + ); done(); }, ); }); - it("should resolve with wildcard pattern #1", (done) => { + it("should resolve with wildcard pattern #1", (t, done) => { const fixture = path.resolve( __dirname, "./fixtures/imports-exports-wildcard/", @@ -2692,14 +2719,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture, "m/features/f.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/m/src/features/f.js"), ); done(); }); }); - it("should resolve with wildcard pattern #2", (done) => { + it("should resolve with wildcard pattern #2", (t, done) => { const fixture = path.resolve( __dirname, "./fixtures/imports-exports-wildcard/", @@ -2708,14 +2736,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture, "m/features/y/y.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/m/src/features/y/y.js"), ); done(); }); }); - it("should resolve with wildcard pattern #3", (done) => { + it("should resolve with wildcard pattern #3", (t, done) => { const fixture = path.resolve( __dirname, "./fixtures/imports-exports-wildcard/", @@ -2724,14 +2753,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture, "m/features/y/y.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/m/src/features/y/y.js"), ); done(); }); }); - it("should resolve with wildcard pattern #4", (done) => { + it("should resolve with wildcard pattern #4", (t, done) => { const fixture = path.resolve( __dirname, "./fixtures/imports-exports-wildcard/", @@ -2745,7 +2775,8 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/m/src/features/y/y.js"), ); done(); @@ -2753,7 +2784,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("should resolve with wildcard pattern #5", (done) => { + it("should resolve with wildcard pattern #5", (t, done) => { const fixture = path.resolve( __dirname, "./fixtures/imports-exports-wildcard/", @@ -2762,14 +2793,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture, "m/middle/nested/f.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/m/src/middle/nested/f.js"), ); done(); }); }); - it("should resolve with wildcard pattern #6", (done) => { + it("should resolve with wildcard pattern #6", (t, done) => { const fixture = path.resolve( __dirname, "./fixtures/imports-exports-wildcard/", @@ -2783,7 +2815,8 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/m/src/middle-1/nested/f.js"), ); done(); @@ -2791,7 +2824,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("should resolve with wildcard pattern #7", (done) => { + it("should resolve with wildcard pattern #7", (t, done) => { const fixture = path.resolve( __dirname, "./fixtures/imports-exports-wildcard/", @@ -2805,7 +2838,8 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/m/src/middle-2/nested/f.js"), ); done(); @@ -2813,7 +2847,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("should resolve with wildcard pattern #8", (done) => { + it("should resolve with wildcard pattern #8", (t, done) => { const fixture = path.resolve( __dirname, "./fixtures/imports-exports-wildcard/", @@ -2822,7 +2856,8 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture, "m/middle-3/nested/f", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve( fixture, "./node_modules/m/src/middle-3/nested/f/nested/f.js", @@ -2832,7 +2867,7 @@ describe("exportsFieldPlugin", () => { }); }); - it("should resolve with wildcard pattern #9", (done) => { + it("should resolve with wildcard pattern #9", (t, done) => { const fixture = path.resolve( __dirname, "./fixtures/imports-exports-wildcard/", @@ -2841,14 +2876,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture, "m/middle-4/f/nested", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/m/src/middle-4/f/f.js"), ); done(); }); }); - it("should resolve with wildcard pattern #10", (done) => { + it("should resolve with wildcard pattern #10", (t, done) => { const fixture = path.resolve( __dirname, "./fixtures/imports-exports-wildcard/", @@ -2857,14 +2893,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture, "m/middle-5/f$/$", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/m/src/middle-5/f$/$.js"), ); done(); }); }); - it("should throw error if target is 'null'", (done) => { + it("should throw error if target is 'null'", (t, done) => { const fixture = path.resolve( __dirname, "./fixtures/imports-exports-wildcard/", @@ -2877,8 +2914,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /"\.\/features\/internal\/file\.js" is not exported/, ); done(); @@ -2886,7 +2924,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("should resolve with the `extensionAlias` option", (done) => { + it("should resolve with the `extensionAlias` option", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], extensionAlias: { @@ -2904,14 +2942,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture, "@org/pkg/string.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/@org/pkg/dist/string.js"), ); done(); }); }); - it("should resolve with the `extensionAlias` option #2", (done) => { + it("should resolve with the `extensionAlias` option #2", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], extensionAlias: { @@ -2929,14 +2968,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture, "pkg/string.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/pkg/dist/string.js"), ); done(); }); }); - it("should resolve with the `extensionAlias` option #3", (done) => { + it("should resolve with the `extensionAlias` option #3", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], extensionAlias: { @@ -2954,14 +2994,15 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture, "pkg/string.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "./node_modules/pkg/dist/string.js"), ); done(); }); }); - it("should throw error with the `extensionAlias` option", (done) => { + it("should throw error with the `extensionAlias` option", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], extensionAlias: { @@ -2978,13 +3019,13 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture, "pkg/string.js", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/"\.\/string\.ts" is not exported/); + assert.ok(err instanceof Error); + assert.match(err.message, /"\.\/string\.ts" is not exported/); done(); }); }); - it("should throw error with the `extensionAlias` option #2", (done) => { + it("should throw error with the `extensionAlias` option #2", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], extensionAlias: { @@ -3001,13 +3042,13 @@ describe("exportsFieldPlugin", () => { resolver.resolve({}, fixture, "pkg/string.js", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/"\.\/string\.ts" is not exported/); + assert.ok(err instanceof Error); + assert.match(err.message, /"\.\/string\.ts" is not exported/); done(); }); }); - it("invalid package target #1", (done) => { + it("invalid package target #1", (t, done) => { resolver.resolve( {}, fixture5, @@ -3016,13 +3057,16 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toBe(`${path.resolve(fixture5, "./a.js")}?foo=../`); + assert.strictEqual( + result, + `${path.resolve(fixture5, "./a.js")}?foo=../`, + ); done(); }, ); }); - it("invalid package target #2", (done) => { + it("invalid package target #2", (t, done) => { resolver.resolve( {}, fixture5, @@ -3031,13 +3075,16 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toBe(`${path.resolve(fixture5, "./a.js")}?foo=../#../`); + assert.strictEqual( + result, + `${path.resolve(fixture5, "./a.js")}?foo=../#../`, + ); done(); }, ); }); - it("invalid package target #3", (done) => { + it("invalid package target #3", (t, done) => { resolver.resolve( {}, fixture5, @@ -3045,8 +3092,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "-bad-specifier-" defined for "\.\/bar"/, ); done(); @@ -3054,7 +3102,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #4", (done) => { + it("invalid package target #4", (t, done) => { resolver.resolve( {}, fixture5, @@ -3062,8 +3110,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "foo" defined for "\.\/baz-multi"/, ); done(); @@ -3071,7 +3120,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #5", (done) => { + it("invalid package target #5", (t, done) => { resolver.resolve( {}, fixture5, @@ -3080,13 +3129,13 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture5, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture5, "./a.js")); done(); }, ); }); - it("invalid package target #6", (done) => { + it("invalid package target #6", (t, done) => { resolver.resolve( {}, fixture5, @@ -3095,13 +3144,13 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture5, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture5, "./a.js")); done(); }, ); }); - it("invalid package target #7", (done) => { + it("invalid package target #7", (t, done) => { resolver.resolve( {}, fixture5, @@ -3110,13 +3159,13 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture5, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture5, "./a.js")); done(); }, ); }); - it("invalid package target #8", (done) => { + it("invalid package target #8", (t, done) => { resolver.resolve( {}, fixture5, @@ -3124,8 +3173,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\/b\/index\.mjs" defined for "\.\/utils\//, ); done(); @@ -3133,7 +3183,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #9", (done) => { + it("invalid package target #9", (t, done) => { resolver.resolve( {}, fixture5, @@ -3141,8 +3191,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\/a\/index.mjs" defined for "\.\/utils1\/"/, ); done(); @@ -3150,7 +3201,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #10", (done) => { + it("invalid package target #10", (t, done) => { resolver.resolve( {}, fixture5, @@ -3158,8 +3209,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\.\.\/this\/index" defined for "\.\/utils2\/"/, ); done(); @@ -3167,7 +3219,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #11", (done) => { + it("invalid package target #11", (t, done) => { resolver.resolve( {}, fixture5, @@ -3175,8 +3227,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\.\.\/this\/index" defined for "\.\/utils3\/\*"/, ); done(); @@ -3184,7 +3237,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #12", (done) => { + it("invalid package target #12", (t, done) => { resolver.resolve( {}, fixture5, @@ -3192,8 +3245,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\.\.\/src\/index" defined for "\.\/utils4\/\*"/, ); done(); @@ -3201,7 +3255,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #13", (done) => { + it("invalid package target #13", (t, done) => { resolver.resolve( {}, fixture5, @@ -3209,8 +3263,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\.\.\/src\/index" defined for "\.\/utils5\/"/, ); done(); @@ -3218,7 +3273,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #14", (done) => { + it("invalid package target #14", (t, done) => { resolver.resolve( {}, fixture5, @@ -3226,8 +3281,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\." defined for "\.\/\*"/, ); done(); @@ -3235,7 +3291,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #15", (done) => { + it("invalid package target #15", (t, done) => { resolver.resolve( {}, fixture5, @@ -3243,12 +3299,13 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); // exports maps ./non-existent.js -> ["-bad-specifier-", "./non-existent.js", "./a.js"] // The first valid target (./non-existent.js) doesn't exist, so the paths array is // abandoned (issue #400) and resolution fails with a "Package path" error // (no fallback to parent node_modules per issue #399 fix). - expect(err.message).toMatch( + assert.match( + err.message, /Package path \.\/non-existent\.js.*no valid target file was found/, ); done(); @@ -3256,7 +3313,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #16", (done) => { + it("invalid package target #16", (t, done) => { resolver.resolve( {}, fixture5, @@ -3264,8 +3321,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\.\.\/\.\.\/test\/foo" defined for "\.\/dep\/multi1"/, ); done(); @@ -3273,7 +3331,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #17", (done) => { + it("invalid package target #17", (t, done) => { resolver.resolve( {}, fixture5, @@ -3281,8 +3339,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\.\.\/\.\.\/test" defined for "\.\/dep\/multi2"/, ); done(); @@ -3290,7 +3349,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #18", (done) => { + it("invalid package target #18", (t, done) => { resolver.resolve( {}, fixture5, @@ -3298,8 +3357,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\.\/c\/\.\.\/b\/\.\.\/\.\.\/pack1\/index\.js" defined for "\.\/dep\/multi4"/, ); done(); @@ -3307,7 +3367,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("invalid package target #19", (done) => { + it("invalid package target #19", (t, done) => { resolver.resolve( {}, fixture5, @@ -3315,8 +3375,9 @@ describe("exportsFieldPlugin", () => { {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "exports" target "\.\/a\/\.\.\/b\/\.\.\/\.\.\/pack1\/index\.js" defined for "\.\/dep\/multi5"/, ); done(); @@ -3324,7 +3385,7 @@ describe("exportsFieldPlugin", () => { ); }); - it("should resolve the valid thing in array of export #1", (done) => { + it("should resolve the valid thing in array of export #1", (t, done) => { resolver.resolve( {}, fixture5, @@ -3333,13 +3394,13 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture5, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture5, "./a.js")); done(); }, ); }); - it("should resolve the valid thing in array of export #2", (done) => { + it("should resolve the valid thing in array of export #2", (t, done) => { resolver.resolve( {}, fixture5, @@ -3348,13 +3409,13 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture5, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture5, "./a.js")); done(); }, ); }); - it("should resolve the valid thing in array of export #3", (done) => { + it("should resolve the valid thing in array of export #3", (t, done) => { resolver.resolve( {}, fixture5, @@ -3363,13 +3424,13 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture5, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture5, "./a.js")); done(); }, ); }); - it("should resolve the valid thing in array of export #4", (done) => { + it("should resolve the valid thing in array of export #4", (t, done) => { resolver.resolve( {}, fixture5, @@ -3378,7 +3439,7 @@ describe("exportsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture5, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture5, "./a.js")); done(); }, ); @@ -3388,7 +3449,7 @@ describe("exportsFieldPlugin", () => { // When workspace/node_modules/pkg has an exports field mapping ./src/index.js -> ./dist/index.js // but ./dist/index.js does NOT exist, resolution should fail with an error // and must NOT fall back to the root node_modules/pkg version. - it("should not fall back to parent node_modules when exports field maps to a missing file (issue #399)", (done) => { + it("should not fall back to parent node_modules when exports field maps to a missing file (issue #399)", (t, done) => { const nestedResolver = ResolverFactory.createResolver({ extensions: [".js"], fileSystem: new CachedInputFileSystem(fs, 4000), @@ -3409,13 +3470,13 @@ describe("exportsFieldPlugin", () => { ), ); } - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }, ); }); - it("emits 'is not exported' error when no conditions match", (done) => { + it("emits 'is not exported' error when no conditions match", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], conditionNames: ["unknown-cond"], @@ -3428,7 +3489,7 @@ describe("exportsFieldPlugin", () => { "exports-field/index", {}, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }, ); diff --git a/test/extension-alias.test.js b/test/extension-alias.test.js index ff42884e..5a06a7bb 100644 --- a/test/extension-alias.test.js +++ b/test/extension-alias.test.js @@ -2,12 +2,12 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const CachedInputFileSystem = require("../lib/CachedInputFileSystem"); const ResolverFactory = require("../lib/ResolverFactory"); +const { describe, it } = require("./_runner"); /** @typedef {import("../lib/util/entrypoints").ImportsField} ImportsField */ diff --git a/test/extensions.test.js b/test/extensions.test.js index 8df506da..16ca60fe 100644 --- a/test/extensions.test.js +++ b/test/extensions.test.js @@ -2,10 +2,10 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); +const { describe, it } = require("./_runner"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); diff --git a/test/fallback.test.js b/test/fallback.test.js index 9887da13..ed10c12f 100644 --- a/test/fallback.test.js +++ b/test/fallback.test.js @@ -1,7 +1,10 @@ "use strict"; +const assert = require("assert"); + const { Volume } = require("memfs"); const { ResolverFactory } = require("../"); +const { beforeEach, describe, it } = require("./_runner"); describe("fallback", () => { let resolver; @@ -46,65 +49,96 @@ describe("fallback", () => { }); it("should resolve a not aliased module", () => { - expect(resolver.resolveSync({}, "/", "a")).toBe("/a/index"); - expect(resolver.resolveSync({}, "/", "a/index")).toBe("/a/index"); - expect(resolver.resolveSync({}, "/", "a/dir")).toBe("/a/dir/index"); - expect(resolver.resolveSync({}, "/", "a/dir/index")).toBe("/a/dir/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "a"), "/a/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "a/index"), "/a/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "a/dir"), "/a/dir/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "a/dir/index"), + "/a/dir/index", + ); }); it("should resolve an fallback module", () => { - expect(resolver.resolveSync({}, "/", "aliasA")).toBe("/a/index"); - expect(resolver.resolveSync({}, "/", "aliasA/index")).toBe("/a/index"); - expect(resolver.resolveSync({}, "/", "aliasA/dir")).toBe("/a/dir/index"); - expect(resolver.resolveSync({}, "/", "aliasA/dir/index")).toBe( + assert.strictEqual(resolver.resolveSync({}, "/", "aliasA"), "/a/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "aliasA/index"), + "/a/index", + ); + assert.strictEqual( + resolver.resolveSync({}, "/", "aliasA/dir"), + "/a/dir/index", + ); + assert.strictEqual( + resolver.resolveSync({}, "/", "aliasA/dir/index"), "/a/dir/index", ); }); it("should resolve an ignore module", () => { - expect(resolver.resolveSync({}, "/", "ignored")).toBe(false); + assert.strictEqual(resolver.resolveSync({}, "/", "ignored"), false); }); it("should resolve a recursive aliased module", () => { - expect(resolver.resolveSync({}, "/", "recursive")).toBe("/recursive/index"); - expect(resolver.resolveSync({}, "/", "recursive/index")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "recursive"), "/recursive/index", ); - expect(resolver.resolveSync({}, "/", "recursive/dir")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "recursive/index"), + "/recursive/index", + ); + assert.strictEqual( + resolver.resolveSync({}, "/", "recursive/dir"), "/recursive/dir/index", ); - expect(resolver.resolveSync({}, "/", "recursive/dir/index")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "recursive/dir/index"), "/recursive/dir/index", ); - expect(resolver.resolveSync({}, "/", "recursive/file")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "recursive/file"), "/recursive/dir/file", ); }); it("should resolve a file aliased module with a query", () => { - expect(resolver.resolveSync({}, "/", "b?query")).toBe("/b/index?query"); - expect(resolver.resolveSync({}, "/", "c?query")).toBe("/c/index?query"); + assert.strictEqual( + resolver.resolveSync({}, "/", "b?query"), + "/b/index?query", + ); + assert.strictEqual( + resolver.resolveSync({}, "/", "c?query"), + "/c/index?query", + ); }); it("should resolve a path in a file aliased module", () => { - expect(resolver.resolveSync({}, "/", "b/index")).toBe("/b/index"); - expect(resolver.resolveSync({}, "/", "b/dir")).toBe("/b/dir/index"); - expect(resolver.resolveSync({}, "/", "b/dir/index")).toBe("/b/dir/index"); - expect(resolver.resolveSync({}, "/", "c/index")).toBe("/c/index"); - expect(resolver.resolveSync({}, "/", "c/dir")).toBe("/c/dir/index"); - expect(resolver.resolveSync({}, "/", "c/dir/index")).toBe("/c/dir/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "b/index"), "/b/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "b/dir"), "/b/dir/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "b/dir/index"), + "/b/dir/index", + ); + assert.strictEqual(resolver.resolveSync({}, "/", "c/index"), "/c/index"); + assert.strictEqual(resolver.resolveSync({}, "/", "c/dir"), "/c/dir/index"); + assert.strictEqual( + resolver.resolveSync({}, "/", "c/dir/index"), + "/c/dir/index", + ); }); it("should resolve a file in multiple aliased dirs", () => { - expect(resolver.resolveSync({}, "/", "multiAlias/dir/file")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "multiAlias/dir/file"), "/e/dir/file", ); - expect(resolver.resolveSync({}, "/", "multiAlias/anotherDir")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/", "multiAlias/anotherDir"), "/e/anotherDir/index", ); }); - it("should log the correct info", (done) => { + it("should log the correct info", (t, done) => { const log = []; resolver.resolve( {}, @@ -113,8 +147,8 @@ describe("fallback", () => { { log: (v) => log.push(v) }, (err, result) => { if (err) return done(err); - expect(result).toBe("/a/dir/index"); - expect(log).toEqual([ + assert.strictEqual(result, "/a/dir/index"); + assert.deepStrictEqual(log, [ "resolve 'aliasA/dir' in '/'", " Parsed request is a module", " No description file found in / or above", diff --git a/test/file-url-options.test.js b/test/file-url-options.test.js index 1578e076..2ada9253 100644 --- a/test/file-url-options.test.js +++ b/test/file-url-options.test.js @@ -1,5 +1,7 @@ "use strict"; +const assert = require("assert"); + const fs = require("fs"); const path = require("path"); const { fileURLToPath, pathToFileURL } = require("url"); @@ -7,6 +9,7 @@ const enhancedResolve = require("../lib"); const CachedInputFileSystem = require("../lib/CachedInputFileSystem"); const ResolverFactory = require("../lib/ResolverFactory"); const { toPath } = require("../lib/util/path"); +const { describe, it } = require("./_runner"); describe("file: URL path options", () => { const fixtures = path.resolve(__dirname, "fixtures"); @@ -21,75 +24,75 @@ describe("file: URL path options", () => { }); describe("roots", () => { - it("should accept a URL instance", (done) => { + it("should accept a URL instance", (t, done) => { const resolver = makeResolver({ roots: [pathToFileURL(fixtures)] }); resolver.resolve({}, fixtures, "/b.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixtures, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixtures, "b.js")); done(); }); }); }); describe("modules", () => { - it("should accept a URL instance", (done) => { + it("should accept a URL instance", (t, done) => { const resolver = makeResolver({ modules: [pathToFileURL(modulesDir)] }); resolver.resolve({}, fixtures, "m1/a", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(modulesDir, "m1/a.js")); + assert.deepStrictEqual(result, path.resolve(modulesDir, "m1/a.js")); done(); }); }); - it("should accept a single URL instance", (done) => { + it("should accept a single URL instance", (t, done) => { const resolver = makeResolver({ modules: pathToFileURL(modulesDir) }); resolver.resolve({}, fixtures, "m1/a", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(modulesDir, "m1/a.js")); + assert.deepStrictEqual(result, path.resolve(modulesDir, "m1/a.js")); done(); }); }); - it("should keep folder-name entries untouched", (done) => { + it("should keep folder-name entries untouched", (t, done) => { const resolver = makeResolver({ modules: ["node_modules"] }); resolver.resolve({}, fixtures, "m1/a", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(modulesDir, "m1/a.js")); + assert.deepStrictEqual(result, path.resolve(modulesDir, "m1/a.js")); done(); }); }); }); describe("alias", () => { - it("should accept a URL instance as the target", (done) => { + it("should accept a URL instance as the target", (t, done) => { const resolver = makeResolver({ alias: { "@": pathToFileURL(fixtures) }, }); resolver.resolve({}, fixtures, "@/b.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixtures, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixtures, "b.js")); done(); }); }); - it("should accept a URL instance in an array target", (done) => { + it("should accept a URL instance in an array target", (t, done) => { const resolver = makeResolver({ alias: { "@": [pathToFileURL(modulesDir), pathToFileURL(fixtures)] }, }); resolver.resolve({}, fixtures, "@/b.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixtures, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixtures, "b.js")); done(); }); }); - it("should accept array-form entries with a URL target", (done) => { + it("should accept array-form entries with a URL target", (t, done) => { const resolver = makeResolver({ alias: [{ name: "@", alias: pathToFileURL(fixtures) }], }); resolver.resolve({}, fixtures, "@/b.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixtures, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixtures, "b.js")); done(); }); }); @@ -97,47 +100,47 @@ describe("file: URL path options", () => { // A `file:` string target is not converted here (strings stay literal), // but the rewritten request still resolves because the request side // (`parseIdentifier`) converts `file:` request strings. - it("should still resolve a file: string target via request parsing", (done) => { + it("should still resolve a file: string target via request parsing", (t, done) => { const resolver = makeResolver({ alias: { "@": String(pathToFileURL(fixtures)) }, }); resolver.resolve({}, fixtures, "@/b.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixtures, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixtures, "b.js")); done(); }); }); }); describe("restrictions", () => { - it("should accept a URL instance", (done) => { + it("should accept a URL instance", (t, done) => { const resolver = makeResolver({ restrictions: [pathToFileURL(fixtures)], }); resolver.resolve({}, fixtures, "./b.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixtures, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixtures, "b.js")); done(); }); }); - it("should keep RegExp entries untouched", (done) => { + it("should keep RegExp entries untouched", (t, done) => { const resolver = makeResolver({ restrictions: [/\.js$/] }); resolver.resolve({}, fixtures, "./b.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.resolve(fixtures, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixtures, "b.js")); done(); }); }); // A `file:` string restriction stays literal, so no real path is ever // "inside" it and resolution is blocked — use a URL instance or a path. - it("should treat a file: string restriction as a literal path", (done) => { + it("should treat a file: string restriction as a literal path", (t, done) => { const resolver = makeResolver({ restrictions: [String(pathToFileURL(fixtures))], }); resolver.resolve({}, fixtures, "./b.js", {}, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); @@ -147,7 +150,7 @@ describe("file: URL path options", () => { const tsconfigDir = path.resolve(fixtures, "tsconfig-paths", "base"); const tsconfigFile = path.join(tsconfigDir, "tsconfig.json"); - it("should accept a URL instance as the config file", (done) => { + it("should accept a URL instance as the config file", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -162,7 +165,8 @@ describe("file: URL path options", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(tsconfigDir, "src", "components", "button.ts"), ); done(); @@ -170,7 +174,7 @@ describe("file: URL path options", () => { ); }); - it("should accept a URL instance as options.configFile", (done) => { + it("should accept a URL instance as options.configFile", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem, extensions: [".ts", ".tsx"], @@ -185,7 +189,8 @@ describe("file: URL path options", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(tsconfigDir, "src", "components", "button.ts"), ); done(); @@ -196,15 +201,15 @@ describe("file: URL path options", () => { describe("toPath", () => { it("should convert a file: URL instance to a path", () => { - expect(toPath(pathToFileURL(modulesDir))).toBe(modulesDir); + assert.strictEqual(toPath(pathToFileURL(modulesDir)), modulesDir); }); // A string is always a literal path (matches Node fs, nodejs/node#17658), // so a directory literally named `file:` is never mistaken for a URL. it("should leave strings untouched, including `file:`-prefixed ones", () => { - expect(toPath("file:foo")).toBe("file:foo"); - expect(toPath("file:///abs")).toBe("file:///abs"); - expect(toPath(modulesDir)).toBe(modulesDir); + assert.strictEqual(toPath("file:foo"), "file:foo"); + assert.strictEqual(toPath("file:///abs"), "file:///abs"); + assert.strictEqual(toPath(modulesDir), modulesDir); }); }); }); @@ -220,7 +225,7 @@ describe("file: URL resolve context and request", () => { }); describe("context (path) argument", () => { - it("should accept a URL instance as the context path", (done) => { + it("should accept a URL instance as the context path", (t, done) => { resolver.resolve( {}, pathToFileURL(fixtures), @@ -228,25 +233,26 @@ describe("file: URL resolve context and request", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(bFile); + assert.deepStrictEqual(result, bFile); done(); }, ); }); - it("should accept a URL context when the context object is omitted", (done) => { + it("should accept a URL context when the context object is omitted", (t, done) => { resolver.resolve(pathToFileURL(fixtures), "./b.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(bFile); + assert.deepStrictEqual(result, bFile); done(); }); }); - it("should still reject a non-string, non-URL context path", (done) => { + it("should still reject a non-string, non-URL context path", (t, done) => { // @ts-expect-error for tests resolver.resolve({}, 42, "./b.js", {}, (err) => { - expect(err).toBeInstanceOf(Error); - expect(/** @type {Error} */ (err).message).toMatch( + assert.ok(err instanceof Error); + assert.match( + /** @type {Error} */ (err).message, /path argument is not a string/, ); done(); @@ -255,7 +261,7 @@ describe("file: URL resolve context and request", () => { }); describe("request argument", () => { - it("should accept a file: URL instance as the request", (done) => { + it("should accept a file: URL instance as the request", (t, done) => { resolver.resolve( {}, fixtures, @@ -263,17 +269,18 @@ describe("file: URL resolve context and request", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(bFile); + assert.deepStrictEqual(result, bFile); done(); }, ); }); - it("should still reject a non-string, non-URL request", (done) => { + it("should still reject a non-string, non-URL request", (t, done) => { // @ts-expect-error for tests resolver.resolve({}, fixtures, 42, {}, (err) => { - expect(err).toBeInstanceOf(Error); - expect(/** @type {Error} */ (err).message).toMatch( + assert.ok(err instanceof Error); + assert.match( + /** @type {Error} */ (err).message, /request argument is not a string/, ); done(); @@ -285,37 +292,42 @@ describe("file: URL resolve context and request", () => { // context)` — request is the first param, context the base — so an absolute // `file:` request wins over the context base, exactly like the URL constructor. describe("both context and request as URL", () => { - it("should resolve a URL request against a URL context like new URL()", (done) => { + it("should resolve a URL request against a URL context like new URL()", (t, done) => { const contextURL = pathToFileURL(fixtures); const requestURL = pathToFileURL(bFile); resolver.resolve({}, contextURL, requestURL, {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(bFile); - expect(result).toEqual(fileURLToPath(new URL(requestURL, contextURL))); + assert.deepStrictEqual(result, bFile); + assert.deepStrictEqual( + result, + fileURLToPath(new URL(requestURL, contextURL)), + ); done(); }); }); }); describe("high-level resolve API", () => { - it("resolve should accept a URL context with the context object omitted", (done) => { + it("resolve should accept a URL context with the context object omitted", (t, done) => { enhancedResolve(pathToFileURL(fixtures), "./b.js", (err, result) => { if (err) return done(err); - expect(result).toEqual(bFile); + assert.deepStrictEqual(result, bFile); done(); }); }); it("resolveSync should accept a URL context", () => { - expect(enhancedResolve.sync(pathToFileURL(fixtures), "./b.js")).toEqual( + assert.deepStrictEqual( + enhancedResolve.sync(pathToFileURL(fixtures), "./b.js"), bFile, ); }); it("resolvePromise should accept a URL context", async () => { - await expect( - enhancedResolve.promise(pathToFileURL(fixtures), "./b.js"), - ).resolves.toEqual(bFile); + assert.deepStrictEqual( + await enhancedResolve.promise(pathToFileURL(fixtures), "./b.js"), + bFile, + ); }); }); }); diff --git a/test/fileURLToPath.test.js b/test/fileURLToPath.test.js index d9599cd8..26fd58d8 100644 --- a/test/fileURLToPath.test.js +++ b/test/fileURLToPath.test.js @@ -1,8 +1,11 @@ "use strict"; +const assert = require("assert"); + const path = require("path"); const { pathToFileURL } = require("url"); const fileURLToPath = require("../lib/util/fileURLToPath"); +const { describe, it } = require("./_runner"); describe("fileURLToPath", () => { // Expected values are pinned literals (computed once from Node's reference @@ -30,7 +33,7 @@ describe("fileURLToPath", () => { describe("posix branch", () => { for (const [input, expected] of posixCases) { it(`converts ${input}`, () => { - expect(fileURLToPath(input, { windows: false })).toBe(expected); + assert.strictEqual(fileURLToPath(input, { windows: false }), expected); }); } }); @@ -38,55 +41,66 @@ describe("fileURLToPath", () => { describe("windows branch", () => { for (const [input, expected] of windowsCases) { it(`converts ${input}`, () => { - expect(fileURLToPath(input, { windows: true })).toBe(expected); + assert.strictEqual(fileURLToPath(input, { windows: true }), expected); }); } }); it("accepts a URL instance", () => { const url = new URL("file:///home/user/project"); - expect(fileURLToPath(url, { windows: false })).toBe("/home/user/project"); + assert.strictEqual( + fileURLToPath(url, { windows: false }), + "/home/user/project", + ); }); it("round-trips pathToFileURL on the host platform", () => { // Build a host-absolute path so the round-trip is correct on Windows // (drive letter) as well as POSIX, using the host-default platform branch. const p = path.resolve("a b", "c"); - expect(fileURLToPath(pathToFileURL(p))).toBe(p); + assert.strictEqual(fileURLToPath(pathToFileURL(p)), p); }); it("throws for a non-file: scheme", () => { - expect(() => fileURLToPath("http://example.com/x")).toThrow("scheme file"); + assert.throws( + () => fileURLToPath("http://example.com/x"), + (err) => err instanceof Error && err.message.includes("scheme file"), + ); }); it("throws for an encoded slash in the posix branch", () => { - expect(() => fileURLToPath("file:///a%2fb", { windows: false })).toThrow( + assert.throws( + () => fileURLToPath("file:///a%2fb", { windows: false }), /encoded \/ characters/, ); }); it("throws for an encoded backslash in the windows branch", () => { - expect(() => fileURLToPath("file:///C:/a%5cb", { windows: true })).toThrow( + assert.throws( + () => fileURLToPath("file:///C:/a%5cb", { windows: true }), /encoded \\ or \/ characters/, ); }); it("throws for a non-absolute windows drive path", () => { - expect(() => fileURLToPath("file:///foo", { windows: true })).toThrow( - "must be absolute", + assert.throws( + () => fileURLToPath("file:///foo", { windows: true }), + (err) => err instanceof Error && err.message.includes("must be absolute"), ); }); it("throws for a posix host that is not empty", () => { - expect(() => fileURLToPath("file://host/x", { windows: false })).toThrow( + assert.throws( + () => fileURLToPath("file://host/x", { windows: false }), /host/, ); }); it("decodes a UNC path with an ASCII host in the windows branch", () => { - expect( + assert.strictEqual( fileURLToPath("file://server/share/file.js", { windows: true }), - ).toBe("\\\\server\\share\\file.js"); + "\\\\server\\share\\file.js", + ); }); // Documented deviation: Node runs UNC hosts through domainToUnicode @@ -94,7 +108,8 @@ describe("fileURLToPath", () => { // differing only for rare internationalized UNC hosts. // cspell:ignore aagokeh it("keeps a punycode UNC host as-is (deviation from Node)", () => { - expect(fileURLToPath("file://xn--h1aagokeh/a", { windows: true })).toBe( + assert.strictEqual( + fileURLToPath("file://xn--h1aagokeh/a", { windows: true }), "\\\\xn--h1aagokeh\\a", ); }); diff --git a/test/forEachBail.test.js b/test/forEachBail.test.js index 629fcf03..b0dc831a 100644 --- a/test/forEachBail.test.js +++ b/test/forEachBail.test.js @@ -1,9 +1,8 @@ "use strict"; const assert = require("assert"); -const { describe, it } = require("node:test"); - const { forEachBail } = require("../"); +const { describe, it } = require("./_runner"); describe("forEachBail", () => { it("should iterate correctly", (t, done) => { diff --git a/test/fullSpecified.test.js b/test/fullSpecified.test.js index dfdd7c1e..6d6bda5f 100644 --- a/test/fullSpecified.test.js +++ b/test/fullSpecified.test.js @@ -1,10 +1,10 @@ "use strict"; const assert = require("assert"); -const { describe, it } = require("node:test"); const { Volume } = require("memfs"); const { ResolverFactory } = require("../"); +const { describe, it } = require("./_runner"); describe("fullSpecified", () => { const fileSystem = Volume.fromJSON( diff --git a/test/getPaths.test.js b/test/getPaths.test.js index 10e6e61a..1fc80413 100644 --- a/test/getPaths.test.js +++ b/test/getPaths.test.js @@ -1,10 +1,10 @@ "use strict"; const assert = require("assert"); -const { describe, it } = require("node:test"); const getPaths = require("../lib/getPaths"); const { getPathsCached } = require("../lib/getPaths"); +const { describe, it } = require("./_runner"); /** * @type {[string, { paths: string[], segments: string[] }][]} diff --git a/test/identifier.test.js b/test/identifier.test.js index 031dd231..f009d2d7 100644 --- a/test/identifier.test.js +++ b/test/identifier.test.js @@ -1,9 +1,8 @@ "use strict"; const assert = require("assert"); -const { describe, it } = require("node:test"); - const { parseIdentifier } = require("../lib/util/identifier"); +const { describe, it } = require("./_runner"); /** * @typedef {{ input: string, expected: [string, string, string] }} TestSuite diff --git a/test/importsField.test.js b/test/importsField.test.js index e38cb4e3..89ca1da3 100644 --- a/test/importsField.test.js +++ b/test/importsField.test.js @@ -1,10 +1,13 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); + const path = require("path"); const CachedInputFileSystem = require("../lib/CachedInputFileSystem"); const ResolverFactory = require("../lib/ResolverFactory"); const { processImportsField } = require("../lib/util/entrypoints"); +const { describe, it } = require("./_runner"); /** @typedef {import("../lib/util/entrypoints").ImportsField} ImportsField */ @@ -1224,19 +1227,23 @@ describe("process imports field", () => { for (const testCase of testCases) { it(testCase.name, () => { if (testCase.expect instanceof Error) { - expect(() => - processImportsField(testCase.suite[0])( - testCase.suite[1], - new Set(testCase.suite[2]), - ), - ).toThrow(testCase.expect.message); + const { message } = testCase.expect; + assert.throws( + () => + processImportsField(testCase.suite[0])( + testCase.suite[1], + new Set(testCase.suite[2]), + ), + (err) => err instanceof Error && err.message.includes(message), + ); } else { - expect( + assert.deepStrictEqual( processImportsField(testCase.suite[0])( testCase.suite[1], new Set(testCase.suite[2]), )[0], - ).toEqual(testCase.expect); + testCase.expect, + ); } }); } @@ -1252,16 +1259,16 @@ describe("importsFieldPlugin", () => { conditionNames: ["webpack"], }); - it("should resolve using imports field instead of self-referencing", (done) => { + it("should resolve using imports field instead of self-referencing", (t, done) => { resolver.resolve({}, fixture, "#imports-field", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "b.js")); done(); }); }); - it("should resolve using imports field instead of self-referencing for a subpath", (done) => { + it("should resolve using imports field instead of self-referencing for a subpath", (t, done) => { resolver.resolve( {}, path.resolve(fixture, "dir"), @@ -1270,24 +1277,25 @@ describe("importsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "b.js")); done(); }, ); }); - it("should disallow resolve out of package scope", (done) => { + it("should disallow resolve out of package scope", (t, done) => { resolver.resolve({}, fixture, "#b", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "imports" target "\.\.\/b\.js" defined for "#b"/, ); done(); }); }); - it("field name #1", (done) => { + it("field name #1", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], fileSystem: nodeFileSystem, @@ -1299,12 +1307,12 @@ describe("importsFieldPlugin", () => { resolver.resolve({}, fixture, "#imports-field", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture, "b.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "b.js")); done(); }); }); - it("field name #2", (done) => { + it("field name #2", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], fileSystem: nodeFileSystem, @@ -1316,50 +1324,57 @@ describe("importsFieldPlugin", () => { resolver.resolve({}, fixture, "#b", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture, "a.js")); + assert.deepStrictEqual(result, path.resolve(fixture, "a.js")); done(); }); }); - it("should resolve package #1", (done) => { + it("should resolve package #1", (t, done) => { resolver.resolve({}, fixture, "#a/dist/main.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/a/lib/main.js"), ); done(); }); }); - it("should resolve package #2", (done) => { + it("should resolve package #2", (t, done) => { resolver.resolve({}, fixture, "#a", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/is not imported from package/); + assert.ok(err instanceof Error); + assert.match(err.message, /is not imported from package/); done(); }); }); - it("should resolve package #3", (done) => { + it("should resolve package #3", (t, done) => { resolver.resolve({}, fixture, "#ccc/index.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture, "node_modules/c/index.js")); + assert.deepStrictEqual( + result, + path.resolve(fixture, "node_modules/c/index.js"), + ); done(); }); }); - it("should resolve package #4", (done) => { + it("should resolve package #4", (t, done) => { resolver.resolve({}, fixture, "#c", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture, "node_modules/c/index.js")); + assert.deepStrictEqual( + result, + path.resolve(fixture, "node_modules/c/index.js"), + ); done(); }); }); - it("should resolve absolute path as an imports field target", (done) => { + it("should resolve absolute path as an imports field target", (t, done) => { const tmpdirPrefix = path.join(fixture, "node_modules/absolute-tmp-"); fs.mkdtemp(tmpdirPrefix, (err, dir) => { if (err) done(err); @@ -1375,13 +1390,13 @@ describe("importsFieldPlugin", () => { fs.rmdirSync(dir); if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(file); + assert.deepStrictEqual(result, file); done(); }); }); }); - it("should log the correct info", (done) => { + it("should log the correct info", (t, done) => { const log = []; resolver.resolve( {}, @@ -1391,34 +1406,36 @@ describe("importsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join(fixture, "node_modules/a/lib/index.js"), ); - expect( + assert.deepStrictEqual( log.map((line) => line.replace(fixture, "...").replace(/\\/g, "/")), - ).toEqual([ - "resolve '#a/dist/index.js' in '...'", - " using description file: .../package.json (relative path: .)", - " resolve as internal import", - " using imports field: a/dist/index.js", - " Parsed request is a module", - " using description file: .../package.json (relative path: .)", - " resolve as module", - " looking for modules in .../node_modules", - " existing directory .../node_modules/a", - " using description file: .../node_modules/a/package.json (relative path: .)", - " using exports field: ./lib/index.js", - " using description file: .../node_modules/a/package.json (relative path: ./lib/index.js)", - " no extension", - " existing file: .../node_modules/a/lib/index.js", - " reporting result .../node_modules/a/lib/index.js", - ]); + [ + "resolve '#a/dist/index.js' in '...'", + " using description file: .../package.json (relative path: .)", + " resolve as internal import", + " using imports field: a/dist/index.js", + " Parsed request is a module", + " using description file: .../package.json (relative path: .)", + " resolve as module", + " looking for modules in .../node_modules", + " existing directory .../node_modules/a", + " using description file: .../node_modules/a/package.json (relative path: .)", + " using exports field: ./lib/index.js", + " using description file: .../node_modules/a/package.json (relative path: ./lib/index.js)", + " no extension", + " existing file: .../node_modules/a/lib/index.js", + " reporting result .../node_modules/a/lib/index.js", + ], + ); done(); }, ); }); - it("should resolve with wildcard pattern", (done) => { + it("should resolve with wildcard pattern", (t, done) => { const fixture = path.resolve( __dirname, "./fixtures/imports-exports-wildcard/node_modules/m/", @@ -1426,52 +1443,57 @@ describe("importsFieldPlugin", () => { resolver.resolve({}, fixture, "#internal/i.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture, "./src/internal/i.js")); + assert.deepStrictEqual( + result, + path.resolve(fixture, "./src/internal/i.js"), + ); done(); }); }); - it("resolver should respect query parameters #1", (done) => { + it("resolver should respect query parameters #1", (t, done) => { resolver.resolve({}, fixture, "#a/dist/main.js?foo", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/a/lib/main.js?foo"), ); done(); }); }); - it("resolver should respect query parameters #2. Direct matching", (done) => { + it("resolver should respect query parameters #2. Direct matching", (t, done) => { resolver.resolve({}, fixture, "#imports-field?foo", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/is not imported from package/); + assert.ok(err instanceof Error); + assert.match(err.message, /is not imported from package/); done(); }); }); - it("resolver should respect fragment parameters #1", (done) => { + it("resolver should respect fragment parameters #1", (t, done) => { resolver.resolve({}, fixture, "#a/dist/main.js#foo", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/a/lib/main.js#foo"), ); done(); }); }); - it("resolver should respect fragment parameters #2. Direct matching", (done) => { + it("resolver should respect fragment parameters #2. Direct matching", (t, done) => { resolver.resolve({}, fixture, "#imports-field#foo", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/is not imported from package/); + assert.ok(err instanceof Error); + assert.match(err.message, /is not imported from package/); done(); }); }); - it("resolver should respect query and fragment parameters together", (done) => { + it("resolver should respect query and fragment parameters together", (t, done) => { resolver.resolve( {}, fixture, @@ -1480,7 +1502,8 @@ describe("importsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/a/lib/main.js?foo=bar#frag"), ); done(); @@ -1488,208 +1511,216 @@ describe("importsFieldPlugin", () => { ); }); - it("should work and throw an error on invalid imports #1", (done) => { + it("should work and throw an error on invalid imports #1", (t, done) => { // Note: #/ patterns are now allowed per Node.js PR #60864 // #/dep will now try to resolve but fail because there's no mapping resolver.resolve({}, fixture, "#/dep", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/is not imported from package/); + assert.ok(err instanceof Error); + assert.match(err.message, /is not imported from package/); done(); }); }); - it("should work and throw an error on invalid imports #2", (done) => { + it("should work and throw an error on invalid imports #2", (t, done) => { resolver.resolve({}, fixture, "#dep/", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Resolving to directories is not possible with the imports field \(request was #dep\/\)/, ); done(); }); }); - it("should work with invalid imports #1", (done) => { + it("should work with invalid imports #1", (t, done) => { resolver.resolve({}, fixture1, "#dep", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toBe(`${path.resolve(fixture1, "./a.js")}?foo=../`); + assert.strictEqual(result, `${path.resolve(fixture1, "./a.js")}?foo=../`); done(); }); }); - it("should work with invalid imports #2", (done) => { + it("should work with invalid imports #2", (t, done) => { resolver.resolve({}, fixture1, "#dep/foo/a.js", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toBe(`${path.resolve(fixture1, "./a.js")}?foo=../#../`); + assert.strictEqual( + result, + `${path.resolve(fixture1, "./a.js")}?foo=../#../`, + ); done(); }); }); - it("should work with invalid imports #3", (done) => { + it("should work with invalid imports #3", (t, done) => { resolver.resolve({}, fixture1, "#dep/bar", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Can't resolve '#dep\/bar' in/); + assert.ok(err instanceof Error); + assert.match(err.message, /Can't resolve '#dep\/bar' in/); done(); }); }); - it("should work with invalid imports #4", (done) => { + it("should work with invalid imports #4", (t, done) => { resolver.resolve({}, fixture1, "#dep/baz", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Can't resolve '#dep\/baz' in/); + assert.ok(err instanceof Error); + assert.match(err.message, /Can't resolve '#dep\/baz' in/); done(); }); }); - it("should work with invalid imports #5", (done) => { + it("should work with invalid imports #5", (t, done) => { resolver.resolve({}, fixture1, "#dep/baz-multi", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Can't resolve '#dep\/baz-multi' in/); + assert.ok(err instanceof Error); + assert.match(err.message, /Can't resolve '#dep\/baz-multi' in/); done(); }); }); - it("should work with invalid imports #6", (done) => { + it("should work with invalid imports #6", (t, done) => { resolver.resolve({}, fixture1, "#dep/baz-multi", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Can't resolve '#dep\/baz-multi' in/); + assert.ok(err instanceof Error); + assert.match(err.message, /Can't resolve '#dep\/baz-multi' in/); done(); }); }); - it("should work with invalid imports #7", (done) => { + it("should work with invalid imports #7", (t, done) => { resolver.resolve({}, fixture1, "#dep/pattern/a.js", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Can't resolve '#dep\/pattern\/a.js' in/); + assert.ok(err instanceof Error); + assert.match(err.message, /Can't resolve '#dep\/pattern\/a.js' in/); done(); }); }); - it("should work with invalid imports #8", (done) => { + it("should work with invalid imports #8", (t, done) => { resolver.resolve({}, fixture1, "#dep/array", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture1, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture1, "./a.js")); done(); }); }); - it("should work with invalid imports #9", (done) => { + it("should work with invalid imports #9", (t, done) => { resolver.resolve({}, fixture1, "#dep/array2", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Can't resolve '#dep\/array2' in/); + assert.ok(err instanceof Error); + assert.match(err.message, /Can't resolve '#dep\/array2' in/); done(); }); }); - it("should work with invalid imports #10", (done) => { + it("should work with invalid imports #10", (t, done) => { resolver.resolve({}, fixture1, "#dep/array3", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture1, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture1, "./a.js")); done(); }); }); - it("should work with invalid imports #11", (done) => { + it("should work with invalid imports #11", (t, done) => { resolver.resolve({}, fixture1, "#dep/empty", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Can't resolve '#dep\/empty' in/); + assert.ok(err instanceof Error); + assert.match(err.message, /Can't resolve '#dep\/empty' in/); done(); }); }); - it("should work with invalid imports #12", (done) => { + it("should work with invalid imports #12", (t, done) => { resolver.resolve({}, fixture1, "#dep/with-bad", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture1, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture1, "./a.js")); done(); }); }); - it("should work with invalid imports #13", (done) => { + it("should work with invalid imports #13", (t, done) => { resolver.resolve({}, fixture1, "#dep/with-bad2", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture1, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture1, "./a.js")); done(); }); }); - it("should work with invalid imports #14", (done) => { + it("should work with invalid imports #14", (t, done) => { resolver.resolve({}, fixture1, "#timezones/pdt.mjs", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch(/Expecting folder to folder mapping/); + assert.ok(err instanceof Error); + assert.match(err.message, /Expecting folder to folder mapping/); done(); }); }); - it("should work with invalid imports #15", (done) => { + it("should work with invalid imports #15", (t, done) => { resolver.resolve({}, fixture1, "#dep/multi1", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "imports" target "\.\.\/\.\.\/test\/foo" defined for "#dep\/multi1"/, ); done(); }); }); - it("should work with invalid imports #16", (done) => { + it("should work with invalid imports #16", (t, done) => { resolver.resolve({}, fixture1, "#dep/multi2", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "imports" target "\.\.\/\.\.\/test" defined for "#dep\/multi2"/, ); done(); }); }); - it("should work with invalid imports #17", (done) => { + it("should work with invalid imports #17", (t, done) => { resolver.resolve({}, fixture1, "#dep/multi1", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "imports" target "\.\.\/\.\.\/test\/foo" defined for "#dep\/multi1"/, ); done(); }); }); - it("should work with invalid imports #18", (done) => { + it("should work with invalid imports #18", (t, done) => { resolver.resolve({}, fixture1, "#dep/multi2", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - expect(err.message).toMatch( + assert.ok(err instanceof Error); + assert.match( + err.message, /Invalid "imports" target "\.\.\/\.\.\/test" defined for "#dep\/multi2"/, ); done(); }); }); - it("should work and resolve with array imports", (done) => { + it("should work and resolve with array imports", (t, done) => { resolver.resolve({}, fixture1, "#dep/multi", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(fixture1, "./a.js")); + assert.deepStrictEqual(result, path.resolve(fixture1, "./a.js")); done(); }); }); - it("should work and resolve an imports-field key to a real file", (done) => { + it("should work and resolve an imports-field key to a real file", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], conditionNames: ["node"], @@ -1706,7 +1737,8 @@ describe("importsFieldPlugin", () => { {}, (err, result) => { if (err) return done(err); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.join( path.join(__dirname, "fixtures"), "imports-field-error-trigger/resolved.js", @@ -1717,7 +1749,7 @@ describe("importsFieldPlugin", () => { ); }); - it("should throw errors for # requests without a description file in scope", (done) => { + it("should throw errors for # requests without a description file in scope", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], conditionNames: ["node"], @@ -1725,7 +1757,7 @@ describe("importsFieldPlugin", () => { fileSystem: nodeFileSystem, }); resolver.resolve({}, "/tmp", "#not-in-scope", {}, (err) => { - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); @@ -1741,23 +1773,23 @@ describe("importsFieldPlugin", () => { "imports-field-chained", ); - it("should fail to resolve #a when it maps to #b (another import specifier)", (done) => { + it("should fail to resolve #a when it maps to #b (another import specifier)", (t, done) => { resolver.resolve({}, chainedFixture, "#a", {}, (err, result) => { if (!err) { return done( new Error(`expected error for chained imports, got ${result}`), ); } - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should still resolve #b to ./the.js directly", (done) => { + it("should still resolve #b to ./the.js directly", (t, done) => { resolver.resolve({}, chainedFixture, "#b", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual(path.resolve(chainedFixture, "the.js")); + assert.deepStrictEqual(result, path.resolve(chainedFixture, "the.js")); done(); }); }); @@ -1773,7 +1805,7 @@ describe("importsFieldPlugin", () => { "imports-slash-pattern", ); - it("should resolve #/utils.js using #/* pattern", (done) => { + it("should resolve #/utils.js using #/* pattern", (t, done) => { resolver.resolve( {}, slashPatternFixture, @@ -1782,7 +1814,8 @@ describe("importsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(slashPatternFixture, "src/utils.js"), ); done(); @@ -1790,7 +1823,7 @@ describe("importsFieldPlugin", () => { ); }); - it("should resolve #/nested/deep.js using #/* pattern", (done) => { + it("should resolve #/nested/deep.js using #/* pattern", (t, done) => { resolver.resolve( {}, slashPatternFixture, @@ -1799,7 +1832,8 @@ describe("importsFieldPlugin", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(slashPatternFixture, "src/nested/deep.js"), ); done(); diff --git a/test/incorrect-description-file.test.js b/test/incorrect-description-file.test.js index 86b3471d..bb73417e 100644 --- a/test/incorrect-description-file.test.js +++ b/test/incorrect-description-file.test.js @@ -2,10 +2,10 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); +const { describe, it } = require("./_runner"); const fixtures = path.join(__dirname, "fixtures", "incorrect-package"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); diff --git a/test/log-info.test.js b/test/log-info.test.js index 5952c37f..acd189b1 100644 --- a/test/log-info.test.js +++ b/test/log-info.test.js @@ -2,11 +2,11 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); const LogInfoPlugin = require("../lib/LogInfoPlugin"); +const { describe, it } = require("./_runner"); const fixtures = path.join(__dirname, "fixtures"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); diff --git a/test/main-fields.test.js b/test/main-fields.test.js index e748f0c2..d5c2bac4 100644 --- a/test/main-fields.test.js +++ b/test/main-fields.test.js @@ -2,9 +2,8 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); - const { CachedInputFileSystem, ResolverFactory } = require("../"); +const { describe, it } = require("./_runner"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); diff --git a/test/missing.test.js b/test/missing.test.js index bcbb2296..d7153a77 100644 --- a/test/missing.test.js +++ b/test/missing.test.js @@ -1,10 +1,10 @@ "use strict"; const assert = require("assert"); -const { describe, it } = require("node:test"); const path = require("path"); const resolve = require("../"); +const { describe, it } = require("./_runner"); describe("missing", () => { /** diff --git a/test/path-browser.test.js b/test/path-browser.test.js index 4172c248..76a25130 100644 --- a/test/path-browser.test.js +++ b/test/path-browser.test.js @@ -1,7 +1,10 @@ "use strict"; +const assert = require("assert"); + const nodePath = require("path"); const pathBrowser = require("../lib/util/path-browser"); +const { describe, it } = require("./_runner"); // The browser shim must behave exactly like Node's `path` for the subset the // resolver relies on. Parity is asserted directly against Node's real module. @@ -88,7 +91,8 @@ describe("path-browser shim", () => { describe("posix.normalize", () => { for (const input of posixCases) { it(`matches Node for ${JSON.stringify(input)}`, () => { - expect(pathBrowser.posix.normalize(input)).toBe( + assert.strictEqual( + pathBrowser.posix.normalize(input), nodePath.posix.normalize(input), ); }); @@ -98,7 +102,8 @@ describe("path-browser shim", () => { describe("win32.normalize", () => { for (const input of win32Cases) { it(`matches Node for ${JSON.stringify(input)}`, () => { - expect(pathBrowser.win32.normalize(input)).toBe( + assert.strictEqual( + pathBrowser.win32.normalize(input), nodePath.win32.normalize(input), ); }); @@ -108,7 +113,7 @@ describe("path-browser shim", () => { describe("win32.normalize device paths and colon guard (pinned to Node 22)", () => { for (const [input, expected] of win32Pinned) { it(`normalizes ${JSON.stringify(input)}`, () => { - expect(pathBrowser.win32.normalize(input)).toBe(expected); + assert.strictEqual(pathBrowser.win32.normalize(input), expected); }); } }); @@ -116,7 +121,8 @@ describe("path-browser shim", () => { describe("posix.dirname", () => { for (const input of posixCases) { it(`matches Node for ${JSON.stringify(input)}`, () => { - expect(pathBrowser.posix.dirname(input)).toBe( + assert.strictEqual( + pathBrowser.posix.dirname(input), nodePath.posix.dirname(input), ); }); @@ -126,7 +132,8 @@ describe("path-browser shim", () => { describe("win32.dirname", () => { for (const input of win32Cases) { it(`matches Node for ${JSON.stringify(input)}`, () => { - expect(pathBrowser.win32.dirname(input)).toBe( + assert.strictEqual( + pathBrowser.win32.dirname(input), nodePath.win32.dirname(input), ); }); @@ -148,7 +155,8 @@ describe("path-browser shim", () => { ]; for (const [input, suffix] of cases) { it(`matches Node for ${JSON.stringify(input)} / ${JSON.stringify(suffix)}`, () => { - expect(pathBrowser.basename(input, suffix)).toBe( + assert.strictEqual( + pathBrowser.basename(input, suffix), nodePath.posix.basename(input, suffix), ); }); @@ -161,7 +169,10 @@ describe("path-browser shim", () => { // shim's own output so any unintended change is caught. describe("win32.normalize reserved device name (documented divergence)", () => { it("does not special-case \\\\.\\COM1:", () => { - expect(pathBrowser.win32.normalize("\\\\.\\COM1:")).toBe("\\\\.\\COM1:"); + assert.strictEqual( + pathBrowser.win32.normalize("\\\\.\\COM1:"), + "\\\\.\\COM1:", + ); }); }); }); diff --git a/test/path.test.js b/test/path.test.js index 655b988f..20ae64f8 100644 --- a/test/path.test.js +++ b/test/path.test.js @@ -1,8 +1,6 @@ "use strict"; const assert = require("assert"); -const { describe, it } = require("node:test"); - const { PathType, createCachedBasename, @@ -17,6 +15,7 @@ const { join, normalize, } = require("../lib/util/path"); +const { describe, it } = require("./_runner"); describe("util/path getType", () => { it("returns Empty for the empty string", () => { diff --git a/test/plugins.test.js b/test/plugins.test.js index ca5e1f09..6815cb65 100644 --- a/test/plugins.test.js +++ b/test/plugins.test.js @@ -2,7 +2,6 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const { @@ -10,6 +9,7 @@ const { CloneBasenamePlugin, ResolverFactory, } = require("../"); +const { describe, it } = require("./_runner"); describe("plugins", () => { it("should resolve with the CloneBasenamePlugin", (t, done) => { diff --git a/test/pnp.test.js b/test/pnp.test.js index 9723c961..fd1191db 100644 --- a/test/pnp.test.js +++ b/test/pnp.test.js @@ -2,10 +2,10 @@ const assert = require("assert"); const fs = require("fs"); -const { after, before, beforeEach, describe, it } = require("node:test"); const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); +const { after, before, beforeEach, describe, it } = require("./_runner"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); const fixture = path.resolve(__dirname, "fixtures", "pnp"); diff --git a/test/pr-53.test.js b/test/pr-53.test.js index c3b17890..03a693ed 100644 --- a/test/pr-53.test.js +++ b/test/pr-53.test.js @@ -1,9 +1,8 @@ "use strict"; const assert = require("assert"); -const { describe, it } = require("node:test"); - const { CachedInputFileSystem } = require("../"); +const { describe, it } = require("./_runner"); describe("pr-53", () => { it("should allow to readJsonSync in CachedInputFileSystem", () => { diff --git a/test/recursion.test.js b/test/recursion.test.js index 188b8e90..9144797a 100644 --- a/test/recursion.test.js +++ b/test/recursion.test.js @@ -2,10 +2,10 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); +const { describe, it } = require("./_runner"); const fixtures = path.join(__dirname, "fixtures"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); diff --git a/test/resolve-context-stack.test.js b/test/resolve-context-stack.test.js index b8953e5c..fadd4308 100644 --- a/test/resolve-context-stack.test.js +++ b/test/resolve-context-stack.test.js @@ -2,10 +2,10 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); +const { describe, it } = require("./_runner"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); diff --git a/test/resolve-logging.test.js b/test/resolve-logging.test.js index e9438cca..f89010c3 100644 --- a/test/resolve-logging.test.js +++ b/test/resolve-logging.test.js @@ -2,11 +2,11 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); const resolve = require("../"); +const { describe, it } = require("./_runner"); const fixtures = path.join(__dirname, "fixtures"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); diff --git a/test/resolve.test.js b/test/resolve.test.js index 2f03c0d7..c0d95b1f 100644 --- a/test/resolve.test.js +++ b/test/resolve.test.js @@ -1,11 +1,11 @@ "use strict"; const assert = require("assert"); -const { describe, it } = require("node:test"); const path = require("path"); const url = require("url"); const resolve = require("../"); +const { describe, it } = require("./_runner"); const fixtures = path.join(__dirname, "fixtures"); diff --git a/test/resolver-cache.test.js b/test/resolver-cache.test.js index 8bbcea0a..c91251f7 100644 --- a/test/resolver-cache.test.js +++ b/test/resolver-cache.test.js @@ -2,11 +2,11 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); const { dirname, join } = require("../lib/util/path"); +const { describe, it } = require("./_runner"); describe("Resolver join/dirname cache", () => { describe("when unsafeCache is enabled", () => { diff --git a/test/restrictions.test.js b/test/restrictions.test.js index ac65d043..2214bbf6 100644 --- a/test/restrictions.test.js +++ b/test/restrictions.test.js @@ -1,15 +1,18 @@ "use strict"; +const assert = require("assert"); const fs = require("fs"); + const path = require("path"); const CachedInputFileSystem = require("../lib/CachedInputFileSystem"); const ResolverFactory = require("../lib/ResolverFactory"); +const { after, describe, it } = require("./_runner"); const fixture = path.resolve(__dirname, "fixtures", "restrictions"); const nodeFileSystem = new CachedInputFileSystem(fs, 4000); describe("restrictions", () => { - it("should respect RegExp restriction", (done) => { + it("should respect RegExp restriction", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], fileSystem: nodeFileSystem, @@ -18,12 +21,12 @@ describe("restrictions", () => { resolver.resolve({}, fixture, "pck1", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should try to find alternative #1", (done) => { + it("should try to find alternative #1", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js", ".css"], fileSystem: nodeFileSystem, @@ -34,14 +37,15 @@ describe("restrictions", () => { resolver.resolve({}, fixture, "pck1", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/pck1/index.css"), ); done(); }); }); - it("should respect string restriction", (done) => { + it("should respect string restriction", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], fileSystem: nodeFileSystem, @@ -50,12 +54,12 @@ describe("restrictions", () => { resolver.resolve({}, fixture, "pck2", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should try to find alternative #2", (done) => { + it("should try to find alternative #2", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], fileSystem: nodeFileSystem, @@ -66,14 +70,15 @@ describe("restrictions", () => { resolver.resolve({}, fixture, "pck2", {}, (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/pck2/index.css"), ); done(); }); }); - it("should try to find alternative #3", (done) => { + it("should try to find alternative #3", (t, done) => { const resolver = ResolverFactory.createResolver({ extensions: [".js"], fileSystem: nodeFileSystem, @@ -91,148 +96,70 @@ describe("restrictions", () => { (err, result) => { if (err) return done(err); if (!result) return done(new Error("No result")); - expect(result).toEqual( + assert.deepStrictEqual( + result, path.resolve(fixture, "node_modules/pck2/index.css"), ); - expect( + assert.deepStrictEqual( log.map((line) => line .replace(path.resolve(__dirname, ".."), "...") .replace(path.resolve(__dirname, ".."), "...") .replace(/\\/g, "/"), ), - ).toEqual([ - "resolve 'pck2' in '.../test/fixtures/restrictions'", - " Parsed request is a module", - " using description file: .../package.json (relative path: ./test/fixtures/restrictions)", - " resolve as module", - " looking for modules in .../test/fixtures/restrictions/node_modules", - " single file module", - " using description file: .../package.json (relative path: ./test/fixtures/restrictions/node_modules/pck2)", - " no extension", - " .../test/fixtures/restrictions/node_modules/pck2 is not a file", - " .js", - " .../test/fixtures/restrictions/node_modules/pck2.js doesn't exist", - " existing directory .../test/fixtures/restrictions/node_modules/pck2", - " using description file: .../test/fixtures/restrictions/node_modules/pck2/package.json (relative path: .)", - " using description file: .../package.json (relative path: ./test/fixtures/restrictions/node_modules/pck2)", - " no extension", - " .../test/fixtures/restrictions/node_modules/pck2 is not a file", - " .js", - " .../test/fixtures/restrictions/node_modules/pck2.js doesn't exist", - " as directory", - " existing directory .../test/fixtures/restrictions/node_modules/pck2", - " using description file: .../test/fixtures/restrictions/node_modules/pck2/package.json (relative path: .)", - " use ../../../c.js from main in package.json", - " using description file: .../package.json (relative path: ./test/fixtures/c.js)", - " no extension", - " existing file: .../test/fixtures/c.js", - " .../test/fixtures/c.js is not inside of the restriction .../test/fixtures/restrictions", - " .js", - " .../test/fixtures/c.js.js doesn't exist", - " as directory", - " .../test/fixtures/c.js is not a directory", - " use ./module.js from module in package.json", - " using description file: .../test/fixtures/restrictions/node_modules/pck2/package.json (relative path: ./module.js)", - " no extension", - " existing file: .../test/fixtures/restrictions/node_modules/pck2/module.js", - " .../test/fixtures/restrictions/node_modules/pck2/module.js doesn't match the restriction //.(sass|scss|css)$/", - " .js", - " .../test/fixtures/restrictions/node_modules/pck2/module.js.js doesn't exist", - " as directory", - " .../test/fixtures/restrictions/node_modules/pck2/module.js is not a directory", - " use ./index.css from style in package.json", - " using description file: .../test/fixtures/restrictions/node_modules/pck2/package.json (relative path: ./index.css)", - " no extension", - " existing file: .../test/fixtures/restrictions/node_modules/pck2/index.css", - " reporting result .../test/fixtures/restrictions/node_modules/pck2/index.css", - ]); - done(); - }, - ); - }); - - it("should fall back to the next modules entry when an exports target is outside the restriction", (done) => { - const buildModules = path.resolve(fixture, "build/node_modules"); - const resolver = ResolverFactory.createResolver({ - fileSystem: nodeFileSystem, - modules: ["node_modules", buildModules], - restrictions: [buildModules], - }); - - resolver.resolve( - {}, - fixture, - "exports-pck", - {}, - (err, result, resolveRequest) => { - if (err) return done(err); - if (!result) return done(new Error("No result")); - expect(result).toEqual( - path.resolve(buildModules, "exports-pck/lib/index.js"), + [ + "resolve 'pck2' in '.../test/fixtures/restrictions'", + " Parsed request is a module", + " using description file: .../package.json (relative path: ./test/fixtures/restrictions)", + " resolve as module", + " looking for modules in .../test/fixtures/restrictions/node_modules", + " single file module", + " using description file: .../package.json (relative path: ./test/fixtures/restrictions/node_modules/pck2)", + " no extension", + " .../test/fixtures/restrictions/node_modules/pck2 is not a file", + " .js", + " .../test/fixtures/restrictions/node_modules/pck2.js doesn't exist", + " existing directory .../test/fixtures/restrictions/node_modules/pck2", + " using description file: .../test/fixtures/restrictions/node_modules/pck2/package.json (relative path: .)", + " using description file: .../package.json (relative path: ./test/fixtures/restrictions/node_modules/pck2)", + " no extension", + " .../test/fixtures/restrictions/node_modules/pck2 is not a file", + " .js", + " .../test/fixtures/restrictions/node_modules/pck2.js doesn't exist", + " as directory", + " existing directory .../test/fixtures/restrictions/node_modules/pck2", + " using description file: .../test/fixtures/restrictions/node_modules/pck2/package.json (relative path: .)", + " use ../../../c.js from main in package.json", + " using description file: .../package.json (relative path: ./test/fixtures/c.js)", + " no extension", + " existing file: .../test/fixtures/c.js", + " .../test/fixtures/c.js is not inside of the restriction .../test/fixtures/restrictions", + " .js", + " .../test/fixtures/c.js.js doesn't exist", + " as directory", + " .../test/fixtures/c.js is not a directory", + " use ./module.js from module in package.json", + " using description file: .../test/fixtures/restrictions/node_modules/pck2/package.json (relative path: ./module.js)", + " no extension", + " existing file: .../test/fixtures/restrictions/node_modules/pck2/module.js", + " .../test/fixtures/restrictions/node_modules/pck2/module.js doesn't match the restriction //.(sass|scss|css)$/", + " .js", + " .../test/fixtures/restrictions/node_modules/pck2/module.js.js doesn't exist", + " as directory", + " .../test/fixtures/restrictions/node_modules/pck2/module.js is not a directory", + " use ./index.css from style in package.json", + " using description file: .../test/fixtures/restrictions/node_modules/pck2/package.json (relative path: ./index.css)", + " no extension", + " existing file: .../test/fixtures/restrictions/node_modules/pck2/index.css", + " reporting result .../test/fixtures/restrictions/node_modules/pck2/index.css", + ], ); - // the internal carrier must not leak onto the result - expect(resolveRequest).not.toHaveProperty("__restrictionsMarker"); done(); }, ); }); - it("should fall back when an exports target fails a RegExp restriction", (done) => { - const buildModules = path.resolve(fixture, "build/node_modules"); - const resolver = ResolverFactory.createResolver({ - fileSystem: nodeFileSystem, - modules: ["node_modules", buildModules], - restrictions: [/[\\/]build[\\/]node_modules[\\/]/], - }); - - resolver.resolve({}, fixture, "exports-pck", {}, (err, result) => { - if (err) return done(err); - if (!result) return done(new Error("No result")); - expect(result).toEqual( - path.resolve(buildModules, "exports-pck/lib/index.js"), - ); - done(); - }); - }); - - it("should not leak the internal marker when restrictions are not configured", (done) => { - const resolver = ResolverFactory.createResolver({ - fileSystem: nodeFileSystem, - modules: ["node_modules"], - }); - - resolver.resolve( - {}, - fixture, - "exports-pck", - {}, - (err, result, resolveRequest) => { - if (err) return done(err); - expect(result).toEqual( - path.resolve(fixture, "node_modules/exports-pck/lib/index.js"), - ); - expect(resolveRequest).not.toHaveProperty("__restrictionsMarker"); - done(); - }, - ); - }); - - it("should still throw when an exports target has no in-restriction fallback", (done) => { - const resolver = ResolverFactory.createResolver({ - fileSystem: nodeFileSystem, - modules: ["node_modules"], - restrictions: [path.resolve(fixture, "build/node_modules")], - }); - - resolver.resolve({}, fixture, "exports-pck", {}, (err, result) => { - if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); - done(); - }); - }); - - it("should throw an error when the path is outside a string restriction", (done) => { + it("should throw an error when the path is outside a string restriction", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -245,16 +172,17 @@ describe("restrictions", () => { "pck1", { log: (m) => log.push(m) }, (err) => { - expect(err).toBeInstanceOf(Error); - expect( + assert.ok(err instanceof Error); + assert.strictEqual( log.some((l) => l.includes("is not inside of the restriction")), - ).toBe(true); + true, + ); done(); }, ); }); - it("should throw an error when the path does not match a regex restriction", (done) => { + it("should throw an error when the path does not match a regex restriction", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -267,10 +195,11 @@ describe("restrictions", () => { "pck1", { log: (m) => log.push(m) }, (err) => { - expect(err).toBeInstanceOf(Error); - expect( + assert.ok(err instanceof Error); + assert.strictEqual( log.some((l) => l.includes("doesn't match the restriction")), - ).toBe(true); + true, + ); done(); }, ); @@ -301,7 +230,7 @@ describe("restrictions", () => { canSymlink = false; } - afterAll(() => { + after(() => { for (const file of [ path.join(allowed, "link.js"), path.join(allowed, "rel-link.js"), @@ -324,7 +253,7 @@ describe("restrictions", () => { }); if (canSymlink) { - it("should reject an in-root symlink whose real target is outside the restriction", (done) => { + it("should reject an in-root symlink whose real target is outside the restriction", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -333,12 +262,12 @@ describe("restrictions", () => { resolver.resolve({}, allowed, "./link.js", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should reject an in-root relative symlink whose real target is outside the restriction", (done) => { + it("should reject an in-root relative symlink whose real target is outside the restriction", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -347,12 +276,12 @@ describe("restrictions", () => { resolver.resolve({}, allowed, "./rel-link.js", {}, (err, result) => { if (!err) return done(new Error(`expect error, got ${result}`)); - expect(err).toBeInstanceOf(Error); + assert.ok(err instanceof Error); done(); }); }); - it("should still resolve a real in-root file under the restriction", (done) => { + it("should still resolve a real in-root file under the restriction", (t, done) => { const resolver = ResolverFactory.createResolver({ fileSystem: nodeFileSystem, extensions: [".js"], @@ -361,12 +290,11 @@ describe("restrictions", () => { resolver.resolve({}, allowed, "./real.js", {}, (err, result) => { if (err) return done(err); - expect(result).toEqual(path.join(allowed, "real.js")); + assert.deepStrictEqual(result, path.join(allowed, "real.js")); done(); }); }); } else { - // eslint-disable-next-line jest/expect-expect it("cannot test symlinks because we have no permission to create them", () => { // Nothing }); diff --git a/test/roots.test.js b/test/roots.test.js index 7d96224b..cb2f15d0 100644 --- a/test/roots.test.js +++ b/test/roots.test.js @@ -2,11 +2,11 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const CachedInputFileSystem = require("../lib/CachedInputFileSystem"); const ResolverFactory = require("../lib/ResolverFactory"); +const { describe, it } = require("./_runner"); describe("roots", () => { const fixtures = path.resolve(__dirname, "fixtures"); diff --git a/test/scoped-packages.test.js b/test/scoped-packages.test.js index c06cc818..5811cc7f 100644 --- a/test/scoped-packages.test.js +++ b/test/scoped-packages.test.js @@ -2,10 +2,10 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const { CachedInputFileSystem, ResolverFactory } = require("../"); +const { describe, it } = require("./_runner"); const fixture = path.join(__dirname, "fixtures", "scoped"); diff --git a/test/simple.test.js b/test/simple.test.js index cf2156f1..d623c2ce 100644 --- a/test/simple.test.js +++ b/test/simple.test.js @@ -2,11 +2,11 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const resolve = require("../"); const { CachedInputFileSystem, ResolverFactory } = require("../"); +const { describe, it } = require("./_runner"); const fixtures = path.join(__dirname, "fixtures"); diff --git a/test/strip-json-comments.test.js b/test/strip-json-comments.test.js index 844d5f11..8e7857fd 100644 --- a/test/strip-json-comments.test.js +++ b/test/strip-json-comments.test.js @@ -1,12 +1,11 @@ "use strict"; const assert = require("assert"); -const { describe, it } = require("node:test"); +const stripJsonComments = require("../lib/util/strip-json-comments"); +const { describe, it } = require("./_runner"); /* eslint-disable jsdoc/reject-any-type */ -const stripJsonComments = require("../lib/util/strip-json-comments"); - describe("util/strip-json-comments", () => { it("throws when given a non-string", () => { assert.throws(() => stripJsonComments(/** @type {any} */ (42)), TypeError); diff --git a/test/symlink.test.js b/test/symlink.test.js index a3759654..3a4c6fb2 100644 --- a/test/symlink.test.js +++ b/test/symlink.test.js @@ -2,11 +2,11 @@ const assert = require("assert"); const fs = require("fs"); -const { afterEach, beforeEach, describe, it } = require("node:test"); const { platform } = require("os"); const path = require("path"); const resolve = require("../"); +const { afterEach, beforeEach, describe, it } = require("./_runner"); const tempPath = path.join(__dirname, "temp"); diff --git a/test/tsconfig-paths.test.js b/test/tsconfig-paths.test.js index 7f83f19d..47726732 100644 --- a/test/tsconfig-paths.test.js +++ b/test/tsconfig-paths.test.js @@ -2,12 +2,12 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const { ResolverFactory } = require("../"); const CachedInputFileSystem = require("../lib/CachedInputFileSystem"); +const { describe, it } = require("./_runner"); const fileSystem = new CachedInputFileSystem(fs, 4000); diff --git a/test/uint8array-fs.test.js b/test/uint8array-fs.test.js index d0de5c68..c7058c63 100644 --- a/test/uint8array-fs.test.js +++ b/test/uint8array-fs.test.js @@ -1,6 +1,8 @@ "use strict"; +const assert = require("assert"); const ResolverFactory = require("../lib/ResolverFactory"); +const { describe, it } = require("./_runner"); // Regression test: a file system that returns Uint8Array (as a browser/Deno FS // would) instead of a Node Buffer must still have its package.json description @@ -82,13 +84,15 @@ describe("Uint8Array file system", () => { }); it("resolves a package main field read from a Uint8Array package.json", () => { - expect(resolver.resolveSync({}, "/app", "pkg")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/app", "pkg"), "/app/node_modules/pkg/lib/main.js", ); }); it("resolves an exports subpath read from a Uint8Array package.json", () => { - expect(resolver.resolveSync({}, "/app", "pkg/feature")).toBe( + assert.strictEqual( + resolver.resolveSync({}, "/app", "pkg/feature"), "/app/node_modules/pkg/lib/feature.js", ); }); diff --git a/test/unsafe-cache.test.js b/test/unsafe-cache.test.js index 27185bb0..295d9c39 100644 --- a/test/unsafe-cache.test.js +++ b/test/unsafe-cache.test.js @@ -1,10 +1,10 @@ "use strict"; const assert = require("assert"); -const { beforeEach, describe, it } = require("node:test"); const path = require("path"); const resolve = require("../"); +const { beforeEach, describe, it } = require("./_runner"); describe("unsafe-cache", () => { let cache; diff --git a/test/util-fs.test.js b/test/util-fs.test.js index f4a2ef76..d886a03f 100644 --- a/test/util-fs.test.js +++ b/test/util-fs.test.js @@ -1,14 +1,14 @@ "use strict"; const assert = require("assert"); -const { describe, it } = require("node:test"); +const { decodeText, readJson } = require("../lib/util/fs"); +const { describe, it } = require("./_runner"); /* eslint-disable jsdoc/reject-any-type */ // `readJson` is the JSONC loader used internally by TsconfigPathsPlugin. // The plugin always passes stripComments:true, so the readJson-fast path // and other branches have no integration callers and are tested directly. -const { decodeText, readJson } = require("../lib/util/fs"); /** * @param {any} fileSystem file system @@ -90,7 +90,7 @@ describe("util/fs readJson", () => { }, }); const result = await readJsonPromise(fileSystem, "/a/package.json"); - expect(result).toEqual({ hello: "world" }); + assert.deepStrictEqual(result, { hello: "world" }); }); it("decodes a Uint8Array result when stripping comments", async () => { @@ -107,7 +107,7 @@ describe("util/fs readJson", () => { const result = await readJsonPromise(fileSystem, "/a/tsconfig.json", { stripComments: true, }); - expect(result).toEqual({ a: 1, b: [1, 2] }); + assert.deepStrictEqual(result, { a: 1, b: [1, 2] }); }); it("rejects when readFile errors", async () => { @@ -156,7 +156,7 @@ describe("util/fs readJson", () => { const result = await readJsonPromise(fileSystem, "/a/tsconfig.json", { stripComments: true, }); - expect(result).toEqual({ a: 1, b: [1, 2] }); + assert.deepStrictEqual(result, { a: 1, b: [1, 2] }); }); it("parses string content without stripComments", async () => { @@ -166,7 +166,7 @@ describe("util/fs readJson", () => { }, }); const result = await readJsonPromise(fileSystem, "/a/package.json"); - expect(result).toEqual({ hello: "world" }); + assert.deepStrictEqual(result, { hello: "world" }); }); it("serves repeated stripComments reads of the same buffer from cache", async () => { @@ -184,32 +184,35 @@ describe("util/fs readJson", () => { const b = await readJsonPromise(fileSystem, "/a/tsconfig.json", { stripComments: true, }); - expect(a).toEqual({ cached: true }); - expect(b).toBe(a); // same cached object instance for the same buffer - expect(reads).toBe(2); + assert.deepStrictEqual(a, { cached: true }); + assert.strictEqual(b, a); // same cached object instance for the same buffer + assert.strictEqual(reads, 2); }); }); describe("util/fs decodeText", () => { it("returns a string unchanged", () => { - expect(decodeText("日本語")).toBe("日本語"); + assert.strictEqual(decodeText("日本語"), "日本語"); }); it("decodes a Node Buffer as utf-8", () => { - expect(decodeText(Buffer.from("日本語", "utf8"))).toBe("日本語"); + assert.strictEqual(decodeText(Buffer.from("日本語", "utf8")), "日本語"); }); it("decodes a Uint8Array as utf-8", () => { - expect(decodeText(new TextEncoder().encode("日本語"))).toBe("日本語"); + assert.strictEqual( + decodeText(new TextEncoder().encode("日本語")), + "日本語", + ); }); it("decodes an empty Uint8Array to an empty string", () => { - expect(decodeText(new Uint8Array(0))).toBe(""); + assert.strictEqual(decodeText(new Uint8Array(0)), ""); }); it("decodes multi-byte characters across the buffer", () => { const text = "中文 — emoji 😀 — π"; - expect(decodeText(new TextEncoder().encode(text))).toBe(text); + assert.strictEqual(decodeText(new TextEncoder().encode(text)), text); }); it("keeps a leading BOM identically for Buffer and Uint8Array", () => { @@ -217,7 +220,7 @@ describe("util/fs decodeText", () => { const fromBuffer = decodeText(Buffer.from(text, "utf8")); const fromU8 = decodeText(new TextEncoder().encode(text)); // Both keep the BOM (matching Buffer.toString), so the two paths agree. - expect(fromBuffer).toBe(text); - expect(fromU8).toBe(fromBuffer); + assert.strictEqual(fromBuffer, text); + assert.strictEqual(fromU8, fromBuffer); }); }); diff --git a/test/yield.test.js b/test/yield.test.js index 2f52c356..e74bdc84 100644 --- a/test/yield.test.js +++ b/test/yield.test.js @@ -2,12 +2,12 @@ const assert = require("assert"); const fs = require("fs"); -const { describe, it } = require("node:test"); const path = require("path"); const { ResolverFactory } = require("../"); const CachedInputFileSystem = require("../lib/CachedInputFileSystem"); +const { describe, it } = require("./_runner"); /** @typedef {import("../lib/Resolver").ResolveRequest} ResolveRequest */ /** @typedef {import("../lib/Resolver").ResolveContext} ResolveContext */ From 51d11b60e6ab8d2b94b20896ba8c23e475ec6fab Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Tue, 9 Jun 2026 15:41:40 +0000 Subject: [PATCH 04/12] chore: restore the `type-report` npm script Accidentally dropped along with the jest scripts in the test runner migration. --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 319cfdb1..83ef5dae 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "fix": "npm run fix:code && npm run fix:special", "fix:code": "npm run lint:code -- --fix", "fix:special": "node node_modules/tooling/inherit-types --write && node node_modules/tooling/generate-types --write", + "type-report": "rimraf coverage && npm run cover:types && npm run cover:report && open-cli coverage/lcov-report/index.html", "pretest": "npm run lint", "test": "npm run test:only", "test:only": "node scripts/test.js", From 64f8a90f2bfc723bd57295799621d3eb576df3ee Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Tue, 9 Jun 2026 15:45:42 +0000 Subject: [PATCH 05/12] chore: mark the legacy-only artifacts with explicit removal TODOs The runtime bridge, the jest config, the TextEncoder polyfill and the `legacy-test` CI job only exist while `engines.node` < 18. Tag each one with a TODO that names the cutoff so the cleanup is obvious next time the support floor moves. --- .github/workflows/test.yml | 4 ++++ jest.config.js | 3 +++ test/_runner.js | 5 +++++ test/polyfill-text-encoding.js | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f96561a2..ac3e4bed 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,6 +24,10 @@ jobs: - run: npm ci - run: npm run lint + # TODO: drop this entire job once `engines.node` is bumped to >= 18. + # Removing the job also makes `jest.config.js`, `test/_runner.js`'s jest + # branch, and `test/polyfill-text-encoding.js` dead code. + # # The `node:test` based suite needs Node.js 18+. The library itself still # supports Node.js >= 10.13, so legacy versions run the same test files # under jest, which the test runner shim (`test/_runner.js`) bridges to diff --git a/jest.config.js b/jest.config.js index 0f552c5e..3144065e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,5 +1,8 @@ "use strict"; +// TODO: drop this file together with `test/_runner.js`'s jest branch once +// `engines.node` is bumped to >= 18 and the `legacy-test` CI job goes away. + // Jest config is only consumed by the legacy CI matrix (Node.js < 18) where // `node:test` is not available. Modern runs use `node --test` via // scripts/test.js and ignore this file. diff --git a/test/_runner.js b/test/_runner.js index a76af76e..cea81b03 100644 --- a/test/_runner.js +++ b/test/_runner.js @@ -6,6 +6,11 @@ "use strict"; +// TODO: drop this file once `engines.node` is bumped to >= 18. The test +// files can then `require("node:test")` directly, the jest bridge below +// is no longer reachable, and the `assert.match`/`doesNotMatch` polyfills +// (needed only on Node.js < 13.6) become dead code. + // Bridge between `node:test` and jest so a single test source runs on: // - Node.js 18+ via the built-in `node --test` runner. // - Legacy Node.js (10-16) via jest, which doesn't ship `node:test`. diff --git a/test/polyfill-text-encoding.js b/test/polyfill-text-encoding.js index 85719a93..60470bed 100644 --- a/test/polyfill-text-encoding.js +++ b/test/polyfill-text-encoding.js @@ -1,5 +1,9 @@ "use strict"; +// TODO: drop this file once `engines.node` is bumped to >= 11. It is a no-op +// on every supported runtime today and only exists for the Node.js 10 leg of +// the legacy-test CI matrix. + // Node 10 lacks the global TextEncoder/TextDecoder that browsers, Deno, Bun and // Node >= 11 provide; expose them from `util` so the suite (and the library's // Uint8Array decode path) runs there too. No-op on every supported runtime. From 7a04bc8f3150e0ff0252e7f6d42531395f25b2ff Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Tue, 9 Jun 2026 17:36:53 +0000 Subject: [PATCH 06/12] chore: regenerate package-lock.json so bun can migrate it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the previous `npm install` removed jest from devDependencies, it re-annotated the entire jest dependency subtree as `optional + peer` (it now only enters transitively via `eslint-plugin-jest`'s peer dependency) and, as part of that restructuring, dropped the `resolved` URL and `integrity` hash from those entries — 961 of 1008 packages in the lockfile. Bun's `bun install` migrates the npm lockfile and, when `resolved` is missing, falls back to constructing the tarball URL from the dependency key. For the npm-aliased `"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"` entry that means a request to `…/wrap-ansi-cjs/-/wrap-ansi-cjs-7.0.0.tgz`, which 404s — so the bun job exited before any test ran. Regenerating with `--include=peer --include=optional` rewrites the lock with `resolved`/`integrity` for every entry (or prunes the dead branch entirely). Modern Node test suite + lint both stay green. --- package-lock.json | 10855 ++++++++++++++++++-------------------------- 1 file changed, 4359 insertions(+), 6496 deletions(-) diff --git a/package-lock.json b/package-lock.json index b35743b3..fe7869a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,11 +53,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -66,7 +68,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, "license": "MIT", "engines": { @@ -74,19 +78,21 @@ } }, "node_modules/@babel/core": { - "version": "7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -104,6 +110,8 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -111,12 +119,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -126,12 +136,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -142,6 +154,8 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -149,7 +163,9 @@ } }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, "license": "MIT", "engines": { @@ -157,25 +173,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -184,18 +204,10 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", "engines": { @@ -203,7 +215,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", "engines": { @@ -211,7 +225,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, "license": "MIT", "engines": { @@ -219,23 +235,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.6" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -244,247 +264,10 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.28.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.28.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/runtime": { - "version": "7.29.2", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", "dev": true, "license": "MIT", "engines": { @@ -492,29 +275,33 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.6", - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", "debug": "^4.3.1" }, "engines": { @@ -522,26 +309,23 @@ } }, "node_modules/@babel/types": { - "version": "7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/@changesets/apply-release-plan": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.1.1.tgz", + "integrity": "sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==", "dev": true, "license": "MIT", "dependencies": { @@ -560,16 +344,10 @@ "semver": "^7.5.3" } }, - "node_modules/@changesets/apply-release-plan/node_modules/detect-indent": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@changesets/apply-release-plan/node_modules/prettier": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -584,6 +362,8 @@ }, "node_modules/@changesets/assemble-release-plan": { "version": "6.0.10", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.10.tgz", + "integrity": "sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==", "dev": true, "license": "MIT", "dependencies": { @@ -597,6 +377,8 @@ }, "node_modules/@changesets/changelog-git": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", + "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -605,6 +387,8 @@ }, "node_modules/@changesets/cli": { "version": "2.31.0", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.31.0.tgz", + "integrity": "sha512-AhI4enNTgHu2IZr6K4WZyf0EPch4XVMn1yOMFmCD9gsfBGqMYaHXls5HyDv6/CL5axVQABz68eG30eCtbr2wFg==", "dev": true, "license": "MIT", "dependencies": { @@ -641,6 +425,8 @@ }, "node_modules/@changesets/config": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.4.tgz", + "integrity": "sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -656,6 +442,8 @@ }, "node_modules/@changesets/errors": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", + "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", "dev": true, "license": "MIT", "dependencies": { @@ -664,6 +452,8 @@ }, "node_modules/@changesets/get-dependents-graph": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.4.tgz", + "integrity": "sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==", "dev": true, "license": "MIT", "dependencies": { @@ -675,6 +465,8 @@ }, "node_modules/@changesets/get-github-info": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.8.0.tgz", + "integrity": "sha512-cRnC+xdF0JIik7coko3iUP9qbnfi1iJQ3sAa6dE+Tx3+ET8bjFEm63PA4WEohgjYcmsOikPHWzPsMWWiZmntOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -684,6 +476,8 @@ }, "node_modules/@changesets/get-release-plan": { "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.16.tgz", + "integrity": "sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==", "dev": true, "license": "MIT", "dependencies": { @@ -697,11 +491,15 @@ }, "node_modules/@changesets/get-version-range-type": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", + "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", "dev": true, "license": "MIT" }, "node_modules/@changesets/git": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", + "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -714,6 +512,8 @@ }, "node_modules/@changesets/logger": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", + "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", "dev": true, "license": "MIT", "dependencies": { @@ -722,6 +522,8 @@ }, "node_modules/@changesets/parse": { "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.3.tgz", + "integrity": "sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==", "dev": true, "license": "MIT", "dependencies": { @@ -731,6 +533,8 @@ }, "node_modules/@changesets/pre": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", + "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", "dev": true, "license": "MIT", "dependencies": { @@ -742,6 +546,8 @@ }, "node_modules/@changesets/read": { "version": "0.6.7", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.7.tgz", + "integrity": "sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==", "dev": true, "license": "MIT", "dependencies": { @@ -756,6 +562,8 @@ }, "node_modules/@changesets/should-skip-package": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", + "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", "dev": true, "license": "MIT", "dependencies": { @@ -765,11 +573,15 @@ }, "node_modules/@changesets/types": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", + "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", "dev": true, "license": "MIT" }, "node_modules/@changesets/write": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.4.0.tgz", + "integrity": "sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==", "dev": true, "license": "MIT", "dependencies": { @@ -781,6 +593,8 @@ }, "node_modules/@changesets/write/node_modules/prettier": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -794,94 +608,23 @@ } }, "node_modules/@codspeed/core": { - "version": "5.4.0", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@codspeed/core/-/core-5.5.0.tgz", + "integrity": "sha512-5FbjNlxSVOfemB85orEecikZiTz0C8aZYUfCkt5HY6QLLd1mqkrHAfekEJw0gkHcgCjNgD6DVp2TXm0V/xtt4w==", "dev": true, "license": "Apache-2.0", "dependencies": { "axios": "^1.4.0", "find-up": "^6.3.0", "form-data": "^4.0.4", - "node-gyp-build": "^4.6.0" - } - }, - "node_modules/@codspeed/core/node_modules/find-up": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@codspeed/core/node_modules/locate-path": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@codspeed/core/node_modules/p-limit": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@codspeed/core/node_modules/p-locate": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@codspeed/core/node_modules/path-exists": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@codspeed/core/node_modules/yocto-queue": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node-gyp-build": "^4.6.0", + "stack-trace": "1.0.0-pre2" } }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-10.0.1.tgz", + "integrity": "sha512-WvkSDNX4Uyyj/ZgbPO6L38iFNMfK1EqsH1FteRiI2qLz6QZMXRFrIt12OqiWIplzZDDaVpBH9FCJOPJll0fjCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -950,18 +693,22 @@ } }, "node_modules/@cspell/cspell-json-reporter": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-10.0.1.tgz", + "integrity": "sha512-/nes1RGILec3WCBcoMOd0byNTBtnJuPaVz/+ZzqYkLtY7x58VMcBG5kyP6hPyN8cIwjRADE/SR43gwdXuqk/FA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "10.0.0" + "@cspell/cspell-types": "10.0.1" }, "engines": { "node": ">=22.18.0" } }, "node_modules/@cspell/cspell-performance-monitor": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-performance-monitor/-/cspell-performance-monitor-10.0.1.tgz", + "integrity": "sha512-9tVcHXwRnbazUv4WSG0h3MqV4+LgmLNgSALAQUflPPW0EMxTf7C4Dmv9cgxJyCEQrdnVKCr58nPPaahhz9LJUg==", "dev": true, "license": "MIT", "engines": { @@ -969,7 +716,9 @@ } }, "node_modules/@cspell/cspell-pipe": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-10.0.1.tgz", + "integrity": "sha512-HPeXMD9AZ3V/qPkvQaPcak+C7cJ2z7JTHN8smd6J8L2aThLRky2cHc2OyeaHPSHB7WA47b4z2n5u5nawZhv5VQ==", "dev": true, "license": "MIT", "engines": { @@ -977,7 +726,9 @@ } }, "node_modules/@cspell/cspell-resolver": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-10.0.1.tgz", + "integrity": "sha512-PIzkZHD1fGUQx1XteK2d1iQ0Mzq/maYcoB4jkvAiiR6WqP3MWYNKFdI9z+R5pOq5KgMfW+5Ig1q0oSR6h8irlA==", "dev": true, "license": "MIT", "dependencies": { @@ -988,7 +739,9 @@ } }, "node_modules/@cspell/cspell-service-bus": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-10.0.1.tgz", + "integrity": "sha512-y6NcIGP2IdXaBL4PVH8vxsr7K27wzz3Ech87UtUtrDSXAiVEOvXgAIknEOUVp59rTlUE8Rn4IRURC6f/hgMyfw==", "dev": true, "license": "MIT", "engines": { @@ -996,7 +749,9 @@ } }, "node_modules/@cspell/cspell-types": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-10.0.1.tgz", + "integrity": "sha512-kLgLShnWADDVreKC63pBrWkcvxgZzFIfO34Jhx/SWfuOIA3cD8AXT+HjyuLfoGJ7mUb58hv2kUziKzEy4INb1w==", "dev": true, "license": "MIT", "engines": { @@ -1004,11 +759,13 @@ } }, "node_modules/@cspell/cspell-worker": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/cspell-worker/-/cspell-worker-10.0.1.tgz", + "integrity": "sha512-L2bJerfuYOls2wEknm8FmynLtj/G7O4UqX9I/HznRggEW6i2yZIxagDetpVDNowpyavNHJ3SJtUFiyMiZc16Sw==", "dev": true, "license": "MIT", "dependencies": { - "cspell-lib": "10.0.0" + "cspell-lib": "10.0.1" }, "engines": { "node": ">=22.18.0" @@ -1016,203 +773,281 @@ }, "node_modules/@cspell/dict-ada": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.1.1.tgz", + "integrity": "sha512-E+0YW9RhZod/9Qy2gxfNZiHJjCYFlCdI69br1eviQQWB8yOTJX0JHXLs79kOYhSW0kINPVUdvddEBe6Lu6CjGQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-al": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-al/-/dict-al-1.1.1.tgz", + "integrity": "sha512-sD8GCaZetgQL4+MaJLXqbzWcRjfKVp8x+px3HuCaaiATAAtvjwUQ5/Iubiqwfd1boIh2Y1/3EgM3TLQ7Q8e0wQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-aws": { "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.17.tgz", + "integrity": "sha512-ORcblTWcdlGjIbWrgKF+8CNEBQiLVKdUOFoTn0KPNkAYnFcdPP0muT4892h7H4Xafh3j72wqB4/loQ6Nti9E/w==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-bash": { - "version": "4.2.2", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.2.3.tgz", + "integrity": "sha512-ljUZoKHbDqw5Sx0qpL2qTUlmkmr+vhZH/sCNrNaBZKTbdgiswErSnIF1jRbGmEitJNxHRHWsuZyVgnTGfVO1Yw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/dict-shell": "1.1.2" + "@cspell/dict-shell": "1.2.0" } }, "node_modules/@cspell/dict-companies": { "version": "3.2.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.11.tgz", + "integrity": "sha512-0cmafbcz2pTHXLd59eLR1gvDvN6aWAOM0+cIL4LLF9GX9yB2iKDNrKsvs4tJRqutoaTdwNFBbV0FYv+6iCtebQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-cpp": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-7.0.2.tgz", + "integrity": "sha512-dfbeERiVNeqmo/npivdR6rDiBCqZi3QtjH2Z0HFcXwpdj6i97dX1xaKyK2GUsO/p4u1TOv63Dmj5Vm48haDpuA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-cryptocurrencies": { "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.5.tgz", + "integrity": "sha512-R68hYYF/rtlE6T/dsObStzN5QZw+0aQBinAXuWCVqwdS7YZo0X33vGMfChkHaiCo3Z2+bkegqHlqxZF4TD3rUA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-csharp": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.8.tgz", + "integrity": "sha512-qmk45pKFHSxckl5mSlbHxmDitSsGMlk/XzFgt7emeTJWLNSTUK//MbYAkBNRtfzB4uD7pAFiKgpKgtJrTMRnrQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-css": { - "version": "4.1.1", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.1.2.tgz", + "integrity": "sha512-+ylGoKdwZ2sVOCOnU2Eq5wDZx+RaVX3HoKyNHGGsFvhSw6IidQ6tH/mAPKBDofViHJoWCPNlklE0lTr6MDG3QA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-dart": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.2.tgz", + "integrity": "sha512-sUiLW56t9gfZcu8iR/5EUg+KYyRD83Cjl3yjDEA2ApVuJvK1HhX+vn4e4k4YfjpUQMag8XO2AaRhARE09+/rqw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-data-science": { - "version": "2.0.13", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.14.tgz", + "integrity": "sha512-jl6Ds4u5u5JT+yY30pWQpAbdCHfy3lCcNkLbpL/AZKoUaLEoXbaYsps9xQtvD7DyaiXxiLZkdH2yHHXtoFtZyg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-django": { "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.6.tgz", + "integrity": "sha512-SdbSFDGy9ulETqNz15oWv2+kpWLlk8DJYd573xhIkeRdcXOjskRuxjSZPKfW7O3NxN/KEf3gm3IevVOiNuFS+w==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-docker": { "version": "1.1.17", + "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.17.tgz", + "integrity": "sha512-OcnVTIpHIYYKhztNTyK8ShAnXTfnqs43hVH6p0py0wlcwRIXe5uj4f12n7zPf2CeBI7JAlPjEsV0Rlf4hbz/xQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-dotnet": { "version": "5.0.13", + "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.13.tgz", + "integrity": "sha512-xPp7jMnFpOri7tzmqmm/dXMolXz1t2bhNqxYkOyMqXhvs08oc7BFs+EsbDY0X7hqiISgeFZGNqn0dOCr+ncPYw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-elixir": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.8.tgz", + "integrity": "sha512-CyfphrbMyl4Ms55Vzuj+mNmd693HjBFr9hvU+B2YbFEZprE5AG+EXLYTMRWrXbpds4AuZcvN3deM2XVB80BN/Q==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-en_us": { - "version": "4.4.33", + "version": "4.4.35", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.35.tgz", + "integrity": "sha512-xWpxBCc/FzzMMo/A+0qwARVaIIhR0Ql8yhhv4rvsvg+GfQF+LG9yzg2GwTM5N2rjvzmM3nKuR9zxFZq2I6fJSg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-en-common-misspellings": { "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.12.tgz", + "integrity": "sha512-14Eu6QGqyksqOd4fYPuRb58lK1Va7FQK9XxFsRKnZU8LhL3N+kj7YKDW+7aIaAN/0WGEqslGP6lGbQzNti8Akw==", "dev": true, "license": "CC BY-SA 4.0" }, "node_modules/@cspell/dict-en-gb-mit": { - "version": "3.1.22", + "version": "3.1.24", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.24.tgz", + "integrity": "sha512-Oowb/Uzkh7OmDRdCcETzMc9imEb4IpLlHJXoYjX8A8DS2X/54gqSjI915JFB8hKtFjBko5OM0BLQ+6cZhFEMmQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-filetypes": { "version": "3.0.18", + "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.18.tgz", + "integrity": "sha512-yU7RKD/x1IWmDLzWeiItMwgV+6bUcU/af23uS0+uGiFUbsY1qWV/D4rxlAAO6Z7no3J2z8aZOkYIOvUrJq0Rcw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-flutter": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-flutter/-/dict-flutter-1.1.1.tgz", + "integrity": "sha512-UlOzRcH2tNbFhZmHJN48Za/2/MEdRHl2BMkCWZBYs+30b91mWvBfzaN4IJQU7dUZtowKayVIF9FzvLZtZokc5A==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-fonts": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.6.tgz", + "integrity": "sha512-aR/0csY01dNb0A1tw/UmN9rKgHruUxsYsvXu6YlSBJFu60s26SKr/k1o4LavpHTQ+lznlYMqAvuxGkE4Flliqw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-fsharp": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.1.1.tgz", + "integrity": "sha512-imhs0u87wEA4/cYjgzS0tAyaJpwG7vwtC8UyMFbwpmtw+/bgss+osNfyqhYRyS/ehVCWL17Ewx2UPkexjKyaBA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-fullstack": { "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.9.tgz", + "integrity": "sha512-diZX+usW5aZ4/b2T0QM/H/Wl9aNMbdODa1Jq0ReBr/jazmNeWjd+PyqeVgzd1joEaHY+SAnjrf/i9CwKd2ZtWQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-gaming-terms": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.1.2.tgz", + "integrity": "sha512-9XnOvaoTBscq0xuD6KTEIkk9hhdfBkkvJAIsvw3JMcnp1214OCGW8+kako5RqQ2vTZR3Tnf3pc57o7VgkM0q1Q==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-git": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.1.0.tgz", + "integrity": "sha512-KEt9zGkxqGy2q1nwH4CbyqTSv5nadpn8BAlDnzlRcnL0Xb3LX9xTgSGShKvzb0bw35lHoYyLWN2ZKAqbC4pgGQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-golang": { "version": "6.0.26", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.26.tgz", + "integrity": "sha512-YKA7Xm5KeOd14v5SQ4ll6afe9VSy3a2DWM7L9uBq4u3lXToRBQ1W5PRa+/Q9udd+DTURyVVnQ+7b9cnOlNxaRg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-google": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.9.tgz", + "integrity": "sha512-biL65POqialY0i4g6crj7pR6JnBkbsPovB2WDYkj3H4TuC/QXv7Pu5pdPxeUJA6TSCHI7T5twsO4VSVyRxD9CA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-haskell": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.6.tgz", + "integrity": "sha512-ib8SA5qgftExpYNjWhpYIgvDsZ/0wvKKxSP+kuSkkak520iPvTJumEpIE+qPcmJQo4NzdKMN8nEfaeci4OcFAQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-html": { "version": "4.0.15", + "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.15.tgz", + "integrity": "sha512-GJYnYKoD9fmo2OI0aySEGZOjThnx3upSUvV7mmqUu8oG+mGgzqm82P/f7OqsuvTaInZZwZbo+PwJQd/yHcyFIw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-html-symbol-entities": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.5.tgz", + "integrity": "sha512-429alTD4cE0FIwpMucvSN35Ld87HCyuM8mF731KU5Rm4Je2SG6hmVx7nkBsLyrmH3sQukTcr1GaiZsiEg8svPA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-java": { "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.12.tgz", + "integrity": "sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-julia": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.1.1.tgz", + "integrity": "sha512-WylJR9TQ2cgwd5BWEOfdO3zvDB+L7kYFm0I9u0s9jKHWQ6yKmfKeMjU9oXxTBxIufhCXm92SKwwVNAC7gjv+yA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-k8s": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.12.tgz", + "integrity": "sha512-2LcllTWgaTfYC7DmkMPOn9GsBWsA4DZdlun4po8s2ysTP7CPEnZc1ZfK6pZ2eI4TsZemlUQQ+NZxMe9/QutQxg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-kotlin": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-kotlin/-/dict-kotlin-1.1.1.tgz", + "integrity": "sha512-J3NzzfgmxRvEeOe3qUXnSJQCd38i/dpF9/t3quuWh6gXM+krsAXP75dY1CzDmS8mrJAlBdVBeAW5eAZTD8g86Q==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-latex": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-5.1.0.tgz", + "integrity": "sha512-qxT4guhysyBt0gzoliXYEBYinkAdEtR2M7goRaUH0a7ltCsoqqAeEV8aXYRIdZGcV77gYSobvu3jJL038tlPAw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-lorem-ipsum": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.5.tgz", + "integrity": "sha512-9a4TJYRcPWPBKkQAJ/whCu4uCAEgv/O2xAaZEI0n4y1/l18Yyx8pBKoIX5QuVXjjmKEkK7hi5SxyIsH7pFEK9Q==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-lua": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.8.tgz", + "integrity": "sha512-N4PkgNDMu9JVsRu7JBS/3E/dvfItRgk9w5ga2dKq+JupP2Y3lojNaAVFhXISh4Y0a6qXDn2clA6nvnavQ/jjLA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-makefile": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.5.tgz", + "integrity": "sha512-4vrVt7bGiK8Rx98tfRbYo42Xo2IstJkAF4tLLDMNQLkQ86msDlYSKG1ZCk8Abg+EdNcFAjNhXIiNO+w4KflGAQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-markdown": { - "version": "2.0.16", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.17.tgz", + "integrity": "sha512-H8bAxih6U8NOnSPL7R8My+tqjaB4tmnJTjERuz4zYqmf+cH+5xshX3UVgKlwWFcyjsYfv/zEDuRdMctQv1q6HQ==", "dev": true, "license": "MIT", "peerDependencies": { - "@cspell/dict-css": "^4.1.1", + "@cspell/dict-css": "^4.1.2", "@cspell/dict-html": "^4.0.15", "@cspell/dict-html-symbol-entities": "^4.0.5", "@cspell/dict-typescript": "^3.2.3" @@ -1220,113 +1055,155 @@ }, "node_modules/@cspell/dict-monkeyc": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.12.tgz", + "integrity": "sha512-MN7Vs11TdP5mbdNFQP5x2Ac8zOBm97ARg6zM5Sb53YQt/eMvXOMvrep7+/+8NJXs0jkp70bBzjqU4APcqBFNAw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-node": { "version": "5.0.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.9.tgz", + "integrity": "sha512-hO+ga+uYZ/WA4OtiMEyKt5rDUlUyu3nXMf8KVEeqq2msYvAPdldKBGH7lGONg6R/rPhv53Rb+0Y1SLdoK1+7wQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-npm": { - "version": "5.2.38", + "version": "5.2.41", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.41.tgz", + "integrity": "sha512-To3xsfRmMBYVXtWVEdUgV35M9a/JZ54dSuoY6m6D3uHKKL3I326Wmy4xifZ3PU8MQaWhyEH7zbIcUEtKwTQMcA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-php": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.1.1.tgz", + "integrity": "sha512-EXelI+4AftmdIGtA8HL8kr4WlUE11OqCSVlnIgZekmTkEGSZdYnkFdiJ5IANSALtlQ1mghKjz+OFqVs6yowgWA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-powershell": { "version": "5.0.15", + "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.15.tgz", + "integrity": "sha512-l4S5PAcvCFcVDMJShrYD0X6Huv9dcsQPlsVsBGbH38wvuN7gS7+GxZFAjTNxDmTY1wrNi1cCatSg6Pu2BW4rgg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-public-licenses": { "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.16.tgz", + "integrity": "sha512-EQRrPvEOmwhwWezV+W7LjXbIBjiy6y/shrET6Qcpnk3XANTzfvWflf9PnJ5kId/oKWvihFy0za0AV1JHd03pSQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-python": { - "version": "4.2.26", + "version": "4.2.27", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.27.tgz", + "integrity": "sha512-Rj6xQgYS4X6ienjgAZF+njA0GRY4oSPouJWv0vfikCTn6EWlfk0V6Dy1HP3Migj1O+IC2NmespgVq+BZNSp8OA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/dict-data-science": "^2.0.13" + "@cspell/dict-data-science": "^2.0.14" } }, "node_modules/@cspell/dict-r": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.1.1.tgz", + "integrity": "sha512-71Ka+yKfG4ZHEMEmDxc6+blFkeTTvgKbKAbwiwQAuKl3zpqs1Y0vUtwW2N4b3LgmSPhV3ODVY0y4m5ofqDuKMw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-ruby": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.1.1.tgz", + "integrity": "sha512-LHrp84oEV6q1ZxPPyj4z+FdKyq1XAKYPtmGptrd+uwHbrF/Ns5+fy6gtSi7pS+uc0zk3JdO9w/tPK+8N1/7WUA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-rust": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.1.2.tgz", + "integrity": "sha512-O1FHrumYcO+HZti3dHfBPUdnDFkI+nbYK3pxYmiM1sr+G0ebOd6qchmswS0Wsc6ZdEVNiPYJY/gZQR6jfW3uOg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-scala": { "version": "5.0.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.9.tgz", + "integrity": "sha512-AjVcVAELgllybr1zk93CJ5wSUNu/Zb5kIubymR/GAYkMyBdYFCZ3Zbwn4Zz8GJlFFAbazABGOu0JPVbeY59vGg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-shell": { - "version": "1.1.2", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.2.0.tgz", + "integrity": "sha512-PVctvT22lJ49niMiakO8xieY7ELCAzjSqhejWR7bAMb5AZ9F4WDEs+XdGMnoVHWeXq7K5rcepLPmEJb+37zzIw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-software-terms": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.2.2.tgz", + "integrity": "sha512-0CaYd6TAsKtEoA7tNswm1iptEblTzEe3UG8beG2cpSTHk7afWIVMtJLgXDv0f/Li67Lf3Z1Jf3JeXR7GsJ2TRw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-sql": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.2.1.tgz", + "integrity": "sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-svelte": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.7.tgz", + "integrity": "sha512-hGZsGqP0WdzKkdpeVLBivRuSNzOTvN036EBmpOwxH+FTY2DuUH7ecW+cSaMwOgmq5JFSdTcbTNFlNC8HN8lhaQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-swift": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.6.tgz", + "integrity": "sha512-PnpNbrIbex2aqU1kMgwEKvCzgbkHtj3dlFLPMqW1vSniop7YxaDTtvTUO4zA++ugYAEL+UK8vYrBwDPTjjvSnA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-terraform": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.1.3.tgz", + "integrity": "sha512-gr6wxCydwSFyyBKhBA2xkENXtVFToheqYYGFvlMZXWjviynXmh+NK/JTvTCk/VHk3+lzbO9EEQKee6VjrAUSbA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-typescript": { "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz", + "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-vue": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.5.tgz", + "integrity": "sha512-Mqutb8jbM+kIcywuPQCCaK5qQHTdaByoEO2J9LKFy3sqAdiBogNkrplqUK0HyyRFgCfbJUgjz3N85iCMcWH0JA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-zig": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-zig/-/dict-zig-1.0.0.tgz", + "integrity": "sha512-XibBIxBlVosU06+M6uHWkFeT0/pW5WajDRYdXG2CgHnq85b0TI/Ks0FuBJykmsgi2CAD3Qtx8UHFEtl/DSFnAQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dynamic-import": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-10.0.1.tgz", + "integrity": "sha512-mP1gdq00aIcH8HxNMqnH11X6BKxLcneDtFgl/ecjIKnaGKwi44m8AndP5Kr4ODaYdl8UUw9O3dJh7KaQXnLHZQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "10.0.0", + "@cspell/url": "10.0.1", "import-meta-resolve": "^4.2.0" }, "engines": { @@ -1334,7 +1211,9 @@ } }, "node_modules/@cspell/filetypes": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-10.0.1.tgz", + "integrity": "sha512-Z5S35giU5IW49fBBq6BksUbE8PC4IYPfaKuwl5Nl9jkf/OkAKiBmCowKX45NzRUQInwK/GSqqIUifrNeI6LdLw==", "dev": true, "license": "MIT", "engines": { @@ -1342,7 +1221,9 @@ } }, "node_modules/@cspell/rpc": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/rpc/-/rpc-10.0.1.tgz", + "integrity": "sha512-axSRKv3zEAmBm66iD/FV/MPmE4/Yf7c3PZiwTW894Yd3iEhtn3KPKeTrqQ2/tDrhB1Z2qTsap/Hue0MK4o5WXg==", "dev": true, "license": "MIT", "engines": { @@ -1350,7 +1231,9 @@ } }, "node_modules/@cspell/strong-weak-map": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-10.0.1.tgz", + "integrity": "sha512-lenN1DVyPi8nJLSMSJJ670ddTjyiruLueuSZO1qLcxBqUhgxDt/mALu9N/1m6WdOVcg6m/5cLiZVg2KOo2UzRw==", "dev": true, "license": "MIT", "engines": { @@ -1358,7 +1241,9 @@ } }, "node_modules/@cspell/url": { - "version": "10.0.0", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cspell/url/-/url-10.0.1.tgz", + "integrity": "sha512-abYYgI29wJhWIfWTYrYuzRYDcHQUQ1N5ylnhxYn1NJnIQMqUWGLbDmt12JABtZ+R6h6UNatQrS7rhP86etvJyQ==", "dev": true, "license": "MIT", "engines": { @@ -1367,6 +1252,8 @@ }, "node_modules/@es-joy/jsdoccomment": { "version": "0.86.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.86.0.tgz", + "integrity": "sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==", "dev": true, "license": "MIT", "dependencies": { @@ -1382,6 +1269,8 @@ }, "node_modules/@es-joy/resolve.exports": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@es-joy/resolve.exports/-/resolve.exports-1.2.0.tgz", + "integrity": "sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==", "dev": true, "license": "MIT", "engines": { @@ -1390,6 +1279,8 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1407,6 +1298,8 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1418,6 +1311,8 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -1426,6 +1321,8 @@ }, "node_modules/@eslint/config-array": { "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1439,6 +1336,8 @@ }, "node_modules/@eslint/config-helpers": { "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1450,6 +1349,8 @@ }, "node_modules/@eslint/core": { "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1461,6 +1362,8 @@ }, "node_modules/@eslint/eslintrc": { "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", + "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", "dev": true, "license": "MIT", "dependencies": { @@ -1481,11 +1384,40 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/js": { - "version": "9.39.4", + "node_modules/@eslint/eslintrc/node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", - "engines": { + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", + "dev": true, + "license": "MIT", + "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { @@ -1493,15 +1425,17 @@ } }, "node_modules/@eslint/markdown": { - "version": "8.0.1", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-8.0.2.tgz", + "integrity": "sha512-W+/0qHp0WbvFEljUvvECNpSWrUHpBWIWwp7F3QqEwQKmaRCmfEWvk6VfUia9pTQ0th6HyBGBsPfg/kG3/aQxLA==", "dev": true, "license": "MIT", "workspaces": [ "examples/*" ], "dependencies": { - "@eslint/core": "^1.1.1", - "@eslint/plugin-kit": "^0.6.1", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.1", "github-slugger": "^2.0.0", "mdast-util-from-markdown": "^2.0.2", "mdast-util-frontmatter": "^2.0.1", @@ -1518,6 +1452,8 @@ }, "node_modules/@eslint/markdown/node_modules/@eslint/core": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1528,11 +1464,13 @@ } }, "node_modules/@eslint/markdown/node_modules/@eslint/plugin-kit": { - "version": "0.6.1", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^1.1.1", + "@eslint/core": "^1.2.1", "levn": "^0.4.1" }, "engines": { @@ -1541,6 +1479,8 @@ }, "node_modules/@eslint/object-schema": { "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1549,6 +1489,8 @@ }, "node_modules/@eslint/plugin-kit": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1560,27 +1502,47 @@ } }, "node_modules/@humanfs/core": { - "version": "0.19.1", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/node": { - "version": "0.16.7", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanfs/core": "^0.19.1", + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1593,6 +1555,8 @@ }, "node_modules/@humanwhocodes/retry": { "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1605,6 +1569,8 @@ }, "node_modules/@inquirer/external-editor": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", "dev": true, "license": "MIT", "dependencies": { @@ -1623,3904 +1589,2012 @@ } } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, - "license": "ISC", - "optional": true, - "peer": true, + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.2.0", + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", + "node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.2", + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.6.tgz", + "integrity": "sha512-uI++Wx6VkBJqVmkb4ZeExwAVpZiA2Do5NrEtXoDk0Pdvce3ytFXJoviT1sLOj16+qDIMnD5nWPfOhVpnDmRJKg==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "p-locate": "^4.1.0" + "@jsonjoy.com/fs-node-builtins": "4.57.6", + "@jsonjoy.com/fs-node-utils": "4.57.6", + "thingies": "^2.5.0" }, "engines": { - "node": ">=8" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.6.tgz", + "integrity": "sha512-pKkw/yC5CzSZKhIIUIsH1przOa+K5jGmZIg1sWaSF24JojyrUFbjcQv7QrcGAudriei6HQ6R0BFj+V8NbQinJw==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "p-try": "^2.0.0" + "@jsonjoy.com/fs-core": "4.57.6", + "@jsonjoy.com/fs-node-builtins": "4.57.6", + "@jsonjoy.com/fs-node-utils": "4.57.6", + "thingies": "^2.5.0" }, "engines": { - "node": ">=6" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.6.tgz", + "integrity": "sha512-Kbn1jdkvDN4F2+BhoB6mMu7NCbhP0bgA5NcI1aJj/Q5UcU+I1JLLW+dEQean33iV4tXv35AzBVKPICnDltBpxw==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "p-limit": "^2.2.0" + "@jsonjoy.com/fs-core": "4.57.6", + "@jsonjoy.com/fs-node-builtins": "4.57.6", + "@jsonjoy.com/fs-node-utils": "4.57.6", + "@jsonjoy.com/fs-print": "4.57.6", + "@jsonjoy.com/fs-snapshot": "4.57.6", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" }, "engines": { - "node": ">=8" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.6.tgz", + "integrity": "sha512-V4DgEFT3Cg5S9fCMOZSCVdTxdJWWLBO0WnAazV7hnCM96u5zXHyW/ubDAfcSVwqjkMJ50W1Y44IXtxRoIwaCVg==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/console": { - "version": "30.3.0", + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.6.tgz", + "integrity": "sha512-+JptNw3iifihxH2rEXrninDzX4FFVW8JD/wPR8GbJPAeL9CQUSblrlumOPB5gZuS7tYRX+PJPLtT7XzKoRhv/Q==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "@jest/types": "30.3.0", - "@types/node": "*", - "chalk": "^4.1.2", - "jest-message-util": "30.3.0", - "jest-util": "30.3.0", - "slash": "^3.0.0" + "@jsonjoy.com/fs-fsa": "4.57.6", + "@jsonjoy.com/fs-node-builtins": "4.57.6", + "@jsonjoy.com/fs-node-utils": "4.57.6" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.6.tgz", + "integrity": "sha512-foyUrfS7WmYEUzqYXSNxmJBcSj04TABrkpFabwO9SCDCpVCfJ+qG+2sk5FjfiflG2n0SDFZDCJ6vYlJAEpxJFg==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "color-convert": "^2.0.1" + "@jsonjoy.com/fs-node-builtins": "4.57.6" }, "engines": { - "node": ">=8" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.6.tgz", + "integrity": "sha512-96eAn4Dudtt67LTeuU47yUD+pg9/G/oKpI10zei9ljk3X3WK4lYKc+n3cpaPCAbKPzoyfxl0mXm8f8Y7BOSFXw==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jsonjoy.com/fs-node-utils": "4.57.6", + "tree-dump": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core": { - "version": "30.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/console": "30.3.0", - "@jest/pattern": "30.0.1", - "@jest/reporters": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-changed-files": "30.3.0", - "jest-config": "30.3.0", - "jest-haste-map": "30.3.0", - "jest-message-util": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.3.0", - "jest-resolve-dependencies": "30.3.0", - "jest-runner": "30.3.0", - "jest-runtime": "30.3.0", - "jest-snapshot": "30.3.0", - "jest-util": "30.3.0", - "jest-validate": "30.3.0", - "jest-watcher": "30.3.0", - "pretty-format": "30.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "type": "github", + "url": "https://github.com/sponsors/streamich" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "tslib": "2" } }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.6.tgz", + "integrity": "sha512-V57CMzbOgTzUWGOWQ8GzHQdpJP6JnrYVNCtTBNxVYEnlVRvo4uEJqHhtAT8vhDFrIuJOXLrTL1Fki4h5oI7xxg==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "color-convert": "^2.0.1" + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.57.6", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" }, "engines": { - "node": ">=8" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/diff-sequences": { - "version": "30.3.0", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/environment": { - "version": "30.3.0", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "@jest/fake-timers": "30.3.0", - "@jest/types": "30.3.0", - "@types/node": "*", - "jest-mock": "30.3.0" + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/expect": { - "version": "30.3.0", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "expect": "30.3.0", - "jest-snapshot": "30.3.0" + "@jsonjoy.com/util": "17.67.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/expect-utils": { - "version": "30.3.0", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "@jest/get-type": "30.1.0" + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/fake-timers": { - "version": "30.3.0", + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "@jest/types": "30.3.0", - "@sinonjs/fake-timers": "^15.0.0", - "@types/node": "*", - "jest-message-util": "30.3.0", - "jest-mock": "30.3.0", - "jest-util": "30.3.0" + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/get-type": { - "version": "30.1.0", + "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "30.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/environment": "30.3.0", - "@jest/expect": "30.3.0", - "@jest/types": "30.3.0", - "jest-mock": "30.3.0" + "node": ">=10.0" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/pattern": { - "version": "30.0.1", + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.0.1" + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters": { - "version": "30.3.0", + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", - "@jridgewell/trace-mapping": "^0.3.25", - "@types/node": "*", - "chalk": "^4.1.2", - "collect-v8-coverage": "^1.0.2", - "exit-x": "^0.2.2", - "glob": "^10.5.0", - "graceful-fs": "^4.2.11", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^5.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "30.3.0", - "jest-util": "30.3.0", - "jest-worker": "30.3.0", - "slash": "^3.0.0", - "string-length": "^4.0.2", - "v8-to-istanbul": "^9.0.1" + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.0" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "2.0.3", + "node_modules/@manypkg/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "balanced-match": "^1.0.0" + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" } }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@manypkg/find-root/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@manypkg/find-root/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "10.5.0", + "node_modules/@manypkg/find-root/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, - "license": "ISC", - "optional": true, - "peer": true, + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "9.0.9", + "node_modules/@manypkg/find-root/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "ISC", - "optional": true, - "peer": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.2" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/@jest/schemas": { - "version": "30.0.5", + "node_modules/@manypkg/find-root/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@sinclair/typebox": "^0.34.0" + "p-try": "^2.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/snapshot-utils": { - "version": "30.3.0", + "node_modules/@manypkg/find-root/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/types": "30.3.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "natural-compare": "^1.4.0" + "p-limit": "^2.2.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=8" } }, - "node_modules/@jest/snapshot-utils/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@manypkg/find-root/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/snapshot-utils/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" } }, - "node_modules/@jest/source-map": { - "version": "30.0.1", + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "callsites": "^3.1.0", - "graceful-fs": "^4.2.11" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } + "license": "MIT" }, - "node_modules/@jest/test-result": { - "version": "30.3.0", + "node_modules/@manypkg/get-packages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/console": "30.3.0", - "@jest/types": "30.3.0", - "@types/istanbul-lib-coverage": "^2.0.6", - "collect-v8-coverage": "^1.0.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/@jest/test-sequencer": { - "version": "30.3.0", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/test-result": "30.3.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", - "slash": "^3.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 8" } }, - "node_modules/@jest/transform": { - "version": "30.3.0", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.27.4", - "@jest/types": "30.3.0", - "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.1", - "chalk": "^4.1.2", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-util": "30.3.0", - "pirates": "^4.0.7", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.1" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 8" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 8" } }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@pkgr/core": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", + "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://opencollective.com/pkgr" } }, - "node_modules/@jest/types": { - "version": "30.3.0", + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.5", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } + "license": "MIT" }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@sindresorhus/base62": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz", + "integrity": "sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@stylistic/eslint-plugin": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.10.0.tgz", + "integrity": "sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/types": "^8.56.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "eslint": "^9.0.0 || ^10.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "@types/ms": "*" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "@types/node": "*" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/katex": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz", + "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "@types/unist": "*" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "dev": true, "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", + "node_modules/@types/node": { + "version": "24.13.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.1.tgz", + "integrity": "sha512-RSpUJGmvsJ1ZeBehQZFhIdpsz+bIpES0nIQXko4Ybq+N+kX6XvOq3Jo+iJ82FWLdblFq85AsMikd3m35jgezYg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "undici-types": "~7.18.0" } }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "dev": true, "license": "MIT" }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.61.0.tgz", + "integrity": "sha512-bFNvl9ZczlVb+wR2Akszf3gHfKVj/8WanXaGJ3UstTA7brNKg0cNdk6X1Psu5V7MZ2oQtzZKOEzIUehaoxbDGw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/type-utils": "8.61.0", + "@typescript-eslint/utils": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, "engines": { - "node": ">=10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "tslib": "2" + "@typescript-eslint/parser": "^8.61.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@jsonjoy.com/buffers": { - "version": "17.67.0", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">= 4" } }, - "node_modules/@jsonjoy.com/codegen": { - "version": "1.0.0", + "node_modules/@typescript-eslint/parser": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.61.0.tgz", + "integrity": "sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", + "debug": "^4.4.3" + }, "engines": { - "node": ">=10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "tslib": "2" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@jsonjoy.com/fs-core": { - "version": "4.57.2", + "node_modules/@typescript-eslint/project-service": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.61.0.tgz", + "integrity": "sha512-DV42F7MLJO6Rax7SK1yg43tcnEfGUrurSpSxKuVX+a3RCTzBlH3fuxprrOJXKCJGAaw82xXocikJ0uQaqwXgGA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.57.2", - "@jsonjoy.com/fs-node-utils": "4.57.2", - "thingies": "^2.5.0" + "@typescript-eslint/tsconfig-utils": "^8.61.0", + "@typescript-eslint/types": "^8.61.0", + "debug": "^4.4.3" }, "engines": { - "node": ">=10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "tslib": "2" + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.57.2", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.61.0.tgz", + "integrity": "sha512-IWdXFHFSb6mlC3HPc7QsLDm5zYEbUla6trDEHf32D3/dnuUyXd87plScSNXSbm0/RxMvObpI17sv/EDTGrGZkA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.2", - "@jsonjoy.com/fs-node-builtins": "4.57.2", - "@jsonjoy.com/fs-node-utils": "4.57.2", - "thingies": "^2.5.0" + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0" }, "engines": { - "node": ">=10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-node": { - "version": "4.57.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-core": "4.57.2", - "@jsonjoy.com/fs-node-builtins": "4.57.2", - "@jsonjoy.com/fs-node-utils": "4.57.2", - "@jsonjoy.com/fs-print": "4.57.2", - "@jsonjoy.com/fs-snapshot": "4.57.2", - "glob-to-regex.js": "^1.0.0", - "thingies": "^2.5.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.57.2", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.57.2", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.61.0.tgz", + "integrity": "sha512-O5Amvdv9ztMpxpf+vmFULGG78IE6Qwdr3bCGvqwG4nwc9H2qXkOYJJnRbRHyMkQTjv1d03olqwwwzHLMqpFePQ==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-fsa": "4.57.2", - "@jsonjoy.com/fs-node-builtins": "4.57.2", - "@jsonjoy.com/fs-node-utils": "4.57.2" - }, + "license": "MIT", "engines": { - "node": ">=10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "tslib": "2" + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.57.2", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.61.0.tgz", + "integrity": "sha512-TuBiQYIkd97yBfInHCTKVYMbX4kvEmpOEuixIuzCU9p8BGT1SfyyO0d0IfDMbPIHcjn/hWnusUX5e8v5Xg+X8A==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.57.2" + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0", + "@typescript-eslint/utils": "8.61.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": ">=10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "tslib": "2" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@jsonjoy.com/fs-print": { - "version": "4.57.2", + "node_modules/@typescript-eslint/types": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.61.0.tgz", + "integrity": "sha512-9QTQpZ5Iin4CdIodfbDQFSeiSJKidgYJYug1P9CC2xWgUTvlmixViqDZNciMjwLBZyJnG4tGmPl97rVAFb1AJg==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.57.2", - "tree-dump": "^1.1.0" - }, + "license": "MIT", "engines": { - "node": ">=10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.57.2", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.61.0.tgz", + "integrity": "sha512-42zatd5qSvvcV1JdDBCLxYRznvP4eIHpPoZXdkPFnAmanA4FuZ5dibSnCBggY8hQnqajPpoGjXFdZ7fIJKQnlA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.57.2", - "@jsonjoy.com/json-pack": "^17.65.0", - "@jsonjoy.com/util": "^17.65.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "@typescript-eslint/project-service": "8.61.0", + "@typescript-eslint/tsconfig-utils": "8.61.0", + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { - "version": "17.67.0", - "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "tslib": "2" + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { - "version": "17.67.0", + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "18 || 20 || >=22" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { - "version": "17.67.0", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/base64": "17.67.0", - "@jsonjoy.com/buffers": "17.67.0", - "@jsonjoy.com/codegen": "17.67.0", - "@jsonjoy.com/json-pointer": "17.67.0", - "@jsonjoy.com/util": "17.67.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" + "balanced-match": "^4.0.2" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "18 || 20 || >=22" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { - "version": "17.67.0", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, - "license": "Apache-2.0", + "license": "BlueOak-1.0.0", "dependencies": { - "@jsonjoy.com/util": "17.67.0" + "brace-expansion": "^5.0.5" }, "engines": { - "node": ">=10.0" + "node": "18 || 20 || >=22" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { - "version": "17.67.0", + "node_modules/@typescript-eslint/utils": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.61.0.tgz", + "integrity": "sha512-3bzFt7ImFMW/jVYwJamDoe/dMOdFLSC6pom6rRjdh4SZJEYupyMzem8e7vKZLclLfpHjlwSAXOUxtKxGXUiLqA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/buffers": "17.67.0", - "@jsonjoy.com/codegen": "17.67.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0" }, "engines": { - "node": ">=10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "tslib": "2" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.21.0", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.61.0.tgz", + "integrity": "sha512-QVLZu3ZPQEE+HICQyAMZ2yLQhxf0meY/wx6Hx14YcTNj13JB3qHlX3lJ02L3fLGHgERRH71kvYDwiXIguT3AjQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/base64": "^1.1.2", - "@jsonjoy.com/buffers": "^1.2.0", - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/json-pointer": "^1.0.2", - "@jsonjoy.com/util": "^1.9.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" + "@typescript-eslint/types": "8.61.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { - "node": ">=10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { - "version": "1.2.1", + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=10.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@jsonjoy.com/json-pointer": { - "version": "1.0.2", + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/util": "^1.9.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, - "node_modules/@jsonjoy.com/util": { - "version": "1.9.0", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } + "license": "MIT" }, - "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { - "version": "1.2.1", + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } + "license": "MIT" }, - "node_modules/@manypkg/find-root": { - "version": "1.1.0", + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.5.5", - "@types/node": "^12.7.1", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0" + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" } }, - "node_modules/@manypkg/find-root/node_modules/@types/node": { - "version": "12.20.55", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true, "license": "MIT" }, - "node_modules/@manypkg/find-root/node_modules/find-up": { - "version": "4.1.0", + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, - "node_modules/@manypkg/find-root/node_modules/fs-extra": { - "version": "8.1.0", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/@manypkg/find-root/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "@xtuc/long": "4.2.2" } }, - "node_modules/@manypkg/find-root/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, - "node_modules/@manypkg/find-root/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, - "node_modules/@manypkg/get-packages": { - "version": "1.1.3", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.5.5", - "@changesets/types": "^4.0.1", - "@manypkg/find-root": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "read-yaml-file": "^1.1.0" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, - "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { - "version": "4.1.0", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } }, - "node_modules/@manypkg/get-packages/node_modules/fs-extra": { - "version": "8.1.0", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">= 8" + "node": ">=0.4.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, + "dependencies": { + "debug": "4" + }, "engines": { - "node": ">=14" + "node": ">= 6.0.0" } }, - "node_modules/@pkgr/core": { - "version": "0.2.9", + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://opencollective.com/pkgr" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinclair/typebox": { - "version": "0.34.49", + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } }, - "node_modules/@sindresorhus/base62": { - "version": "1.0.0", + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "type-detect": "4.0.8" - } + "license": "MIT" }, - "node_modules/@sinonjs/fake-timers": { - "version": "15.3.0", + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@sinonjs/commons": "^3.0.1" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/@stylistic/eslint-plugin": { - "version": "5.10.0", + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/types": "^8.56.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "estraverse": "^5.3.0", - "picomatch": "^4.0.3" + "environment": "^1.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" }, - "peerDependencies": { - "eslint": "^9.0.0 || ^10.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/babel__core": { - "version": "7.20.5", + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/types": "^7.0.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@types/babel__template": { - "version": "7.4.4", + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "engines": { + "node": ">=14" } }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/types": "^7.28.2" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/debug": { - "version": "4.1.13", + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/ms": "*" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/estree": { - "version": "1.0.8", + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", "dev": true, "license": "MIT" }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/hast": { - "version": "3.0.4", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "*" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@types/istanbul-lib-coverage": "*" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@types/istanbul-lib-report": "*" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/katex": { - "version": "0.16.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", - "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "*" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/@types/ms": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.12.0", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true + "engines": { + "node": ">= 0.4" + } }, - "node_modules/@types/unist": { - "version": "3.0.3", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true, "license": "MIT" }, - "node_modules/@types/yargs": { - "version": "17.0.35", + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@types/yargs-parser": "*" + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", + "node_modules/axios": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", + "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.59.3", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.59.3", - "@typescript-eslint/type-utils": "8.59.3", - "@typescript-eslint/utils": "8.59.3", - "@typescript-eslint/visitor-keys": "8.59.3", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.5.0" + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.35", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.35.tgz", + "integrity": "sha512-honAfLBde0HAFLdNyBEfuuENkF6zR+ozxqxa/2zJKHBe1qzLqyTSeRKpdPEHAP03rlDGyQOPnCSxnVpVqQo9Mg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.59.3", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" + "node": ">=6.0.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", + "node_modules/better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", "dev": true, "license": "MIT", + "dependencies": { + "is-windows": "^1.0.0" + }, "engines": { - "node": ">= 4" + "node": ">=4" } }, - "node_modules/@typescript-eslint/parser": { - "version": "8.59.3", + "node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.59.3", - "@typescript-eslint/types": "8.59.3", - "@typescript-eslint/typescript-estree": "8.59.3", - "@typescript-eslint/visitor-keys": "8.59.3", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.59.3", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.59.3", - "@typescript-eslint/types": "^8.59.3", - "debug": "^4.4.3" + "fill-range": "^7.1.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" + "node": ">=8" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.59.3", + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.3", - "@typescript-eslint/visitor-keys": "8.59.3" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "bin": { + "browserslist": "cli.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.59.3", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-5.2.0.tgz", + "integrity": "sha512-02yxLeyxF4dNl6SlY6/5HfRSrSdZ/sCPoxy2kZNP5dZZX8LSAD9aE2gtJIUgWrsQTiMPl3mxESyrobSwvRGisQ==", "dev": true, "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18.20" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.59.3", + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.3", - "@typescript-eslint/typescript-estree": "8.59.3", - "@typescript-eslint/utils": "8.59.3", - "debug": "^4.4.3", - "ts-api-utils": "^2.5.0" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/types": { - "version": "8.59.3", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": ">= 0.4" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.59.3", + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.59.3", - "@typescript-eslint/tsconfig-utils": "8.59.3", - "@typescript-eslint/types": "8.59.3", - "@typescript-eslint/visitor-keys": "8.59.3", - "debug": "^4.4.3", - "minimatch": "^10.2.2", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.5.0" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { - "version": "4.0.4", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { - "node": "18 || 20 || >=22" + "node": ">=6" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.6", + "node_modules/caniuse-lite": { + "version": "1.0.30001797", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001797.tgz", + "integrity": "sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==", "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "10.2.5", + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@typescript-eslint/utils": { - "version": "8.59.3", + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.59.3", - "@typescript-eslint/types": "8.59.3", - "@typescript-eslint/typescript-estree": "8.59.3" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.59.3", + "node_modules/chalk-template": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.2.tgz", + "integrity": "sha512-2bxTP2yUH7AJj/VAXfcA+4IcWGdQ87HwBANLt5XxGTeomo8yG0y95N1um9i5StvhT/Bl0/2cARA5v1PpPXUxUA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.3", - "eslint-visitor-keys": "^5.0.0" + "chalk": "^5.2.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=14.16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/chalk/chalk-template?sponsor=1" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/acorn": { - "version": "8.16.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", - "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/are-docs-informative": { - "version": "0.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.9", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-timsort": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/async-function": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.16.0", - "form-data": "^4.0.5", - "proxy-from-env": "^2.1.0" - } - }, - "node_modules/babel-jest": { - "version": "30.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/transform": "30.3.0", - "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.1", - "babel-preset-jest": "30.3.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "7.0.1", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "workspaces": [ - "test/babel-8" - ], - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "30.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/babel__core": "^7.20.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/babel-preset-jest": { - "version": "30.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "babel-plugin-jest-hoist": "30.3.0", - "babel-preset-current-node-syntax": "^1.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-beta.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/baseline-browser-mapping": { - "version": "2.9.17", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/better-path-resolve": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-windows": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.28.1", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001765", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "5.6.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk-template": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" - } - }, - "node_modules/change-case": { - "version": "5.4.4", - "dev": true, - "license": "MIT" - }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chardet": { - "version": "2.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "4.4.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/clean-regexp": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/clean-regexp/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^8.0.0", - "string-width": "^8.2.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "14.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - } - }, - "node_modules/comment-json": { - "version": "4.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-timsort": "^1.0.3", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/comment-parser": { - "version": "1.4.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/core-js-compat": { - "version": "3.49.0", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.28.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cspell": { - "version": "10.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspell/cspell-json-reporter": "10.0.0", - "@cspell/cspell-performance-monitor": "10.0.0", - "@cspell/cspell-pipe": "10.0.0", - "@cspell/cspell-types": "10.0.0", - "@cspell/cspell-worker": "10.0.0", - "@cspell/dynamic-import": "10.0.0", - "@cspell/url": "10.0.0", - "ansi-regex": "^6.2.2", - "chalk": "^5.6.2", - "chalk-template": "^1.1.2", - "commander": "^14.0.3", - "cspell-config-lib": "10.0.0", - "cspell-dictionary": "10.0.0", - "cspell-gitignore": "10.0.0", - "cspell-glob": "10.0.0", - "cspell-io": "10.0.0", - "cspell-lib": "10.0.0", - "fast-json-stable-stringify": "^2.1.0", - "flatted": "^3.4.2", - "semver": "^7.7.4", - "tinyglobby": "^0.2.15" - }, - "bin": { - "cspell": "bin.mjs", - "cspell-esm": "bin.mjs" - }, - "engines": { - "node": ">=22.18.0" - }, - "funding": { - "url": "https://github.com/streetsidesoftware/cspell?sponsor=1" - } - }, - "node_modules/cspell-config-lib": { - "version": "10.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspell/cspell-types": "10.0.0", - "comment-json": "^4.6.2", - "smol-toml": "^1.6.1", - "yaml": "^2.8.3" - }, - "engines": { - "node": ">=22.18.0" - } - }, - "node_modules/cspell-dictionary": { - "version": "10.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspell/cspell-performance-monitor": "10.0.0", - "@cspell/cspell-pipe": "10.0.0", - "@cspell/cspell-types": "10.0.0", - "cspell-trie-lib": "10.0.0", - "fast-equals": "^6.0.0" - }, - "engines": { - "node": ">=22.18.0" - } - }, - "node_modules/cspell-gitignore": { - "version": "10.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspell/url": "10.0.0", - "cspell-glob": "10.0.0", - "cspell-io": "10.0.0" - }, - "bin": { - "cspell-gitignore": "bin.mjs" - }, - "engines": { - "node": ">=22.18.0" - } - }, - "node_modules/cspell-glob": { - "version": "10.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspell/url": "10.0.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">=22.18.0" - } - }, - "node_modules/cspell-grammar": { - "version": "10.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspell/cspell-pipe": "10.0.0", - "@cspell/cspell-types": "10.0.0" - }, - "bin": { - "cspell-grammar": "bin.mjs" - }, - "engines": { - "node": ">=22.18.0" - } - }, - "node_modules/cspell-io": { - "version": "10.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspell/cspell-service-bus": "10.0.0", - "@cspell/url": "10.0.0" - }, - "engines": { - "node": ">=22.18.0" - } - }, - "node_modules/cspell-lib": { - "version": "10.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspell/cspell-bundled-dicts": "10.0.0", - "@cspell/cspell-performance-monitor": "10.0.0", - "@cspell/cspell-pipe": "10.0.0", - "@cspell/cspell-resolver": "10.0.0", - "@cspell/cspell-types": "10.0.0", - "@cspell/dynamic-import": "10.0.0", - "@cspell/filetypes": "10.0.0", - "@cspell/rpc": "10.0.0", - "@cspell/strong-weak-map": "10.0.0", - "@cspell/url": "10.0.0", - "cspell-config-lib": "10.0.0", - "cspell-dictionary": "10.0.0", - "cspell-glob": "10.0.0", - "cspell-grammar": "10.0.0", - "cspell-io": "10.0.0", - "cspell-trie-lib": "10.0.0", - "env-paths": "^4.0.0", - "gensequence": "^8.0.8", - "import-fresh": "^4.0.0", - "resolve-from": "^5.0.0", - "vscode-languageserver-textdocument": "^1.0.12", - "vscode-uri": "^3.1.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=22.18.0" - } - }, - "node_modules/cspell-lib/node_modules/import-fresh": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=22.15" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cspell-trie-lib": { - "version": "10.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=22.18.0" - }, - "peerDependencies": { - "@cspell/cspell-types": "10.0.0" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dataloader": { - "version": "1.4.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/debug": { - "version": "4.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dedent": { - "version": "1.7.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/detect-indent": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/electron-to-chromium": { - "version": "1.5.277", - "dev": true, - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/enhanced-resolve": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.23.0.tgz", - "integrity": "sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/enquirer": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/env-paths": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-safe-filename": "^0.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/environment": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/error-ex": { - "version": "1.3.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.24.1", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.1", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.1.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.3.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.5", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", - "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", "dev": true, "license": "MIT" }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/escalade": { - "version": "3.2.0", + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.0" } }, - "node_modules/eslint": { - "version": "9.39.4", + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.2", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "9.39.4", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.5", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" } - } - }, - "node_modules/eslint-compat-utils": { - "version": "0.5.1", - "dev": true, + ], "license": "MIT", - "dependencies": { - "semver": "^7.5.4" - }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-config-prettier": { - "version": "10.1.8", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "node": ">=8" } }, - "node_modules/eslint-config-webpack": { - "version": "4.9.6", + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint/js": "^9.39.2", - "@eslint/markdown": "^8.0.1", - "@stylistic/eslint-plugin": "^5.10.0", - "detect-indent": "^7.0.2", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^29.15.2", - "eslint-plugin-jsdoc": "^62.9.0", - "eslint-plugin-n": "^18.0.1", - "eslint-plugin-prettier": "^5.5.5", - "eslint-plugin-react": "^7.37.5", - "eslint-plugin-react-hooks": "^7.1.1", - "eslint-plugin-unicorn": "^64.0.0", - "globals": "^17.6.0", - "jsonc-eslint-parser": "^3.1.0", - "semver": "^7.8.0", - "sort-package-json": "^3.6.0", - "typescript-eslint": "^8.59.3" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">= 20.9.0" - }, - "peerDependencies": { - "eslint": ">= 9.28.0", - "typescript": ">=4.8.4 <7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=4" } }, - "node_modules/eslint-config-webpack/node_modules/globals": { - "version": "17.6.0", + "node_modules/clean-regexp/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, "engines": { "node": ">=18" }, @@ -5528,933 +3602,1055 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ms": "^2.1.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^3.2.7" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=8" } }, - "node_modules/eslint-plugin-es-x": { - "version": "7.8.0", + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "funding": [ - "https://github.com/sponsors/ota-meshi", - "https://opencollective.com/eslint" - ], "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.11.0", - "eslint-compat-utils": "^0.5.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": ">=8" + "node": ">=8" } }, - "node_modules/eslint-plugin-import": { - "version": "2.32.0", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } + "license": "MIT" }, - "node_modules/eslint-plugin-jest": { - "version": "29.15.2", + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^8.0.0" + "delayed-stream": "~1.0.0" }, "engines": { - "node": "^20.12.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^8.0.0", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "jest": "*", - "typescript": ">=4.8.4 <7.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - }, - "typescript": { - "optional": true - } + "node": ">= 0.8" } }, - "node_modules/eslint-plugin-jsdoc": { - "version": "62.9.0", + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@es-joy/jsdoccomment": "~0.86.0", - "@es-joy/resolve.exports": "1.2.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.6", - "debug": "^4.4.3", - "escape-string-regexp": "^4.0.0", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "html-entities": "^2.6.0", - "object-deep-merge": "^2.0.0", - "parse-imports-exports": "^0.2.4", - "semver": "^7.7.4", - "spdx-expression-parse": "^4.0.0", - "to-valid-identifier": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0" + "node": ">=20" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { - "version": "5.0.1", + "node_modules/comment-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-5.0.0.tgz", + "integrity": "sha512-uiqLcOiVDJtBP8WGkZHEP+FZIhTzP1dxvn59EfoYUi9gqupjrBWVQkO2atDrbnKPwLeotFYDsuNb26uBMqB+hw==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "license": "MIT", + "dependencies": { + "array-timsort": "^1.0.3", + "esprima": "^4.0.1" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">= 6" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/espree": { - "version": "11.2.0", + "node_modules/comment-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.6.tgz", + "integrity": "sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, + "license": "MIT", "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">= 12.0.0" } }, - "node_modules/eslint-plugin-n": { - "version": "18.0.1", + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.5.0", - "enhanced-resolve": "^5.17.1", - "eslint-plugin-es-x": "^7.8.0", - "get-tsconfig": "^4.8.1", - "globals": "^15.11.0", - "globrex": "^0.1.2", - "ignore": "^5.3.2", - "semver": "^7.6.3" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "browserslist": "^4.28.1" }, "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": ">=8.57.1", - "ts-declaration-location": "^1.0.6", - "typescript": ">=5.0.0" - }, - "peerDependenciesMeta": { - "ts-declaration-location": { - "optional": true - }, - "typescript": { - "optional": true - } + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/eslint-plugin-n/node_modules/globals": { - "version": "15.15.0", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 8" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.5.5", + "node_modules/cspell": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-10.0.1.tgz", + "integrity": "sha512-Gg6w/flT3fKfl3la62hfTnhtNnDQ+9mU7kUhVqw/axl/Ms4oENw0oJMkWFIoj4f6nL/SDPz7KcPXd2XbkKFNmQ==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.1", - "synckit": "^0.11.12" + "@cspell/cspell-json-reporter": "10.0.1", + "@cspell/cspell-performance-monitor": "10.0.1", + "@cspell/cspell-pipe": "10.0.1", + "@cspell/cspell-types": "10.0.1", + "@cspell/cspell-worker": "10.0.1", + "@cspell/dynamic-import": "10.0.1", + "@cspell/url": "10.0.1", + "ansi-regex": "^6.2.2", + "chalk": "^5.6.2", + "chalk-template": "^1.1.2", + "commander": "^14.0.3", + "cspell-config-lib": "10.0.1", + "cspell-dictionary": "10.0.1", + "cspell-gitignore": "10.0.1", + "cspell-glob": "10.0.1", + "cspell-io": "10.0.1", + "cspell-lib": "10.0.1", + "fast-json-stable-stringify": "^2.1.0", + "flatted": "^3.4.2", + "semver": "^7.8.1", + "tinyglobby": "^0.2.16" + }, + "bin": { + "cspell": "bin.mjs", + "cspell-esm": "bin.mjs" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=22.18.0" }, "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "url": "https://github.com/streetsidesoftware/cspell?sponsor=1" } }, - "node_modules/eslint-plugin-react": { - "version": "7.37.5", + "node_modules/cspell-config-lib": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-10.0.1.tgz", + "integrity": "sha512-hMpo/0j6k7pbiqrLDOLJKD2IGP9XwhjKf2miiM6p84Xeo4nyuFZaxxDCQ68R851HSYFrrdltgpoipMbj1h2Tnw==", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.9", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" + "@cspell/cspell-types": "10.0.1", + "comment-json": "^5.0.0", + "smol-toml": "^1.6.1", + "yaml": "^2.9.0" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + "node": ">=22.18.0" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "7.1.1", + "node_modules/cspell-dictionary": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-10.0.1.tgz", + "integrity": "sha512-3cZ659vgsZWkzGQJR/sNqGDVt/OnvTSieLKI76V++4t1bHJfochb9ZrrwsuMsb1VPGiyqClUP1/O6WrefF/FVg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.24.4", - "@babel/parser": "^7.24.4", - "hermes-parser": "^0.25.1", - "zod": "^3.25.0 || ^4.0.0", - "zod-validation-error": "^3.5.0 || ^4.0.0" + "@cspell/cspell-performance-monitor": "10.0.1", + "@cspell/cspell-pipe": "10.0.1", + "@cspell/cspell-types": "10.0.1", + "cspell-trie-lib": "10.0.1", + "fast-equals": "^6.0.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" + "node": ">=22.18.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", + "node_modules/cspell-gitignore": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-10.0.1.tgz", + "integrity": "sha512-wN23U61Mx6qPJN3CesOmBU9vnbJ0jQm/ylK0iaVui3CcnO7Zzl5qLu5mPHUzGQGm8yso6qjyxqo16Ho7LpZGOQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "@cspell/url": "10.0.1", + "cspell-glob": "10.0.1", + "cspell-io": "10.0.1" }, "bin": { - "resolve": "bin/resolve" + "cspell-gitignore": "bin.mjs" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=22.18.0" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", + "node_modules/cspell-glob": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-10.0.1.tgz", + "integrity": "sha512-7bII9J3aSSpZDwhx7w+zfQXbMxHZQ3be0ilUp5bHrsjz6o07v/NqOHMGcwKdPn1sw2dxDz9sv057xE5pqXnSdw==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "@cspell/url": "10.0.1", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=22.18.0" } }, - "node_modules/eslint-plugin-unicorn": { - "version": "64.0.0", + "node_modules/cspell-grammar": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-10.0.1.tgz", + "integrity": "sha512-xC9AFYmaI9wsO//a7S5tdDGKGJVD5UEEsTg+Up2fi7lPfXIryisYmV6tePNL1SEg0idYss4ja8LUZ3Mib09BjQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "@eslint-community/eslint-utils": "^4.9.1", - "change-case": "^5.4.4", - "ci-info": "^4.4.0", - "clean-regexp": "^1.0.0", - "core-js-compat": "^3.49.0", - "find-up-simple": "^1.0.1", - "globals": "^17.4.0", - "indent-string": "^5.0.0", - "is-builtin-module": "^5.0.0", - "jsesc": "^3.1.0", - "pluralize": "^8.0.0", - "regexp-tree": "^0.1.27", - "regjsparser": "^0.13.0", - "semver": "^7.7.4", - "strip-indent": "^4.1.1" + "@cspell/cspell-pipe": "10.0.1", + "@cspell/cspell-types": "10.0.1" + }, + "bin": { + "cspell-grammar": "bin.mjs" }, "engines": { - "node": "^20.10.0 || >=21.0.0" + "node": ">=22.18.0" + } + }, + "node_modules/cspell-io": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-10.0.1.tgz", + "integrity": "sha512-8C2ka07faxflnaqEBO3pektS21XViE/SEHT7F5ZD1ou7FyMR5u3xawTBJSczClfsxLt/WYeztBYrpmGAjmjksw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-service-bus": "10.0.1", + "@cspell/url": "10.0.1" }, - "funding": { - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + "engines": { + "node": ">=22.18.0" + } + }, + "node_modules/cspell-lib": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-10.0.1.tgz", + "integrity": "sha512-RpsIPiLzc4/YMW8BMRKpyJ81x439qjYWcqgdKeXnMkbKM88J9PexzutfFf/4v97v96KzfNitEzMpbI0uj8OeUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-bundled-dicts": "10.0.1", + "@cspell/cspell-performance-monitor": "10.0.1", + "@cspell/cspell-pipe": "10.0.1", + "@cspell/cspell-resolver": "10.0.1", + "@cspell/cspell-types": "10.0.1", + "@cspell/dynamic-import": "10.0.1", + "@cspell/filetypes": "10.0.1", + "@cspell/rpc": "10.0.1", + "@cspell/strong-weak-map": "10.0.1", + "@cspell/url": "10.0.1", + "cspell-config-lib": "10.0.1", + "cspell-dictionary": "10.0.1", + "cspell-glob": "10.0.1", + "cspell-grammar": "10.0.1", + "cspell-io": "10.0.1", + "cspell-trie-lib": "10.0.1", + "env-paths": "^4.0.0", + "gensequence": "^8.0.8", + "import-fresh": "^4.0.0", + "resolve-from": "^5.0.0", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-uri": "^3.1.0", + "xdg-basedir": "^5.1.0" }, - "peerDependencies": { - "eslint": ">=9.38.0" + "engines": { + "node": ">=22.18.0" } }, - "node_modules/eslint-plugin-unicorn/node_modules/globals": { - "version": "17.4.0", + "node_modules/cspell-trie-lib": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-10.0.1.tgz", + "integrity": "sha512-BFvhalSkRQFjKrZ//FKK7fRGrZFpifnxB5AwCkzsIsBZqicsfafcQ1xP21qpb0QqyV/IomjNgviG+tRJs+0rMw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=22.18.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@cspell/cspell-types": "10.0.1" } }, - "node_modules/eslint-scope": { - "version": "8.4.0", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", + "node_modules/dataloader": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", + "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=10" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/espree": { - "version": "10.4.0", + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "character-entities": "^2.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/esprima": { - "version": "4.0.1", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/esquery": { - "version": "1.7.0", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=4.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/estraverse": { - "version": "5.3.0", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=0.4.0" } }, - "node_modules/esutils": { + "node_modules/dequal": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.x" + "node": ">=8" } }, - "node_modules/execa": { - "version": "5.1.1", + "node_modules/detect-newline": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", + "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit-x": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 0.8.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/expect": { - "version": "30.3.0", + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/expect-utils": "30.3.0", - "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.3.0", - "jest-message-util": "30.3.0", - "jest-mock": "30.3.0", - "jest-util": "30.3.0" + "dequal": "^2.0.0" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/extendable-error": { - "version": "0.1.7", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-equals": { - "version": "6.0.0", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/fast-glob": { - "version": "3.3.3", + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" + "esutils": "^2.0.2" }, "engines": { - "node": ">=8.6.0" + "node": ">=0.10.0" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", + "node_modules/electron-to-chromium": { + "version": "1.5.370", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.370.tgz", + "integrity": "sha512-D5tSHJReAb/Kf3Hu9F/GO4lJuSWzEWHwvQ/kKSUP7pimNgvxkSKj+gUQhHpKKACwrin7rS3byU7IxreF56rl5g==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, - "node_modules/fast-uri": { - "version": "3.1.2", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.20.1", + "node_modules/enhanced-resolve": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.23.0.tgz", + "integrity": "sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/fault": { - "version": "2.0.1", + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", "dependencies": { - "format": "^0.2.0" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=8.6" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", + "node_modules/env-paths": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-4.0.0.tgz", + "integrity": "sha512-pxP8eL2SwwaTRi/KHYwLYXinDs7gL3jxFcBYmEdYfZmZXbaVDvdppd0XBU8qVz03rDfKZMXg1omHCbsJjZrMsw==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, + "license": "MIT", "dependencies": { - "bser": "2.1.1" + "is-safe-filename": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fdir": { - "version": "6.5.0", + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "node": ">=18" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/file-entry-cache": { - "version": "8.0.0", + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^4.0.0" + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" + "node": ">= 0.4" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/find-up": { - "version": "5.0.0", + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/find-up-simple": { - "version": "1.0.1", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/flat-cache": { - "version": "4.0.1", + "node_modules/es-iterator-helpers": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz", + "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">=16" + "node": ">= 0.4" } }, - "node_modules/flatted": { - "version": "3.4.2", + "node_modules/es-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/follow-redirects": { - "version": "1.16.0", + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], "license": "MIT", - "engines": { - "node": ">=4.0" + "dependencies": { + "es-errors": "^1.3.0" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "engines": { + "node": ">= 0.4" } }, - "node_modules/for-each": { - "version": "0.3.5", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.2.7" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child": { - "version": "3.3.1", + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, - "license": "ISC", - "optional": true, - "peer": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" + "hasown": "^2.0.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.4" } }, - "node_modules/form-data": { - "version": "4.0.5", + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/format": { - "version": "0.2.2", - "dev": true, - "engines": { - "node": ">=0.4.x" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs-extra": { - "version": "7.0.1", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=6" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.2", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/function.prototype.name": { - "version": "1.1.8", + "node_modules/eslint": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/generator-function": { - "version": "2.0.1", + "node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, "engines": { - "node": ">= 0.4" + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/gensequence": { - "version": "8.0.8", + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "engines": { - "node": ">=20" + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", + "node_modules/eslint-config-webpack": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/eslint-config-webpack/-/eslint-config-webpack-4.9.6.tgz", + "integrity": "sha512-4g1VqqOVgPrO/2bh17qNRKsQK26Aw1WF9mVTnvF+rNTDIUUTx+IaukXqXlumzwApQ1GfJlOsdLvT6WER1SPePg==", "dev": true, "license": "MIT", + "dependencies": { + "@eslint/js": "^9.39.2", + "@eslint/markdown": "^8.0.1", + "@stylistic/eslint-plugin": "^5.10.0", + "detect-indent": "^7.0.2", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^29.15.2", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-n": "^18.0.1", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-unicorn": "^64.0.0", + "globals": "^17.6.0", + "jsonc-eslint-parser": "^3.1.0", + "semver": "^7.8.0", + "sort-package-json": "^3.6.0", + "typescript-eslint": "^8.59.3" + }, "engines": { - "node": ">=6.9.0" + "node": ">= 20.9.0" + }, + "peerDependencies": { + "eslint": ">= 9.28.0", + "typescript": ">=4.8.4 <7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/get-caller-file": { - "version": "2.0.5", + "node_modules/eslint-config-webpack/node_modules/detect-indent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.2.tgz", + "integrity": "sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-east-asian-width": { - "version": "1.6.0", + "node_modules/eslint-config-webpack/node_modules/globals": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", "dev": true, "license": "MIT", "engines": { @@ -6464,835 +4660,911 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "debug": "^3.2.7", + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.6" } }, - "node_modules/get-package-type": { - "version": "0.1.0", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.0.0" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/get-proto": { - "version": "1.0.1", + "node_modules/eslint-module-utils": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.13.0.tgz", + "integrity": "sha512-bLohSkT6469rRs8czj0tLTD8vaeIS/whvPRJVjDr7IuoTT1k5DYDERlNycjDj/HkOlvQdYurmfZ/g3fG5bgeLQ==", "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "debug": "^3.2.7" }, "engines": { - "node": ">= 0.4" + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/get-stream": { - "version": "6.0.1", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", + "node_modules/eslint-plugin-es-x": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" }, "engines": { - "node": ">= 0.4" + "node": "^14.18.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": ">=8" } }, - "node_modules/get-tsconfig": { - "version": "4.14.0", + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/git-hooks-list": { - "version": "4.2.1", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/fisker/git-hooks-list?sponsor=1" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/github-slugger": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/glob": { - "version": "7.2.3", + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/glob-parent": { - "version": "6.0.2", + "node_modules/eslint-plugin-jest": { + "version": "29.15.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.15.2.tgz", + "integrity": "sha512-kEN4r9RZl1xcsb4arGq89LrcVdOUFII/JSCwtTPJyv16mDwmPrcuEQwpxqZHeINvcsd7oK5O/rhdGlxFRaZwvQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "@typescript-eslint/utils": "^8.0.0" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regex.js": { - "version": "1.2.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node": "^20.12.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "tslib": "2" + "@typescript-eslint/eslint-plugin": "^8.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "jest": "*", + "typescript": ">=4.8.4 <7.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/global-directory": { - "version": "5.0.0", + "node_modules/eslint-plugin-jsdoc": { + "version": "62.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.9.0.tgz", + "integrity": "sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "ini": "6.0.0" + "@es-joy/jsdoccomment": "~0.86.0", + "@es-joy/resolve.exports": "1.2.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.6", + "debug": "^4.4.3", + "escape-string-regexp": "^4.0.0", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "html-entities": "^2.6.0", + "object-deep-merge": "^2.0.0", + "parse-imports-exports": "^0.2.4", + "semver": "^7.7.4", + "spdx-expression-parse": "^4.0.0", + "to-valid-identifier": "^1.0.0" }, "engines": { - "node": ">=20" + "node": "^20.19.0 || ^22.13.0 || >=24" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0" } }, - "node_modules/globals": { - "version": "14.0.0", + "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/globalthis": { - "version": "1.0.4", + "node_modules/eslint-plugin-jsdoc/node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" }, "engines": { - "node": ">= 0.4" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/globby": { - "version": "11.1.0", + "node_modules/eslint-plugin-n": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-18.1.0.tgz", + "integrity": "sha512-hkUm9EtnFV2h2fE16jNVUfCVUqvPzI7fGLsFdun5lFt/pbmf2kCgDx6ymi9rx+NCUSggBmurJCZOfG20JBs/kg==", "dev": true, "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@eslint-community/eslint-utils": "^4.5.0", + "enhanced-resolve": "^5.17.1", + "eslint-plugin-es-x": "^7.8.0", + "get-tsconfig": "^4.8.1", + "globals": "^15.11.0", + "globrex": "^0.1.2", + "ignore": "^5.3.2", + "semver": "^7.6.3" }, "engines": { - "node": ">=10" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globrex": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/gopd": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "url": "https://opencollective.com/eslint" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "eslint": ">=8.57.1", + "ts-declaration-location": "^1.0.6", + "typescript": ">=5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "ts-declaration-location": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/has-flag": { - "version": "4.0.0", + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-proto": { - "version": "1.2.0", + "node_modules/eslint-plugin-prettier": { + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz", + "integrity": "sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==", "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.0" + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.13" }, "engines": { - "node": ">= 0.4" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "url": "https://opencollective.com/eslint-plugin-prettier" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/hasown": { - "version": "2.0.2", + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hermes-estree": { - "version": "0.25.1", - "dev": true, - "license": "MIT" - }, - "node_modules/hermes-parser": { - "version": "0.25.1", - "dev": true, - "license": "MIT", - "dependencies": { - "hermes-estree": "0.25.1" + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" } }, - "node_modules/html-entities": { - "version": "2.6.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/human-id": { - "version": "4.1.3", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", + "license": "ISC", "bin": { - "human-id": "dist/cli.js" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "engines": { - "node": ">=10.17.0" + "semver": "bin/semver.js" } }, - "node_modules/husky": { - "version": "9.1.7", + "node_modules/eslint-plugin-unicorn": { + "version": "64.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-64.0.0.tgz", + "integrity": "sha512-rNZwalHh8i0UfPlhNwg5BTUO1CMdKNmjqe+TgzOTZnpKoi8VBgsW7u9qCHIdpxEzZ1uwrJrPF0uRb7l//K38gA==", "dev": true, "license": "MIT", - "bin": { - "husky": "bin.js" + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "@eslint-community/eslint-utils": "^4.9.1", + "change-case": "^5.4.4", + "ci-info": "^4.4.0", + "clean-regexp": "^1.0.0", + "core-js-compat": "^3.49.0", + "find-up-simple": "^1.0.1", + "globals": "^17.4.0", + "indent-string": "^5.0.0", + "is-builtin-module": "^5.0.0", + "jsesc": "^3.1.0", + "pluralize": "^8.0.0", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.13.0", + "semver": "^7.7.4", + "strip-indent": "^4.1.1" }, "engines": { - "node": ">=18" + "node": "^20.10.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/sponsors/typicode" + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=9.38.0" } }, - "node_modules/hyperdyperid": { - "version": "1.2.0", + "node_modules/eslint-plugin-unicorn/node_modules/globals": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", "dev": true, "license": "MIT", "engines": { - "node": ">=10.18" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/iconv-lite": { - "version": "0.7.2", + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://opencollective.com/eslint" } }, - "node_modules/ignore": { - "version": "5.3.2", + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">= 4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/import-fresh": { - "version": "3.3.1", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/import-local": { - "version": "3.2.0", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-meta-resolve": { - "version": "4.2.0", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=0.8.19" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/indent-string": { + "node_modules/eslint/node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "6.0.0", + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/internal-slot": { - "version": "1.1.0", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/is-array-buffer": { - "version": "3.0.5", + "node_modules/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/is-async-function": { - "version": "2.1.1", + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/is-bigint": { - "version": "1.1.0", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/is-boolean-object": { - "version": "1.2.2", + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "estraverse": "^5.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10" } }, - "node_modules/is-builtin-module": { - "version": "5.0.0", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "builtin-modules": "^5.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/is-callable": { - "version": "1.2.7", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0" } }, - "node_modules/is-core-module": { - "version": "2.16.1", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, + "license": "BSD-2-Clause", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/is-data-view": { - "version": "1.0.2", + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "node_modules/is-date-object": { - "version": "1.1.0", + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.8.x" } }, - "node_modules/is-extglob": { - "version": "2.1.1", + "node_modules/extendable-error": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-equals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-6.0.0.tgz", + "integrity": "sha512-PFhhIGgdM79r5Uztdj9Zb6Tt1zKafqVfdMGwVca1z5z6fbX7DmsySSuJd8HiP6I1j505DCS83cLxo5rmSNeVEA==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.6.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "5.1.0", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "get-east-asian-width": "^1.3.1" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, - "node_modules/is-generator-fn": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/is-generator-function": { - "version": "1.1.2", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "reusify": "^1.0.4" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "format": "^0.2.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-map": { - "version": "2.0.3", + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "flat-cache": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/is-number": { - "version": "7.0.0", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">=0.12.0" + "node": ">=8" } }, - "node_modules/is-number-object": { - "version": "1.1.1", + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-plain-obj": { - "version": "4.1.0", + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-regex": { - "version": "1.2.1", + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16" } }, - "node_modules/is-safe-filename": { - "version": "0.1.1", + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "ISC" }, - "node_modules/is-set": { - "version": "2.0.3", + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=4.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -7301,67 +5573,77 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "2.0.1", + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 6" } }, - "node_modules/is-string": { - "version": "1.1.1", + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.4.x" } }, - "node_modules/is-subdir": { - "version": "1.2.0", + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", "dependencies": { - "better-path-resolve": "1.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=6 <7 || >=8" } }, - "node_modules/is-symbol": { - "version": "1.1.1", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.16" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -7370,1408 +5652,1146 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakmap": { - "version": "2.0.2", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakref": { - "version": "1.1.1", + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakset": { - "version": "2.0.4", + "node_modules/gensequence": { + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-8.0.8.tgz", + "integrity": "sha512-omMVniXEXpdx/vKxGnPRoO2394Otlze28TyxECbFVyoSpZ9H3EO7lemjcB12OpQJzRW4e5tt/dL1rOxry6aMHg==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=20" } }, - "node_modules/is-windows": { - "version": "1.0.2", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/isarray": { + "node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, + "license": "MIT", "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "node": ">=18" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-reports": { - "version": "3.2.0", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, + "license": "MIT", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/iterator.prototype": { - "version": "1.1.5", + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jackspeak": { - "version": "3.4.3", + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", "dev": true, - "license": "BlueOak-1.0.0", - "optional": true, - "peer": true, + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "resolve-pkg-maps": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/jest": { - "version": "30.3.0", + "node_modules/git-hooks-list": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.2.1.tgz", + "integrity": "sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, + "funding": { + "url": "https://github.com/fisker/git-hooks-list?sponsor=1" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "dev": true, + "license": "ISC" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", "dependencies": { - "@jest/core": "30.3.0", - "@jest/types": "30.3.0", - "import-local": "^3.2.0", - "jest-cli": "30.3.0" - }, - "bin": { - "jest": "bin/jest.js" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": "*" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-changed-files": { - "version": "30.3.0", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "ISC", "dependencies": { - "execa": "^5.1.1", - "jest-util": "30.3.0", - "p-limit": "^3.1.0" + "is-glob": "^4.0.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10.13.0" } }, - "node_modules/jest-circus": { - "version": "30.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/environment": "30.3.0", - "@jest/expect": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/types": "30.3.0", - "@types/node": "*", - "chalk": "^4.1.2", - "co": "^4.6.0", - "dedent": "^1.6.0", - "is-generator-fn": "^2.1.0", - "jest-each": "30.3.0", - "jest-matcher-utils": "30.3.0", - "jest-message-util": "30.3.0", - "jest-runtime": "30.3.0", - "jest-snapshot": "30.3.0", - "jest-util": "30.3.0", - "p-limit": "^3.1.0", - "pretty-format": "30.3.0", - "pure-rand": "^7.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/global-directory": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-5.0.0.tgz", + "integrity": "sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ini": "6.0.0" }, "engines": { - "node": ">=10" + "node": ">=20" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-cli": { - "version": "30.3.0", + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/core": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/types": "30.3.0", - "chalk": "^4.1.2", - "exit-x": "^0.2.2", - "import-local": "^3.2.0", - "jest-config": "30.3.0", - "jest-util": "30.3.0", - "jest-validate": "30.3.0", - "yargs": "^17.7.2" - }, - "bin": { - "jest": "bin/jest.js" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">=18" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-cli/node_modules/cliui": { - "version": "8.0.1", + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-cli/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-cli/node_modules/string-width": { - "version": "4.2.3", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/jest-cli/node_modules/wrap-ansi": { - "version": "7.0.0", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" + "es-define-property": "^1.0.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-cli/node_modules/yargs": { - "version": "17.7.2", + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "dunder-proto": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-cli/node_modules/yargs-parser": { - "version": "21.1.1", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, - "license": "ISC", - "optional": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config": { - "version": "30.3.0", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@babel/core": "^7.27.4", - "@jest/get-type": "30.1.0", - "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.3.0", - "@jest/types": "30.3.0", - "babel-jest": "30.3.0", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "deepmerge": "^4.3.1", - "glob": "^10.5.0", - "graceful-fs": "^4.2.11", - "jest-circus": "30.3.0", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.3.0", - "jest-runner": "30.3.0", - "jest-util": "30.3.0", - "jest-validate": "30.3.0", - "parse-json": "^5.2.0", - "pretty-format": "30.3.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "has-symbols": "^1.0.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "esbuild-register": ">=3.4.0", - "ts-node": ">=9.0.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "esbuild-register": { - "optional": true - }, - "ts-node": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/jest-config/node_modules/brace-expansion": { - "version": "2.0.3", + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0" - } + "license": "MIT" }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "hermes-estree": "0.25.1" } }, - "node_modules/jest-config/node_modules/glob": { - "version": "10.5.0", + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" }, - "node_modules/jest-config/node_modules/minimatch": { - "version": "9.0.9", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, - "license": "ISC", - "optional": true, - "peer": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.2" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 6" } }, - "node_modules/jest-diff": { - "version": "30.3.0", + "node_modules/human-id": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-4.2.0.tgz", + "integrity": "sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/diff-sequences": "30.3.0", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.3.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "bin": { + "human-id": "dist/cli.js" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" + "bin": { + "husky": "bin.js" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=10.18" } }, - "node_modules/jest-docblock": { - "version": "30.2.0", + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "detect-newline": "^3.1.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/jest-each": { - "version": "30.3.0", + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.3.0", - "chalk": "^4.1.2", - "jest-util": "30.3.0", - "pretty-format": "30.3.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 4" } }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/import-fresh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-4.0.0.tgz", + "integrity": "sha512-Fpi660c7VPDM3fPKYovStd9IP1CPOikf6v/dGxJJMmHPcwYQIMJ4W7kO1avBYEpMqkCh+Dx3Ln6H7VYqgztLjw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=22.15" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/jest-environment-node": { - "version": "30.3.0", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/environment": "30.3.0", - "@jest/fake-timers": "30.3.0", - "@jest/types": "30.3.0", - "@types/node": "*", - "jest-mock": "30.3.0", - "jest-util": "30.3.0", - "jest-validate": "30.3.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.8.19" } }, - "node_modules/jest-haste-map": { - "version": "30.3.0", + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "30.3.0", - "@types/node": "*", - "anymatch": "^3.1.3", - "fb-watchman": "^2.0.2", - "graceful-fs": "^4.2.11", - "jest-regex-util": "30.0.1", - "jest-util": "30.3.0", - "jest-worker": "30.3.0", - "picomatch": "^4.0.3", - "walker": "^1.0.8" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" }, - "optionalDependencies": { - "fsevents": "^2.3.3" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-leak-detector": { - "version": "30.3.0", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "ISC", "dependencies": { - "@jest/get-type": "30.1.0", - "pretty-format": "30.3.0" - }, + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "dev": true, + "license": "ISC", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/jest-matcher-utils": { - "version": "30.3.0", + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "jest-diff": "30.3.0", - "pretty-format": "30.3.0" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util": { - "version": "30.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.3.0", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.3", - "pretty-format": "30.3.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "has-bigints": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-mock": { - "version": "30.3.0", + "node_modules/is-builtin-module": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", + "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/types": "30.3.0", - "@types/node": "*", - "jest-util": "30.3.0" + "builtin-modules": "^5.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" + "node": ">=18.20" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-regex-util": { - "version": "30.0.1", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "30.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", - "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.3.0", - "jest-validate": "30.3.0", - "slash": "^3.0.0", - "unrs-resolver": "^1.7.11" + "node": ">= 0.4" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve-dependencies": { - "version": "30.3.0", + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "jest-regex-util": "30.0.1", - "jest-snapshot": "30.3.0" + "hasown": "^2.0.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runner": { - "version": "30.3.0", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/console": "30.3.0", - "@jest/environment": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", - "@types/node": "*", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.3.0", - "jest-haste-map": "30.3.0", - "jest-leak-detector": "30.3.0", - "jest-message-util": "30.3.0", - "jest-resolve": "30.3.0", - "jest-runtime": "30.3.0", - "jest-util": "30.3.0", - "jest-watcher": "30.3.0", - "jest-worker": "30.3.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "get-east-asian-width": "^1.3.1" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime": { - "version": "30.3.0", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/environment": "30.3.0", - "@jest/fake-timers": "30.3.0", - "@jest/globals": "30.3.0", - "@jest/source-map": "30.0.1", - "@jest/test-result": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", - "@types/node": "*", - "chalk": "^4.1.2", - "cjs-module-lexer": "^2.1.0", - "collect-v8-coverage": "^1.0.2", - "glob": "^10.5.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", - "jest-message-util": "30.3.0", - "jest-mock": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.3.0", - "jest-snapshot": "30.3.0", - "jest-util": "30.3.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/brace-expansion": { + "node_modules/is-negative-zero": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "10.5.0", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "MIT", + "engines": { + "node": ">=0.12.0" } }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "9.0.9", + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, - "license": "ISC", - "optional": true, - "peer": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.2" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot": { - "version": "30.3.0", + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.27.4", - "@babel/generator": "^7.27.5", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1", - "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.3.0", - "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", - "babel-preset-current-node-syntax": "^1.2.0", - "chalk": "^4.1.2", - "expect": "30.3.0", - "graceful-fs": "^4.2.11", - "jest-diff": "30.3.0", - "jest-matcher-utils": "30.3.0", - "jest-message-util": "30.3.0", - "jest-util": "30.3.0", - "pretty-format": "30.3.0", - "semver": "^7.7.2", - "synckit": "^0.11.8" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-safe-filename": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-safe-filename/-/is-safe-filename-0.1.1.tgz", + "integrity": "sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">=20" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-util": { - "version": "30.3.0", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/types": "30.3.0", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.3" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-validate": { - "version": "30.3.0", + "node_modules/is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.3.0", - "camelcase": "^6.3.0", - "chalk": "^4.1.2", - "leven": "^3.1.0", - "pretty-format": "30.3.0" + "better-path-resolve": "1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=4" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, + "dependencies": { + "which-typed-array": "^1.1.16" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-watcher": { - "version": "30.3.0", + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@jest/test-result": "30.3.0", - "@jest/types": "30.3.0", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "jest-util": "30.3.0", - "string-length": "^4.0.2" + "call-bound": "^1.0.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-worker": { - "version": "30.3.0", + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@types/node": "*", - "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.3.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.1.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">= 10.13.0" } }, "node_modules/js-tokens": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.1", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -8782,6 +6802,8 @@ }, "node_modules/jsdoc-type-pratt-parser": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.2.0.tgz", + "integrity": "sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==", "dev": true, "license": "MIT", "engines": { @@ -8790,6 +6812,8 @@ }, "node_modules/jsesc": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -8801,16 +6825,11 @@ }, "node_modules/json-buffer": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/json-schema-to-typescript": { "version": "15.0.4", "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-15.0.4.tgz", @@ -8837,16 +6856,22 @@ }, "node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { @@ -8858,6 +6883,8 @@ }, "node_modules/jsonc-eslint-parser": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-3.1.0.tgz", + "integrity": "sha512-75EA7EWZExL/j+MDKQrRbdzcRI2HOkRlmUw8fZJc1ioqFEOvBsq7Rt+A6yCxOt9w/TYNpkt52gC6nm/g5tFIng==", "dev": true, "license": "MIT", "dependencies": { @@ -8874,6 +6901,8 @@ }, "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -8885,6 +6914,8 @@ }, "node_modules/jsonfile": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", "optionalDependencies": { @@ -8893,6 +6924,8 @@ }, "node_modules/jsx-ast-utils": { "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8906,7 +6939,9 @@ } }, "node_modules/katex": { - "version": "0.16.45", + "version": "0.16.47", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz", + "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==", "dev": true, "funding": [ "https://opencollective.com/katex", @@ -8922,6 +6957,8 @@ }, "node_modules/katex/node_modules/commander": { "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "license": "MIT", "engines": { @@ -8930,24 +6967,18 @@ }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, - "node_modules/leven": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8958,22 +6989,17 @@ "node": ">= 0.8.0" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/lint-staged": { - "version": "17.0.5", + "version": "17.0.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.0.7.tgz", + "integrity": "sha512-JrSobt+tW3rH8IOMi8tDZd3foorM5yPEkLD/V2NxobgHrFfHWGee4MOLVuZeScgxftEwbHrPHIFA/ZL+nUJeuA==", "dev": true, "license": "MIT", "dependencies": { "listr2": "^10.2.1", "picomatch": "^4.0.4", "string-argv": "^0.3.2", - "tinyexec": "^1.1.2" + "tinyexec": "^1.2.4" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -8985,11 +7011,13 @@ "url": "https://opencollective.com/lint-staged" }, "optionalDependencies": { - "yaml": "^2.8.4" + "yaml": "^2.9.0" } }, "node_modules/listr2": { "version": "10.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.1.tgz", + "integrity": "sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9018,14 +7046,16 @@ } }, "node_modules/locate-path": { - "version": "6.0.0", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9040,16 +7070,22 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, "node_modules/lodash.startcase": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", "dev": true, "license": "MIT" }, "node_modules/log-update": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "license": "MIT", "dependencies": { @@ -9066,38 +7102,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/log-update/node_modules/emoji-regex": { "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, "node_modules/log-update/node_modules/slice-ansi": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, "license": "MIT", "dependencies": { @@ -9113,6 +7128,8 @@ }, "node_modules/log-update/node_modules/string-width": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9129,6 +7146,8 @@ }, "node_modules/log-update/node_modules/strip-ansi": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { @@ -9143,6 +7162,8 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", "dependencies": { @@ -9159,6 +7180,8 @@ }, "node_modules/longest-streak": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "dev": true, "license": "MIT", "funding": { @@ -9168,6 +7191,8 @@ }, "node_modules/loose-envify": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9179,40 +7204,18 @@ }, "node_modules/lru-cache": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, - "node_modules/make-dir": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, "node_modules/markdown-table": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "dev": true, "license": "MIT", "funding": { @@ -9222,6 +7225,8 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { @@ -9230,6 +7235,8 @@ }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", "dev": true, "license": "MIT", "dependencies": { @@ -9245,6 +7252,8 @@ }, "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -9256,6 +7265,8 @@ }, "node_modules/mdast-util-from-markdown": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9279,6 +7290,8 @@ }, "node_modules/mdast-util-frontmatter": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", "dev": true, "license": "MIT", "dependencies": { @@ -9296,6 +7309,8 @@ }, "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -9307,6 +7322,8 @@ }, "node_modules/mdast-util-gfm": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9325,6 +7342,8 @@ }, "node_modules/mdast-util-gfm-autolink-literal": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9341,6 +7360,8 @@ }, "node_modules/mdast-util-gfm-footnote": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9357,6 +7378,8 @@ }, "node_modules/mdast-util-gfm-strikethrough": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "dev": true, "license": "MIT", "dependencies": { @@ -9371,6 +7394,8 @@ }, "node_modules/mdast-util-gfm-table": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "dev": true, "license": "MIT", "dependencies": { @@ -9387,6 +7412,8 @@ }, "node_modules/mdast-util-gfm-task-list-item": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9402,6 +7429,8 @@ }, "node_modules/mdast-util-math": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", + "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", "dev": true, "license": "MIT", "dependencies": { @@ -9420,6 +7449,8 @@ }, "node_modules/mdast-util-phrasing": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "dev": true, "license": "MIT", "dependencies": { @@ -9433,6 +7464,8 @@ }, "node_modules/mdast-util-to-markdown": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "dev": true, "license": "MIT", "dependencies": { @@ -9453,6 +7486,8 @@ }, "node_modules/mdast-util-to-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, "license": "MIT", "dependencies": { @@ -9464,18 +7499,20 @@ } }, "node_modules/memfs": { - "version": "4.57.2", + "version": "4.57.6", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.6.tgz", + "integrity": "sha512-WQK+DGjKCnPdpSyJUXphz+COF2uEhhsxQ3VIWBSbzpbbXuch3h4FePMqXrXGdLjsTgo4JFzBFsP6AWd9pVazGw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.57.2", - "@jsonjoy.com/fs-fsa": "4.57.2", - "@jsonjoy.com/fs-node": "4.57.2", - "@jsonjoy.com/fs-node-builtins": "4.57.2", - "@jsonjoy.com/fs-node-to-fsa": "4.57.2", - "@jsonjoy.com/fs-node-utils": "4.57.2", - "@jsonjoy.com/fs-print": "4.57.2", - "@jsonjoy.com/fs-snapshot": "4.57.2", + "@jsonjoy.com/fs-core": "4.57.6", + "@jsonjoy.com/fs-fsa": "4.57.6", + "@jsonjoy.com/fs-node": "4.57.6", + "@jsonjoy.com/fs-node-builtins": "4.57.6", + "@jsonjoy.com/fs-node-to-fsa": "4.57.6", + "@jsonjoy.com/fs-node-utils": "4.57.6", + "@jsonjoy.com/fs-print": "4.57.6", + "@jsonjoy.com/fs-snapshot": "4.57.6", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -9493,11 +7530,15 @@ }, "node_modules/merge-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -9506,6 +7547,8 @@ }, "node_modules/micromark": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", "dev": true, "funding": [ { @@ -9540,6 +7583,8 @@ }, "node_modules/micromark-core-commonmark": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", "dev": true, "funding": [ { @@ -9573,6 +7618,8 @@ }, "node_modules/micromark-extension-frontmatter": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", "dev": true, "license": "MIT", "dependencies": { @@ -9588,6 +7635,8 @@ }, "node_modules/micromark-extension-gfm": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", "dev": true, "license": "MIT", "dependencies": { @@ -9607,6 +7656,8 @@ }, "node_modules/micromark-extension-gfm-autolink-literal": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "dev": true, "license": "MIT", "dependencies": { @@ -9622,6 +7673,8 @@ }, "node_modules/micromark-extension-gfm-footnote": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "dev": true, "license": "MIT", "dependencies": { @@ -9641,6 +7694,8 @@ }, "node_modules/micromark-extension-gfm-strikethrough": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", "dev": true, "license": "MIT", "dependencies": { @@ -9658,6 +7713,8 @@ }, "node_modules/micromark-extension-gfm-table": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -9674,6 +7731,8 @@ }, "node_modules/micromark-extension-gfm-tagfilter": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", "dev": true, "license": "MIT", "dependencies": { @@ -9686,6 +7745,8 @@ }, "node_modules/micromark-extension-gfm-task-list-item": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", "dev": true, "license": "MIT", "dependencies": { @@ -9702,6 +7763,8 @@ }, "node_modules/micromark-extension-math": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", "dev": true, "license": "MIT", "dependencies": { @@ -9720,6 +7783,8 @@ }, "node_modules/micromark-factory-destination": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", "dev": true, "funding": [ { @@ -9740,6 +7805,8 @@ }, "node_modules/micromark-factory-label": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", "dev": true, "funding": [ { @@ -9761,6 +7828,8 @@ }, "node_modules/micromark-factory-space": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", "dev": true, "funding": [ { @@ -9780,6 +7849,8 @@ }, "node_modules/micromark-factory-title": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", "dev": true, "funding": [ { @@ -9801,6 +7872,8 @@ }, "node_modules/micromark-factory-whitespace": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", "dev": true, "funding": [ { @@ -9822,6 +7895,8 @@ }, "node_modules/micromark-util-character": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "dev": true, "funding": [ { @@ -9841,6 +7916,8 @@ }, "node_modules/micromark-util-chunked": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "dev": true, "funding": [ { @@ -9859,6 +7936,8 @@ }, "node_modules/micromark-util-classify-character": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "dev": true, "funding": [ { @@ -9879,6 +7958,8 @@ }, "node_modules/micromark-util-combine-extensions": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "dev": true, "funding": [ { @@ -9898,6 +7979,8 @@ }, "node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "dev": true, "funding": [ { @@ -9916,6 +7999,8 @@ }, "node_modules/micromark-util-decode-string": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "dev": true, "funding": [ { @@ -9937,6 +8022,8 @@ }, "node_modules/micromark-util-encode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "dev": true, "funding": [ { @@ -9952,6 +8039,8 @@ }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", "dev": true, "funding": [ { @@ -9967,6 +8056,8 @@ }, "node_modules/micromark-util-normalize-identifier": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "dev": true, "funding": [ { @@ -9985,6 +8076,8 @@ }, "node_modules/micromark-util-resolve-all": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "dev": true, "funding": [ { @@ -10003,6 +8096,8 @@ }, "node_modules/micromark-util-sanitize-uri": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dev": true, "funding": [ { @@ -10023,6 +8118,8 @@ }, "node_modules/micromark-util-subtokenize": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", "dev": true, "funding": [ { @@ -10044,6 +8141,8 @@ }, "node_modules/micromark-util-symbol": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "dev": true, "funding": [ { @@ -10059,6 +8158,8 @@ }, "node_modules/micromark-util-types": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", "dev": true, "funding": [ { @@ -10074,6 +8175,8 @@ }, "node_modules/micromatch": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -10086,6 +8189,8 @@ }, "node_modules/micromatch/node_modules/picomatch": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -10097,6 +8202,8 @@ }, "node_modules/mime-db": { "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", "engines": { @@ -10105,6 +8212,8 @@ }, "node_modules/mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "dependencies": { @@ -10114,18 +8223,10 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/mimic-function": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true, "license": "MIT", "engines": { @@ -10137,6 +8238,8 @@ }, "node_modules/minimatch": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -10148,24 +8251,18 @@ }, "node_modules/minimist": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass": { - "version": "7.1.3", - "dev": true, - "license": "BlueOak-1.0.0", - "optional": true, - "peer": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/mri": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, "license": "MIT", "engines": { @@ -10174,27 +8271,15 @@ }, "node_modules/ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, - "node_modules/napi-postinstall": { - "version": "0.3.4", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "napi-postinstall": "lib/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" - } - }, "node_modules/natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, @@ -10205,8 +8290,39 @@ "dev": true, "license": "MIT" }, + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/node-exports-info/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/node-fetch": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, "license": "MIT", "dependencies": { @@ -10226,51 +8342,30 @@ }, "node_modules/node-gyp-build": { "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", "dev": true, "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/node-releases": { - "version": "2.0.27", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "node-gyp-build-test": "build-test.js" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", + "node_modules/node-releases": { + "version": "2.0.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", + "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "path-key": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=18" } }, "node_modules/object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "license": "MIT", "engines": { @@ -10278,12 +8373,16 @@ } }, "node_modules/object-deep-merge": { - "version": "2.0.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-2.0.1.tgz", + "integrity": "sha512-aKttDKcU3pyZqKcCkDhsMn70WmZFG2JGDQLP9EcLyTSIFQRCPWLAmBZRLJnrVUrhPG1jETEEbfdgbNtJf1LyMg==", "dev": true, "license": "MIT" }, "node_modules/object-inspect": { "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", "engines": { @@ -10295,6 +8394,8 @@ }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -10303,6 +8404,8 @@ }, "node_modules/object.assign": { "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -10322,6 +8425,8 @@ }, "node_modules/object.entries": { "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { @@ -10336,6 +8441,8 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10353,6 +8460,8 @@ }, "node_modules/object.groupby": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10366,6 +8475,8 @@ }, "node_modules/object.values": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -10383,6 +8494,8 @@ }, "node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "license": "ISC", "dependencies": { @@ -10390,16 +8503,16 @@ } }, "node_modules/onetime": { - "version": "5.1.2", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10407,6 +8520,8 @@ }, "node_modules/optionator": { "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -10423,11 +8538,15 @@ }, "node_modules/outdent": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", + "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", "dev": true, "license": "MIT" }, "node_modules/own-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -10444,6 +8563,8 @@ }, "node_modules/p-filter": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, "license": "MIT", "dependencies": { @@ -10454,28 +8575,32 @@ } }, "node_modules/p-limit": { - "version": "3.1.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "5.0.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "p-limit": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10483,6 +8608,8 @@ }, "node_modules/p-map": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, "license": "MIT", "engines": { @@ -10491,21 +8618,18 @@ }, "node_modules/p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "dev": true, - "license": "BlueOak-1.0.0", - "optional": true, - "peer": true - }, "node_modules/package-manager-detector": { "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10514,6 +8638,8 @@ }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -10525,46 +8651,35 @@ }, "node_modules/parse-imports-exports": { "version": "0.2.4", + "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", + "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", "dev": true, "license": "MIT", "dependencies": { "parse-statements": "1.0.11" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/parse-statements": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", + "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", "dev": true, "license": "MIT" }, "node_modules/path-exists": { - "version": "4.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", "engines": { @@ -10573,6 +8688,8 @@ }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -10581,35 +8698,15 @@ }, "node_modules/path-parse": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, - "node_modules/path-scurry": { - "version": "1.11.1", - "dev": true, - "license": "BlueOak-1.0.0", - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -10618,11 +8715,15 @@ }, "node_modules/picocolors": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { @@ -10634,93 +8735,18 @@ }, "node_modules/pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/pirates": { - "version": "4.0.7", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/pluralize": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, "license": "MIT", "engines": { @@ -10729,6 +8755,8 @@ }, "node_modules/possible-typed-array-names": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -10737,6 +8765,8 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -10744,7 +8774,9 @@ } }, "node_modules/prettier": { - "version": "3.8.3", + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.4.tgz", + "integrity": "sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==", "dev": true, "license": "MIT", "bin": { @@ -10759,6 +8791,8 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", "dev": true, "license": "MIT", "dependencies": { @@ -10768,23 +8802,10 @@ "node": ">=6.0.0" } }, - "node_modules/pretty-format": { - "version": "30.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/prop-types": { "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "license": "MIT", "dependencies": { @@ -10793,13 +8814,10 @@ "react-is": "^16.13.1" } }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "dev": true, - "license": "MIT" - }, "node_modules/proxy-from-env": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", "dev": true, "license": "MIT", "engines": { @@ -10808,31 +8826,18 @@ }, "node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/pure-rand": { - "version": "7.0.1", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/quansync": { "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", "dev": true, "funding": [ { @@ -10848,6 +8853,8 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -10866,14 +8873,16 @@ "license": "MIT" }, "node_modules/react-is": { - "version": "18.3.1", + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true + "license": "MIT" }, "node_modules/read-yaml-file": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", + "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", "dev": true, "license": "MIT", "dependencies": { @@ -10888,6 +8897,8 @@ }, "node_modules/read-yaml-file/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -10896,6 +8907,8 @@ }, "node_modules/read-yaml-file/node_modules/js-yaml": { "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -10906,16 +8919,10 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/read-yaml-file/node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -10937,6 +8944,8 @@ }, "node_modules/regexp-tree": { "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", "dev": true, "license": "MIT", "bin": { @@ -10945,6 +8954,8 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -10964,6 +8975,8 @@ }, "node_modules/regjsparser": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", + "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10975,6 +8988,8 @@ }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { @@ -10983,6 +8998,8 @@ }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", "engines": { @@ -10991,6 +9008,8 @@ }, "node_modules/reserved-identifiers": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz", + "integrity": "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==", "dev": true, "license": "MIT", "engines": { @@ -11001,11 +9020,16 @@ } }, "node_modules/resolve": { - "version": "1.22.11", + "version": "2.0.0-next.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", + "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.1", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.2", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -11019,21 +9043,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -11042,6 +9055,8 @@ }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, "license": "MIT", "funding": { @@ -11050,6 +9065,8 @@ }, "node_modules/restore-cursor": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "license": "MIT", "dependencies": { @@ -11063,33 +9080,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/reusify": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -11099,11 +9093,15 @@ }, "node_modules/rfdc": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, "license": "MIT" }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -11125,13 +9123,15 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.3", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, @@ -11144,6 +9144,8 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -11159,6 +9161,8 @@ }, "node_modules/safe-regex-test": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -11175,6 +9179,8 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "license": "MIT" }, @@ -11236,7 +9242,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.8.0", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.3.tgz", + "integrity": "sha512-wnilbGyMxzbY7dNOl7jpKbLSjcfeweJWU5j4+u5qW+6/wuGD9KzIGOyZnQVSBM9E7DtWaaH3CyHkppYrKYoxwg==", "dev": true, "license": "ISC", "bin": { @@ -11248,6 +9256,8 @@ }, "node_modules/set-function-length": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -11264,6 +9274,8 @@ }, "node_modules/set-function-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11278,6 +9290,8 @@ }, "node_modules/set-proto": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -11291,6 +9305,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -11302,6 +9318,8 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { @@ -11309,13 +9327,15 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -11327,12 +9347,14 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -11343,6 +9365,8 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", "dependencies": { @@ -11360,6 +9384,8 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", "dependencies": { @@ -11377,14 +9403,22 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", - "optional": true, - "peer": true + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -11393,6 +9427,8 @@ }, "node_modules/slice-ansi": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", "dev": true, "license": "MIT", "dependencies": { @@ -11406,19 +9442,10 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/smol-toml": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz", + "integrity": "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -11430,11 +9457,15 @@ }, "node_modules/sort-object-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.1.0.tgz", + "integrity": "sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==", "dev": true, "license": "MIT" }, "node_modules/sort-package-json": { - "version": "3.6.0", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.7.1.tgz", + "integrity": "sha512-ssk1HG7whF8N/T1IsNAQrtHG5Cbdi0rAgRJZXYBr9hF5xaHnBNzUx/W6LcthEW7FhOwvZssbESZuO+GxssqAyA==", "dev": true, "license": "MIT", "dependencies": { @@ -11453,12 +9484,14 @@ "node": ">=20" } }, - "node_modules/sort-package-json/node_modules/detect-newline": { - "version": "4.0.1", + "node_modules/sort-package-json/node_modules/detect-indent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.2.tgz", + "integrity": "sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -11466,6 +9499,8 @@ }, "node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -11474,6 +9509,8 @@ }, "node_modules/source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", "dependencies": { @@ -11483,6 +9520,8 @@ }, "node_modules/spawndamnit": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", + "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -11490,24 +9529,17 @@ "signal-exit": "^4.0.1" } }, - "node_modules/spawndamnit/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/spdx-exceptions": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11517,39 +9549,32 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", "dev": true, "license": "CC0-1.0" }, "node_modules/sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, - "node_modules/stack-utils": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", + "node_modules/stack-trace": { + "version": "1.0.0-pre2", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-1.0.0-pre2.tgz", + "integrity": "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=8" + "node": ">=16" } }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11562,28 +9587,18 @@ }, "node_modules/string-argv": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" + "node": ">=0.6.19" } }, "node_modules/string-width": { "version": "8.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", + "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", "dev": true, "license": "MIT", "dependencies": { @@ -11597,34 +9612,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { @@ -11639,6 +9630,8 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "license": "MIT", "dependencies": { @@ -11665,6 +9658,8 @@ }, "node_modules/string.prototype.repeat": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, "license": "MIT", "dependencies": { @@ -11673,17 +9668,20 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.10", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", + "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11693,14 +9691,16 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.9", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", + "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "es-object-atoms": "^1.1.2" }, "engines": { "node": ">= 0.4" @@ -11711,6 +9711,8 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -11727,6 +9729,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -11736,32 +9740,10 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-ansi/node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { @@ -11769,27 +9751,19 @@ } }, "node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/strip-indent": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.1.1.tgz", + "integrity": "sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==", "dev": true, "license": "MIT", "engines": { @@ -11801,6 +9775,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -11811,18 +9787,25 @@ } }, "node_modules/supports-color": { - "version": "7.2.0", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -11833,11 +9816,13 @@ } }, "node_modules/synckit": { - "version": "0.11.12", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", + "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.9" + "@pkgr/core": "^0.3.6" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -11848,6 +9833,8 @@ }, "node_modules/tapable": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "license": "MIT", "engines": { "node": ">=6" @@ -11859,6 +9846,8 @@ }, "node_modules/term-size": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true, "license": "MIT", "engines": { @@ -11869,7 +9858,9 @@ } }, "node_modules/terser": { - "version": "5.46.0", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.48.0.tgz", + "integrity": "sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -11946,59 +9937,17 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "license": "MIT" }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/thingies": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz", + "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==", "dev": true, "license": "MIT", "engines": { @@ -12014,6 +9963,8 @@ }, "node_modules/tinybench": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-6.0.2.tgz", + "integrity": "sha512-FlHoQpcFvCzeXK5kVPvV7IVgW/hs/B36QWTz876iSdeJguBDfdTSRQmYmaHX+fQNt4hp+gEFB2XXw+8hT4/y8A==", "dev": true, "license": "MIT", "engines": { @@ -12021,7 +9972,9 @@ } }, "node_modules/tinyexec": { - "version": "1.1.2", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", "dev": true, "license": "MIT", "engines": { @@ -12029,12 +9982,14 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.15", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -12043,15 +9998,10 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "peer": true - }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12063,6 +10013,8 @@ }, "node_modules/to-valid-identifier": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-valid-identifier/-/to-valid-identifier-1.0.0.tgz", + "integrity": "sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==", "dev": true, "license": "MIT", "dependencies": { @@ -12096,7 +10048,9 @@ } }, "node_modules/tooling/node_modules/ajv": { - "version": "8.18.0", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", "dependencies": { @@ -12112,16 +10066,22 @@ }, "node_modules/tooling/node_modules/json-schema-traverse": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, "node_modules/tr46": { "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true, "license": "MIT" }, "node_modules/tree-dump": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -12137,6 +10097,8 @@ }, "node_modules/ts-api-utils": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, "license": "MIT", "engines": { @@ -12148,6 +10110,8 @@ }, "node_modules/tsconfig-paths": { "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -12159,6 +10123,8 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -12168,21 +10134,17 @@ "json5": "lib/cli.js" } }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/tslib": { "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -12192,31 +10154,10 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -12230,6 +10171,8 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -12248,6 +10191,8 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12267,16 +10212,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.7", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" }, "engines": { "node": ">= 0.4" @@ -12287,6 +10234,8 @@ }, "node_modules/typescript": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -12298,14 +10247,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.59.3", + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.61.0.tgz", + "integrity": "sha512-8y31Rd0eGTrDKqhy6vT0HtzhN+YLjQizwX3aA3hPXP/ynSfnrBXcQY5IzsP9/DM7+klX4IUncZZjkchP0z+rUw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.59.3", - "@typescript-eslint/parser": "8.59.3", - "@typescript-eslint/typescript-estree": "8.59.3", - "@typescript-eslint/utils": "8.59.3" + "@typescript-eslint/eslint-plugin": "8.61.0", + "@typescript-eslint/parser": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0", + "@typescript-eslint/utils": "8.61.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -12321,6 +10272,8 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -12337,12 +10290,16 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "dev": true, "license": "MIT" }, "node_modules/unist-util-is": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "dev": true, "license": "MIT", "dependencies": { @@ -12355,6 +10312,8 @@ }, "node_modules/unist-util-remove-position": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12368,6 +10327,8 @@ }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12380,6 +10341,8 @@ }, "node_modules/unist-util-visit": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", "dev": true, "license": "MIT", "dependencies": { @@ -12394,6 +10357,8 @@ }, "node_modules/unist-util-visit-parents": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12407,49 +10372,18 @@ }, "node_modules/universalify": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", "engines": { "node": ">= 4.0.0" } }, - "node_modules/unrs-resolver": { - "version": "1.11.1", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "napi-postinstall": "^0.3.0" - }, - "funding": { - "url": "https://opencollective.com/unrs-resolver" - }, - "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.11.1", - "@unrs/resolver-binding-android-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-x64": "1.11.1", - "@unrs/resolver-binding-freebsd-x64": "1.11.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-musl": "1.11.1", - "@unrs/resolver-binding-wasm32-wasi": "1.11.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" - } - }, "node_modules/update-browserslist-db": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -12479,47 +10413,28 @@ }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/vscode-languageserver-textdocument": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", "dev": true, "license": "MIT" }, "node_modules/vscode-uri": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", "dev": true, "license": "MIT" }, - "node_modules/walker": { - "version": "1.0.8", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, "node_modules/watchpack": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", @@ -12536,6 +10451,8 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true, "license": "BSD-2-Clause" }, @@ -12632,6 +10549,8 @@ }, "node_modules/whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "license": "MIT", "dependencies": { @@ -12641,6 +10560,8 @@ }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -12655,6 +10576,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -12673,6 +10596,8 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12699,6 +10624,8 @@ }, "node_modules/which-collection": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -12715,12 +10642,14 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.20", + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", + "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", @@ -12736,6 +10665,8 @@ }, "node_modules/word-wrap": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -12744,6 +10675,8 @@ }, "node_modules/wrap-ansi": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", + "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12758,79 +10691,10 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { @@ -12845,38 +10709,15 @@ }, "node_modules/wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "license": "ISC" }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/xdg-basedir": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "dev": true, "license": "MIT", "engines": { @@ -12888,6 +10729,8 @@ }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { @@ -12896,11 +10739,15 @@ }, "node_modules/yallist": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.4", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "dev": true, "license": "ISC", "bin": { @@ -12915,6 +10762,8 @@ }, "node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { @@ -12932,6 +10781,8 @@ }, "node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -12940,6 +10791,8 @@ }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -12948,6 +10801,8 @@ }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -12960,11 +10815,13 @@ } }, "node_modules/yocto-queue": { - "version": "0.1.0", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12972,6 +10829,8 @@ }, "node_modules/zod": { "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "dev": true, "license": "MIT", "funding": { @@ -12980,6 +10839,8 @@ }, "node_modules/zod-validation-error": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", "dev": true, "license": "MIT", "engines": { @@ -12991,6 +10852,8 @@ }, "node_modules/zwitch": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "dev": true, "license": "MIT", "funding": { From 99b22d9f04697775b5a23f0954a979c3688ec906 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Tue, 9 Jun 2026 17:45:26 +0000 Subject: [PATCH 07/12] test: prefer real fixes over eslint rule disables in the test overrides - Rename the single-character helper identifiers that `id-length` was flagging (`p` -> `pp`/`pth`, `o` -> `req`, `g` -> `register`) in the test suite, the runner shim and the browser smoke entry instead of silencing the rule for the whole file scope. - Add JSDoc to the two `async function main()` declarations in the smoke runner scripts so `jsdoc/require-jsdoc` no longer needs to be turned off (and the rule's empty-block fixup it used to trigger goes away with it). - Drop the now-unused override entries: `id-length`, `no-console`, `no-eval`, `no-control-regex` from the `test/*.js` override, and `id-length`, `jsdoc/require-jsdoc`, `jsdoc/no-blank-blocks` from the `test/smoke/**` override. The only relaxations left are the ones we genuinely cannot solve in code: `n/no-unsupported-features/node-builtins` for tests that use `node:test` and modern assert helpers, the same family plus `unicorn/prefer-native-coercion-functions` and the cross-runtime JSDoc rules for the smoke scripts, and `no-console` for the smoke scripts since they're CLI runners that legitimately print to stdout. --- eslint.config.mjs | 15 ++----- test/_runner.js | 2 +- test/browserField.test.js | 59 +++++++++++++------------ test/fileURLToPath.test.js | 4 +- test/incorrect-description-file.test.js | 12 ++--- test/smoke/browser-entry.cjs | 34 +++++++------- test/smoke/browser-playwright.cjs | 5 +++ test/smoke/browser-run.cjs | 5 +++ test/uint8array-fs.test.js | 18 ++++---- test/yield.test.js | 4 +- 10 files changed, 81 insertions(+), 77 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 56cf1aa9..357d9398 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -24,20 +24,17 @@ export default defineConfig([ }, { // Cross-runtime smoke scripts run standalone on node/bun/deno and in a - // browser sandbox; relax library-grade rules and the `engines.node` - // version checks (these files target newer runtimes by design). Mirrors - // the relaxations the shared config used to apply via the jest plugin. + // browser sandbox; relax library-grade JSDoc rules, allow console + // output (they're CLI scripts) and skip the `engines.node` version + // checks (these files target newer runtimes by design). files: ["test/smoke/**/*"], rules: { "jsdoc/no-restricted-syntax": "off", "jsdoc/reject-any-type": "off", - "jsdoc/no-blank-blocks": "off", - "jsdoc/require-jsdoc": "off", "unicorn/prefer-native-coercion-functions": "off", "n/no-unsupported-features/es-builtins": "off", "n/no-unsupported-features/es-syntax": "off", "n/no-unsupported-features/node-builtins": "off", - "id-length": "off", "no-console": "off", }, }, @@ -45,15 +42,9 @@ export default defineConfig([ // The test suite relies on `node:test` and modern `node:assert` helpers, // which are newer than the `engines.node` range the published library // targets. Tests are dev-only, so the builtin version check does not apply. - // The relaxed core rules mirror the defaults the shared config previously - // applied to test files. files: ["test/*.js"], rules: { "n/no-unsupported-features/node-builtins": "off", - "id-length": "off", - "no-console": "off", - "no-eval": "off", - "no-control-regex": "off", }, }, ]); diff --git a/test/_runner.js b/test/_runner.js index cea81b03..2dc48174 100644 --- a/test/_runner.js +++ b/test/_runner.js @@ -62,7 +62,7 @@ if (typeof jest === "undefined") { return fn.call(this, {}, done); } : fn; - const named = (g) => (name, fn) => g(name, wrap(fn)); + const named = (register) => (name, fn) => register(name, wrap(fn)); module.exports = { describe: global.describe, diff --git a/test/browserField.test.js b/test/browserField.test.js index 51f484b9..a13cc053 100644 --- a/test/browserField.test.js +++ b/test/browserField.test.js @@ -13,7 +13,7 @@ const browserModule = path.join(__dirname, "fixtures", "browser-module"); * @param {string[]} args args * @returns {string} path */ -function p(...args) { +function pp(...args) { return path.join(browserModule, ...args); } @@ -34,7 +34,7 @@ describe("browserField", () => { }); it("should ignore", (t, done) => { - resolver.resolve({}, p(), "./lib/ignore", {}, (err, result) => { + resolver.resolve({}, pp(), "./lib/ignore", {}, (err, result) => { if (err) throw err; assert.strictEqual(result, false); done(); @@ -42,71 +42,74 @@ describe("browserField", () => { }); it("should ignore #2", () => { - assert.strictEqual(resolver.resolveSync({}, p(), "./lib/ignore"), false); - assert.strictEqual(resolver.resolveSync({}, p(), "./lib/ignore.js"), false); - assert.strictEqual(resolver.resolveSync({}, p("lib"), "./ignore"), false); + assert.strictEqual(resolver.resolveSync({}, pp(), "./lib/ignore"), false); assert.strictEqual( - resolver.resolveSync({}, p("lib"), "./ignore.js"), + resolver.resolveSync({}, pp(), "./lib/ignore.js"), + false, + ); + assert.strictEqual(resolver.resolveSync({}, pp("lib"), "./ignore"), false); + assert.strictEqual( + resolver.resolveSync({}, pp("lib"), "./ignore.js"), false, ); }); it("should replace a file", () => { assert.deepStrictEqual( - resolver.resolveSync({}, p(), "./lib/replaced"), - p("lib", "browser.js"), + resolver.resolveSync({}, pp(), "./lib/replaced"), + pp("lib", "browser.js"), ); assert.deepStrictEqual( - resolver.resolveSync({}, p(), "./lib/replaced.js"), - p("lib", "browser.js"), + resolver.resolveSync({}, pp(), "./lib/replaced.js"), + pp("lib", "browser.js"), ); assert.deepStrictEqual( - resolver.resolveSync({}, p("lib"), "./replaced"), - p("lib", "browser.js"), + resolver.resolveSync({}, pp("lib"), "./replaced"), + pp("lib", "browser.js"), ); assert.deepStrictEqual( - resolver.resolveSync({}, p("lib"), "./replaced.js"), - p("lib", "browser.js"), + resolver.resolveSync({}, pp("lib"), "./replaced.js"), + pp("lib", "browser.js"), ); }); it("should replace a module with a file", () => { assert.deepStrictEqual( - resolver.resolveSync({}, p(), "module-a"), - p("browser", "module-a.js"), + resolver.resolveSync({}, pp(), "module-a"), + pp("browser", "module-a.js"), ); assert.deepStrictEqual( - resolver.resolveSync({}, p("lib"), "module-a"), - p("browser", "module-a.js"), + resolver.resolveSync({}, pp("lib"), "module-a"), + pp("browser", "module-a.js"), ); }); it("should replace a module with a module", () => { assert.deepStrictEqual( - resolver.resolveSync({}, p(), "module-b"), - p("node_modules", "module-c.js"), + resolver.resolveSync({}, pp(), "module-b"), + pp("node_modules", "module-c.js"), ); assert.deepStrictEqual( - resolver.resolveSync({}, p("lib"), "module-b"), - p("node_modules", "module-c.js"), + resolver.resolveSync({}, pp("lib"), "module-b"), + pp("node_modules", "module-c.js"), ); }); it("should resolve in nested property", () => { assert.deepStrictEqual( - resolver.resolveSync({}, p(), "./lib/main1.js"), - p("lib", "main.js"), + resolver.resolveSync({}, pp(), "./lib/main1.js"), + pp("lib", "main.js"), ); assert.deepStrictEqual( - resolver.resolveSync({}, p(), "./lib/main2.js"), - p("lib", "browser.js"), + resolver.resolveSync({}, pp(), "./lib/main2.js"), + pp("lib", "browser.js"), ); }); it("should check only alias field properties", () => { assert.deepStrictEqual( - resolver.resolveSync({}, p(), "./toString"), - p("lib", "toString.js"), + resolver.resolveSync({}, pp(), "./toString"), + pp("lib", "toString.js"), ); }); diff --git a/test/fileURLToPath.test.js b/test/fileURLToPath.test.js index 26fd58d8..99b026c1 100644 --- a/test/fileURLToPath.test.js +++ b/test/fileURLToPath.test.js @@ -57,8 +57,8 @@ describe("fileURLToPath", () => { it("round-trips pathToFileURL on the host platform", () => { // Build a host-absolute path so the round-trip is correct on Windows // (drive letter) as well as POSIX, using the host-default platform branch. - const p = path.resolve("a b", "c"); - assert.strictEqual(fileURLToPath(pathToFileURL(p)), p); + const pth = path.resolve("a b", "c"); + assert.strictEqual(fileURLToPath(pathToFileURL(pth)), pth); }); it("throws for a non-file: scheme", () => { diff --git a/test/incorrect-description-file.test.js b/test/incorrect-description-file.test.js index bb73417e..c636ce00 100644 --- a/test/incorrect-description-file.test.js +++ b/test/incorrect-description-file.test.js @@ -14,7 +14,7 @@ const nodeFileSystem = new CachedInputFileSystem(fs, 4000); * @param {string[]} args args * @returns {string} paths */ -function p(...args) { +function pp(...args) { return path.join(fixtures, ...args); } @@ -32,11 +32,11 @@ describe("incorrect description file", () => { called = true; }, }; - resolver.resolve({}, p("pack1"), ".", ctx, (err, _result) => { + resolver.resolve({}, pp("pack1"), ".", ctx, (err, _result) => { if (!err) return done(new Error("No error")); assert.ok(err instanceof Error); assert.strictEqual( - ctx.fileDependencies.has(p("pack1", "package.json")), + ctx.fileDependencies.has(pp("pack1", "package.json")), true, ); assert.strictEqual(called, true); @@ -52,10 +52,10 @@ describe("incorrect description file", () => { called = true; }, }; - resolver.resolve({}, p("pack2"), ".", ctx, (err, _result) => { + resolver.resolve({}, pp("pack2"), ".", ctx, (err, _result) => { if (!err) return done(new Error("No error")); assert.strictEqual( - ctx.fileDependencies.has(p("pack2", "package.json")), + ctx.fileDependencies.has(pp("pack2", "package.json")), true, ); assert.strictEqual(called, true); @@ -64,7 +64,7 @@ describe("incorrect description file", () => { }); it("should not resolve main in incorrect description file #3", (t, done) => { - resolver.resolve({}, p("pack2"), ".", {}, (err, _result) => { + resolver.resolve({}, pp("pack2"), ".", {}, (err, _result) => { if (!err) return done(new Error("No error")); assert.ok(err instanceof Error); done(); diff --git a/test/smoke/browser-entry.cjs b/test/smoke/browser-entry.cjs index 0154f10b..8cbddc71 100644 --- a/test/smoke/browser-entry.cjs +++ b/test/smoke/browser-entry.cjs @@ -45,35 +45,35 @@ function createMemoryAsyncFs(fileMap) { }); /** - * @param {string} p path + * @param {string} pth path * @param {string} code error code * @returns {Error} an errno error */ - const fsError = (p, code) => { - const err = /** @type {NodeJS.ErrnoException} */ (new Error(`${code}: ${p}`)); + const fsError = (pth, code) => { + const err = /** @type {NodeJS.ErrnoException} */ (new Error(`${code}: ${pth}`)); err.code = code; - err.path = p; + err.path = pth; return err; }; - const statImpl = (p) => { - if (files.has(p)) return makeStats(true); - if (dirs.has(p)) return makeStats(false); - throw fsError(p, "ENOENT"); + const statImpl = (pth) => { + if (files.has(pth)) return makeStats(true); + if (dirs.has(pth)) return makeStats(false); + throw fsError(pth, "ENOENT"); }; - const readFileImpl = (p) => { - if (!files.has(p)) throw fsError(p, "ENOENT"); + const readFileImpl = (pth) => { + if (!files.has(pth)) throw fsError(pth, "ENOENT"); // Return Uint8Array (not a Node Buffer) to mirror a browser FS and // exercise the runtime-agnostic decode path in lib/util/fs.js. - return new TextEncoder().encode(/** @type {string} */ (files.get(p))); + return new TextEncoder().encode(/** @type {string} */ (files.get(pth))); }; - const readdirImpl = (p) => { - const prefix = p === "/" ? "/" : `${p}/`; + const readdirImpl = (pth) => { + const prefix = pth === "/" ? "/" : `${pth}/`; const names = new Set(); for (const entry of [...files.keys(), ...dirs]) { - if (entry.startsWith(prefix) && entry !== p) { + if (entry.startsWith(prefix) && entry !== pth) { const [seg] = entry.slice(prefix.length).split("/"); if (seg) names.add(seg); } @@ -81,9 +81,9 @@ function createMemoryAsyncFs(fileMap) { return [...names]; }; - const readlinkImpl = (p) => { + const readlinkImpl = (pth) => { // Nothing is a symlink in this FS. - throw fsError(p, "EINVAL"); + throw fsError(pth, "EINVAL"); }; // Wrap a synchronous implementation as an async, callback-style fs method @@ -110,7 +110,7 @@ function createMemoryAsyncFs(fileMap) { readFile: toAsync(readFileImpl), readdir: toAsync(readdirImpl), readlink: toAsync(readlinkImpl), - realpath: toAsync((p) => p), + realpath: toAsync((pth) => pth), }; } diff --git a/test/smoke/browser-playwright.cjs b/test/smoke/browser-playwright.cjs index 647f9c11..e26cd065 100644 --- a/test/smoke/browser-playwright.cjs +++ b/test/smoke/browser-playwright.cjs @@ -46,6 +46,11 @@ function bundle() { }); } +/** + * Bundle the entry, drive it in a headless Chromium page and surface the + * sandbox result through this process's exit code. + * @returns {Promise} resolves on success, rejects on smoke failure + */ async function main() { const code = await bundle(); diff --git a/test/smoke/browser-run.cjs b/test/smoke/browser-run.cjs index 458eb786..cce344d2 100644 --- a/test/smoke/browser-run.cjs +++ b/test/smoke/browser-run.cjs @@ -53,6 +53,11 @@ function bundle() { }); } +/** + * Bundle the entry, execute it in the web-globals VM sandbox and surface + * the sandbox result through this process's exit code. + * @returns {Promise} resolves on success, rejects on smoke failure + */ async function main() { const code = await bundle(); diff --git a/test/uint8array-fs.test.js b/test/uint8array-fs.test.js index c7058c63..65c45fea 100644 --- a/test/uint8array-fs.test.js +++ b/test/uint8array-fs.test.js @@ -42,19 +42,19 @@ describe("Uint8Array file system", () => { isSocket: () => false, }); - const enoent = (p) => { + const enoent = (pth) => { const err = /** @type {NodeJS.ErrnoException} */ ( - new Error(`ENOENT: ${p}`) + new Error(`ENOENT: ${pth}`) ); err.code = "ENOENT"; return err; }; const statSync = (arg) => { - const p = String(arg); - if (files.has(p)) return stat(true); - if (dirs.has(p)) return stat(false); - throw enoent(p); + const pth = String(arg); + if (files.has(pth)) return stat(true); + if (dirs.has(pth)) return stat(false); + throw enoent(pth); }; const fileSystem = { @@ -69,9 +69,9 @@ describe("Uint8Array file system", () => { readdirSync: () => [], // The crux of the test: return a Uint8Array, never a Node Buffer. readFileSync: (arg) => { - const p = String(arg); - if (!files.has(p)) throw enoent(p); - return new TextEncoder().encode(files.get(p)); + const pth = String(arg); + if (!files.has(pth)) throw enoent(pth); + return new TextEncoder().encode(files.get(pth)); }, }; diff --git a/test/yield.test.js b/test/yield.test.js index e74bdc84..3d327604 100644 --- a/test/yield.test.js +++ b/test/yield.test.js @@ -526,7 +526,7 @@ describe("should resolve all aliases", () => { assert.strictEqual(Array.isArray(cache[cacheId]), true); assert.deepStrictEqual( /** @type {ResolveRequest[]} */ - (cache[cacheId]).map((o) => o.path), + (cache[cacheId]).map((req) => req.path), makeFixturePaths(["/a/foo/b", "/a/foo-2/b"]), ); done(); @@ -569,7 +569,7 @@ describe("should resolve all aliases", () => { assert.strictEqual(Array.isArray(cache[cacheId]), true); assert.deepStrictEqual( /** @type {ResolveRequest[]} */ - (cache[cacheId]).map((o) => o.path), + (cache[cacheId]).map((req) => req.path), [false], ); done(); From 6a443de20014f74b85f6aa56e666fbe49b3d6f9d Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Tue, 9 Jun 2026 18:03:26 +0000 Subject: [PATCH 08/12] test: fix the bun and deno cross-runtime jobs - The bridge shim was exposing `.skip`/`.only` on `it`/`test` for the jest branch even though the suite never uses them (`describe.skip` is the only host-level skip, on dos-device-paths). Bun does not expose `.skip` as a property of `global.it`, so the eager `global.it.skip` lookup threw `undefined is not an object` before any test could run, failing all 44 files. Drop the unused surface; the runtime's own `describe` is passed through unchanged so `describe.skip` still works. - jest is no longer a project dev-dep, so the deno job's hard-coded `node_modules/jest/bin/jest.js` no longer exists. Install jest@^30 ad-hoc, mirroring the legacy-test job's approach. --- .github/workflows/cross-runtime.yml | 7 +++++++ test/_runner.js | 17 +++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/.github/workflows/cross-runtime.yml b/.github/workflows/cross-runtime.yml index fa3c44a7..c814f343 100644 --- a/.github/workflows/cross-runtime.yml +++ b/.github/workflows/cross-runtime.yml @@ -49,6 +49,13 @@ jobs: env: HUSKY: "0" + # jest is no longer a project dev-dep (the Node.js test runner is used + # instead), so install it ad-hoc just for this job. The bridge shim + # (`test/_runner.js`) adapts the suite to jest's globals exactly as it + # does on the legacy-test matrix. + - name: Install jest + run: npm install --no-save --no-package-lock --no-audit jest@^30 + - name: Use Deno uses: denoland/setup-deno@667a34cdef165d8d2b2e98dde39547c9daac7282 # v2.0.4 with: diff --git a/test/_runner.js b/test/_runner.js index 2dc48174..e75e85e0 100644 --- a/test/_runner.js +++ b/test/_runner.js @@ -65,15 +65,16 @@ if (typeof jest === "undefined") { const named = (register) => (name, fn) => register(name, wrap(fn)); module.exports = { + // `describe.skip` is the only host-level skip the suite uses + // (dos-device-paths on non-Windows), and jest, bun and node:test all + // expose `.skip` on the `describe` object itself, so passing the + // runtime's `describe` through unchanged is enough. `it`/`test` are + // only wrapped to bridge the `(t, done)` callback signature; no + // `.skip`/`.only` is exposed because the suite does not use them + // (and bun, in particular, does not put `.skip` on `global.it`). describe: global.describe, - it: Object.assign(named(global.it), { - skip: named(global.it.skip), - only: named(global.it.only), - }), - test: Object.assign(named(global.test), { - skip: named(global.test.skip), - only: named(global.test.only), - }), + it: named(global.it), + test: named(global.test), before: global.beforeAll, after: global.afterAll, beforeEach: global.beforeEach, From c9a5820e9460b6b452f7962d6b9016b044a3b666 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Tue, 9 Jun 2026 18:20:23 +0000 Subject: [PATCH 09/12] test: source the bridge helpers from `bun:test` when running on Bun MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bun defines the `jest` compat global (so the bridge picks the jest branch) but does *not* mirror jest's `describe`/`it`/etc. on `global` — they're only reachable through `require("bun:test")`. The shim was looking up `global.describe` and got `undefined`, which made the destructure in every test file return undefined helpers and crashed all 44 files. Switch the source object to `bun:test` when `Bun` is defined; the jest-on-Node branch keeps using `global`. --- test/_runner.js | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/test/_runner.js b/test/_runner.js index e75e85e0..2431e3c2 100644 --- a/test/_runner.js +++ b/test/_runner.js @@ -11,9 +11,11 @@ // is no longer reachable, and the `assert.match`/`doesNotMatch` polyfills // (needed only on Node.js < 13.6) become dead code. -// Bridge between `node:test` and jest so a single test source runs on: +// Bridge between `node:test` and jest-compatible runners so a single test +// source runs on: // - Node.js 18+ via the built-in `node --test` runner. // - Legacy Node.js (10-16) via jest, which doesn't ship `node:test`. +// - Bun via its built-in jest-compatible runner. // The runtime is auto-detected by the presence of jest's `jest` global. const assert = require("assert"); @@ -55,7 +57,7 @@ if (typeof jest === "undefined") { } else { // jest's callback-style test function takes `(done)`; node:test passes // `(t, done)`. The migrated tests use the node:test shape, so wrap to - // inject a throwaway `t` when jest invokes the function. + // inject a throwaway `t` when the jest-compatible runner invokes them. const wrap = (fn) => typeof fn === "function" && fn.length >= 2 ? function bridged(done) { @@ -64,20 +66,30 @@ if (typeof jest === "undefined") { : fn; const named = (register) => (name, fn) => register(name, wrap(fn)); + // jest in Node.js attaches its helpers to `global`; Bun exposes them + // only through the `bun:test` module (Bun defines the `jest` compat global + // but does *not* mirror jest's helpers on `global`). Source from the + // place that actually has them. + const source = + typeof Bun === "undefined" + ? global + : // eslint-disable-next-line import/no-unresolved + require("bun:test"); + module.exports = { // `describe.skip` is the only host-level skip the suite uses - // (dos-device-paths on non-Windows), and jest, bun and node:test all - // expose `.skip` on the `describe` object itself, so passing the - // runtime's `describe` through unchanged is enough. `it`/`test` are - // only wrapped to bridge the `(t, done)` callback signature; no - // `.skip`/`.only` is exposed because the suite does not use them - // (and bun, in particular, does not put `.skip` on `global.it`). - describe: global.describe, - it: named(global.it), - test: named(global.test), - before: global.beforeAll, - after: global.afterAll, - beforeEach: global.beforeEach, - afterEach: global.afterEach, + // (dos-device-paths on non-Windows). jest, Bun and node:test all + // expose `.skip` on the `describe` object itself, so passing it + // through unchanged is enough. `it`/`test` are only wrapped to bridge + // the `(t, done)` callback signature; no `.skip`/`.only` is exposed + // because the suite does not use them (and Bun does not put `.skip` + // on its `it` global). + describe: source.describe, + it: named(source.it), + test: named(source.test), + before: source.beforeAll, + after: source.afterAll, + beforeEach: source.beforeEach, + afterEach: source.afterEach, }; } From d00eaee8c7ad5a0034d2e31a49d73b441b266294 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Tue, 9 Jun 2026 19:26:33 +0000 Subject: [PATCH 10/12] test: detect Bun first in the runner bridge Bun does not define the `jest` global, so the bridge was hitting the `typeof jest === "undefined"` branch and loading `node:test`. Bun ships its own partial `node:test` implementation that errors on top-level `describe()` (\"describe() inside another test() is not yet implemented\") and behaves differently from Node on a handful of tests (alias, simple, symlink). Detect `Bun` first and source the helpers from `bun:test` unconditionally on that runtime; the jest-on-Node path stays the same. Also restructure the wrap into module-level arrows so the jsdoc rules don't fight a typed function declaration in a `@ts-nocheck` file. --- test/_runner.js | 73 ++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 38 deletions(-) diff --git a/test/_runner.js b/test/_runner.js index 2431e3c2..0cf8febc 100644 --- a/test/_runner.js +++ b/test/_runner.js @@ -52,44 +52,41 @@ if (typeof assert.doesNotMatch !== "function") { }; } -if (typeof jest === "undefined") { +// Adapt a jest-shaped helper bag (jest's globals or `bun:test`) to the +// node:test surface the test files use. jest-style callbacks take `(done)`; +// node:test passes `(t, done)`, so wrap to inject a throwaway `t` when the +// jest-compatible runner invokes the test function. `describe` is passed +// through unchanged so `describe.skip` keeps working on every runtime +// (the only host-level skip the suite uses). +const wrap = (fn) => + typeof fn === "function" && fn.length >= 2 + ? function bridged(done) { + return fn.call(this, {}, done); + } + : fn; +const named = (register) => (name, fn) => register(name, wrap(fn)); +const bridge = (source) => ({ + describe: source.describe, + it: named(source.it), + test: named(source.test), + before: source.beforeAll, + after: source.afterAll, + beforeEach: source.beforeEach, + afterEach: source.afterEach, +}); + +// Pick the source of the test helpers based on the runtime: +// - Bun: always use `bun:test`. Bun ships its own (partial) `node:test` +// implementation that throws on top-level `describe()` calls in some +// setups; `bun:test` is the supported entry point. +// - jest (no `Bun` global, `jest` global is in scope): use jest's helpers, +// which jest attaches to `global`. This is the legacy-Node and Deno path. +// - Otherwise: the Node.js built-in `node:test`. +if (typeof Bun !== "undefined") { + // eslint-disable-next-line import/no-unresolved + module.exports = bridge(require("bun:test")); +} else if (typeof jest === "undefined") { module.exports = require("node:test"); } else { - // jest's callback-style test function takes `(done)`; node:test passes - // `(t, done)`. The migrated tests use the node:test shape, so wrap to - // inject a throwaway `t` when the jest-compatible runner invokes them. - const wrap = (fn) => - typeof fn === "function" && fn.length >= 2 - ? function bridged(done) { - return fn.call(this, {}, done); - } - : fn; - const named = (register) => (name, fn) => register(name, wrap(fn)); - - // jest in Node.js attaches its helpers to `global`; Bun exposes them - // only through the `bun:test` module (Bun defines the `jest` compat global - // but does *not* mirror jest's helpers on `global`). Source from the - // place that actually has them. - const source = - typeof Bun === "undefined" - ? global - : // eslint-disable-next-line import/no-unresolved - require("bun:test"); - - module.exports = { - // `describe.skip` is the only host-level skip the suite uses - // (dos-device-paths on non-Windows). jest, Bun and node:test all - // expose `.skip` on the `describe` object itself, so passing it - // through unchanged is enough. `it`/`test` are only wrapped to bridge - // the `(t, done)` callback signature; no `.skip`/`.only` is exposed - // because the suite does not use them (and Bun does not put `.skip` - // on its `it` global). - describe: source.describe, - it: named(source.it), - test: named(source.test), - before: source.beforeAll, - after: source.afterAll, - beforeEach: source.beforeEach, - afterEach: source.afterEach, - }; + module.exports = bridge(global); } From 189a75a36368798c64bbaf699a0763830d6d493c Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Tue, 9 Jun 2026 21:06:06 +0000 Subject: [PATCH 11/12] test: accept Bun's JSON.parse EOF wording in the empty-description-file test Node's `JSON.parse("")` throws "Unexpected end of JSON input"; Bun's throws "Unexpected EOF". The readFile-fallback test only covered Node's wording and the library's "No content in file" sentinel, so it failed on Bun even though the resolver behavior was correct. Add Bun's phrasing as a third accepted alternative. --- test/description-file.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/description-file.test.js b/test/description-file.test.js index 0b82cf36..e2870f00 100644 --- a/test/description-file.test.js +++ b/test/description-file.test.js @@ -49,7 +49,7 @@ describe("description file (readFile fallback)", () => { assert.ok(err instanceof Error); assert.match( /** @type {Error} */ (err).message, - /No content in file|Unexpected end of JSON|Can't resolve/, + /No content in file|Unexpected end of JSON|Unexpected EOF|Can't resolve/, ); done(); }, From bc8eb500c13d5bd130ad6e99587c8087115b5bd1 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Thu, 11 Jun 2026 10:34:12 +0000 Subject: [PATCH 12/12] ci: union the legacy-test and test jobs back into one matrix Splitting them produced new `legacy-test (os, node-version)` status names that existing branch-protection rules don't reference; the matching `test (os, node-version)` rules they were configured for went unused. Merge the two jobs into a single `test` job with the full Node 10-25 x ubuntu/windows/macos matrix and select the install + run steps with `if:` on the matrix `node-version`. Status names match the shape the pre-migration matrix produced, so the existing required checks keep applying. Move the legacy TODO comment from above the dropped `legacy-test:` job to above the conditional legacy install steps and rephrase the file- level TODOs accordingly. --- .github/workflows/test.yml | 72 +++++++++++++++++----------------- jest.config.js | 10 ++--- test/polyfill-text-encoding.js | 2 +- 3 files changed, 43 insertions(+), 41 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ac3e4bed..f5dc2dc6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,31 +24,46 @@ jobs: - run: npm ci - run: npm run lint - # TODO: drop this entire job once `engines.node` is bumped to >= 18. - # Removing the job also makes `jest.config.js`, `test/_runner.js`'s jest - # branch, and `test/polyfill-text-encoding.js` dead code. - # - # The `node:test` based suite needs Node.js 18+. The library itself still - # supports Node.js >= 10.13, so legacy versions run the same test files - # under jest, which the test runner shim (`test/_runner.js`) bridges to - # transparently. jest, memfs and the runtime deps are installed ad-hoc so - # the modern dev toolchain (eslint, typescript, prettier) is never required - # by the legacy matrix. - legacy-test: + test: strategy: fail-fast: false matrix: - os: [ubuntu-latest, windows-latest] - node-version: [10.x, 12.x, 14.x, 16.x] + os: [ubuntu-latest, windows-latest, macos-latest] + node-version: [10.x, 12.x, 14.x, 16.x, 18.x, 20.x, 22.x, 24.x, 25.x] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + # macOS arm64 runners don't ship Node.js 10/12/14, so force x64. + - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + id: calculate_architecture + with: + result-encoding: string + script: | + if ('${{ matrix.os }}' === 'macos-latest' && ('${{ matrix['node-version'] }}' === '10.x' || '${{ matrix['node-version'] }}' === '12.x' || '${{ matrix['node-version'] }}' === '14.x')) { + return "x64" + } else { + return '' + } + - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: ${{ matrix.node-version }} + architecture: ${{ steps.calculate_architecture.outputs.result }} + # Legacy Node (10-16) reinstalls deps after dropping the lockfile, + # so there's nothing for setup-node's npm cache to key on. + cache: ${{ (matrix.node-version == '10.x' || matrix.node-version == '12.x' || matrix.node-version == '14.x' || matrix.node-version == '16.x') && '' || 'npm' }} + # TODO: drop the legacy install + jest steps below once `engines.node` + # is bumped to >= 18. That also makes `jest.config.js`, the jest branch + # of `test/_runner.js`, and `test/polyfill-text-encoding.js` dead code. + # + # The `node:test` based suite needs Node.js 18+; the library itself + # still supports Node.js >= 10.13, so legacy versions run the same test + # files under jest via the runner shim (`test/_runner.js`). jest, memfs + # and the runtime deps are installed ad-hoc so the modern dev toolchain + # (eslint, typescript, prettier) is never required by the legacy leg. - name: Install jest (Node 10) if: matrix.node-version == '10.x' shell: bash @@ -58,7 +73,7 @@ jobs: yarn add -D jest@^27 memfs@^3 --ignore-scripts --ignore-engines - name: Install jest (Node 12-16) - if: matrix.node-version != '10.x' + if: matrix.node-version == '12.x' || matrix.node-version == '14.x' || matrix.node-version == '16.x' shell: bash run: | rm -f package-lock.json @@ -66,40 +81,27 @@ jobs: npm install -g npm@7 npm install -D jest@^27 memfs@^3 --ignore-scripts --no-audit --prefer-offline --no-save --no-package-lock - - name: Run jest - run: npx jest --ci - test: - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-latest, macos-latest] - node-version: [18.x, 20.x, 22.x, 24.x, 25.x] - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: ${{ matrix.node-version }} - cache: npm - - name: Install dependencies + if: matrix.node-version != '10.x' && matrix.node-version != '12.x' && matrix.node-version != '14.x' && matrix.node-version != '16.x' run: npm ci + - name: Run tests (legacy via jest) + if: matrix.node-version == '10.x' || matrix.node-version == '12.x' || matrix.node-version == '14.x' || matrix.node-version == '16.x' + run: npx jest --ci + # The built-in coverage lcov reporter and `--test-coverage-include` are - # only available on Node.js 22+, so older versions run the suite without + # only available on Node.js 22+, so 18/20 run the suite without # collecting coverage. - name: Run tests if: matrix.node-version == '18.x' || matrix.node-version == '20.x' run: npm run test:only - name: Run tests with coverage - if: matrix.node-version != '18.x' && matrix.node-version != '20.x' + if: matrix.node-version == '22.x' || matrix.node-version == '24.x' || matrix.node-version == '25.x' run: npm run test:coverage - uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 - if: matrix.node-version != '18.x' && matrix.node-version != '20.x' + if: matrix.node-version == '22.x' || matrix.node-version == '24.x' || matrix.node-version == '25.x' with: files: ./coverage/lcov.info flags: integration diff --git a/jest.config.js b/jest.config.js index 3144065e..0095b48b 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,11 +1,11 @@ "use strict"; -// TODO: drop this file together with `test/_runner.js`'s jest branch once -// `engines.node` is bumped to >= 18 and the `legacy-test` CI job goes away. +// TODO: drop this file together with `test/_runner.js`'s jest branch and the +// legacy-only steps in the `test` CI job once `engines.node` is bumped to >= 18. -// Jest config is only consumed by the legacy CI matrix (Node.js < 18) where -// `node:test` is not available. Modern runs use `node --test` via -// scripts/test.js and ignore this file. +// Jest config is only consumed by the legacy leg of the test matrix +// (Node.js < 18) where `node:test` is not available. Modern runs use +// `node --test` via scripts/test.js and ignore this file. module.exports = { roots: ["/test"], moduleFileExtensions: ["js", "mjs", "cjs", "ts"], diff --git a/test/polyfill-text-encoding.js b/test/polyfill-text-encoding.js index 60470bed..4e04a82c 100644 --- a/test/polyfill-text-encoding.js +++ b/test/polyfill-text-encoding.js @@ -2,7 +2,7 @@ // TODO: drop this file once `engines.node` is bumped to >= 11. It is a no-op // on every supported runtime today and only exists for the Node.js 10 leg of -// the legacy-test CI matrix. +// the test CI matrix. // Node 10 lacks the global TextEncoder/TextDecoder that browsers, Deno, Bun and // Node >= 11 provide; expose them from `util` so the suite (and the library's