diff --git a/.github/apt.conf b/.github/apt.conf new file mode 100644 index 0000000000..2150f97d4d --- /dev/null +++ b/.github/apt.conf @@ -0,0 +1,5 @@ +// fail fast instead of hanging on unresponsive mirrors +Acquire::Retries "0"; +Acquire::http::Timeout "10"; +Acquire::https::Timeout "10"; +quiet "2"; diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 23008c3d31..c6fa222447 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,38 +6,24 @@ updates: directory: '/' schedule: interval: 'weekly' + # Vite+ and the packages it keeps aligned are updated with `vp migrate`: + # https://viteplus.dev/guide/upgrade-project + ignore: + - dependency-name: 'vite-plus' + - dependency-name: 'vite' + - dependency-name: '@voidzero-dev/*' + - dependency-name: 'vitest' + - dependency-name: '@vitest/*' groups: typescript: patterns: - 'typescript' - build-tooling: - patterns: - - 'vite' - - '@vitejs/*' - - 'vitest' - - 'vitest-*' - - '@vitest/*' - - 'tsdown' - - '@tsdown/*' - - 'playwright' - exclude-patterns: - - '@vitest/eslint-plugin' - quality: - patterns: - - 'eslint' - - '@eslint/*' - - 'oxfmt' - - 'oxlint' - - 'oxlint-*' react: patterns: - 'react' - 'react-dom' - '@types/react' - '@types/react-dom' - tanstack: - patterns: - - '@tanstack/*' # everything else: single PR for minor/patch bumps, # majors still land individually dependencies: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a337551d80..a72eddbde0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,80 +1,106 @@ name: CI + on: push: branches: - main pull_request: +permissions: {} + +cache-mode: none + +env: + FORCE_COLOR: 1 + jobs: test: runs-on: ubuntu-latest timeout-minutes: 10 - steps: - - uses: actions/checkout@v7 - - uses: actions/setup-node@v7 - with: - node-version-file: 'package.json' - check-latest: true + permissions: + contents: read # check out the repository - - name: Install dependencies - run: npm ci + # restore and save the Vite Task cache + cache-mode: write - - name: Lint - run: | - node --run lint - node --run lint:md + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false - - name: Format - run: node --run format:check + - uses: voidzero-dev/setup-vp@3754dd7dbdb32bd8f6d28b6043de13ad3a75f21f # v1.21.1 + with: + cache: true + cache-save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + run-install: false - - name: Build lib - run: node --run build + - run: vp install --frozen-lockfile - - name: Build website - run: node --run build:website + # https://viteplus.dev/guide/github-actions-cache + - name: Restore Vite Task cache + id: vite-task-cache + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + path: node_modules/.vite/task-cache + key: vite-task-${{ runner.os }}-${{ runner.arch }}-${{ github.run_id }}-${{ github.run_attempt }} + restore-keys: vite-task-${{ runner.os }}-${{ runner.arch }}- - - name: Check routeTree.gen.ts - run: git diff --exit-code website/routeTree.gen.ts + # Vite Task compares directory listings with those recorded after the cached run, + # so directories created during the run must exist upfront for the cache to hit: + # https://github.com/voidzero-dev/vite-task/issues/504 + - run: mkdir lib coverage node_modules/.vite-temp - - name: Install Playwright Browsers - run: | - sudo tee /etc/apt/apt.conf.d/99-ci >/dev/null <<'EOF' - Acquire::Retries "0"; - Acquire::http::Timeout "10"; - Acquire::https::Timeout "10"; - EOF - npx playwright install chromium firefox webkit --with-deps --no-shell - timeout-minutes: 2 + - run: vp run -v ci + timeout-minutes: 6 - - name: Test - run: node --run test:ci - timeout-minutes: 4 + - name: Save Vite Task cache + if: success() + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + path: node_modules/.vite/task-cache + key: ${{ steps.vite-task-cache.outputs.cache-primary-key }} - name: Upload test failure artifacts if: failure() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: test-artifacts path: .vitest/attachments/** + # `.vitest` is a hidden directory + include-hidden-files: true if-no-files-found: ignore - name: Upload coverage - uses: codecov/codecov-action@v7 + uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1 with: token: ${{ secrets.CODECOV_TOKEN }} - - name: Deploy gh-pages + - name: Upload website if: github.event_name == 'push' && github.ref == 'refs/heads/main' - run: | - git config --global user.email 'action@github.com' - git config --global user.name 'GitHub Action' - git fetch origin gh-pages - git worktree add gh-pages gh-pages - cd gh-pages - git rm -r . - mv ../dist/* . - touch .nojekyll - git add . - git commit -m "gh-pages deployment" || echo "Nothing to commit" - git push -f https://comcast:${{secrets.GITHUB_TOKEN}}@github.com/Comcast/react-data-grid.git + uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0 + with: + path: dist + + deploy: + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + needs: test + runs-on: ubuntu-latest + timeout-minutes: 5 + + permissions: + pages: write # deploy to GitHub Pages + id-token: write # verify the deployment originates from this workflow + + # one deployment at a time, never cancel one midway + concurrency: + group: pages + cancel-in-progress: false + + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + steps: + - id: deployment + uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5.0.1 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index df7403efd0..c7bc2f0baa 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,73 +8,62 @@ on: required: true type: string +permissions: {} + +cache-mode: none + +env: + FORCE_COLOR: 1 + +# never run two publishes at once, and never cancel one midway +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: false + jobs: publish: + if: github.ref == 'refs/heads/main' runs-on: ubuntu-latest timeout-minutes: 10 + permissions: - contents: write - id-token: write + contents: write # push the version tag and create the GitHub release + id-token: write # npm trusted publishing + + env: + VERSION: ${{ inputs.version }} steps: - - uses: actions/checkout@v7 + # credentials are persisted to push the version tag + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - - uses: actions/setup-node@v7 + - uses: voidzero-dev/setup-vp@3754dd7dbdb32bd8f6d28b6043de13ad3a75f21f # v1.21.1 with: - node-version-file: 'package.json' - check-latest: true + run-install: false registry-url: 'https://registry.npmjs.org' - - name: Install dependencies - run: npm ci - - - name: Lint - run: | - node --run lint - node --run lint:md - - - name: Format - run: node --run format:check - - - name: Build lib - run: node --run build - - - name: Build website - run: node --run build:website - - - name: Check routeTree.gen.ts - run: git diff --exit-code website/routeTree.gen.ts - - - name: Install Playwright Browsers - run: | - sudo tee /etc/apt/apt.conf.d/99-ci >/dev/null <<'EOF' - Acquire::Retries "0"; - Acquire::http::Timeout "10"; - Acquire::https::Timeout "10"; - EOF - npx playwright install chromium firefox webkit --with-deps --no-shell - timeout-minutes: 2 - - - name: Test - run: node --run test:ci - timeout-minutes: 4 + - run: vp install --frozen-lockfile + # before `vp run ci`, so `vp pack` prefixes classes with the new version - name: Update version run: | - git config user.name "${{ github.actor }}" - git config user.email "${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com" - npm version ${{ inputs.version }} + git config user.name "$GITHUB_ACTOR" + git config user.email "$GITHUB_ACTOR_ID+$GITHUB_ACTOR@users.noreply.github.com" + npm version "$VERSION" + + - run: vp run ci + timeout-minutes: 6 # https://docs.npmjs.com/trusted-publishers - name: Publish to npm run: npm publish --tag latest - name: Push tag - run: git push origin v${{ inputs.version }} + run: git push origin "v$VERSION" - name: Create GitHub Release - run: gh release create v${{ inputs.version }} --title "v${{ inputs.version }}" --generate-notes + run: gh release create "v$VERSION" --title "v$VERSION" --generate-notes env: GH_TOKEN: ${{ github.token }} diff --git a/.github/workflows/update-screenshots.yml b/.github/workflows/update-screenshots.yml index 3893fcfcd9..2ea8699665 100644 --- a/.github/workflows/update-screenshots.yml +++ b/.github/workflows/update-screenshots.yml @@ -5,6 +5,13 @@ on: types: [labeled] workflow_dispatch: +permissions: {} + +cache-mode: none + +env: + FORCE_COLOR: 1 + jobs: update-screenshots: if: ${{ github.event.label.name == 'Update Screenshots' || github.event_name == 'workflow_dispatch' }} @@ -12,23 +19,23 @@ jobs: timeout-minutes: 10 permissions: - contents: write - pull-requests: write + contents: write # push the new screenshots + pull-requests: write # remove the label # one at a time per branch concurrency: - group: update-screenshots@${{ github.head_ref }} + group: update-screenshots@${{ github.head_ref || github.ref }} cancel-in-progress: true steps: - - uses: actions/checkout@v7 + # credentials are persisted to push the new screenshots + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.head_ref }} - - uses: actions/setup-node@v7 + - uses: voidzero-dev/setup-vp@3754dd7dbdb32bd8f6d28b6043de13ad3a75f21f # v1.21.1 with: - node-version-file: 'package.json' - check-latest: true + run-install: false - name: Remove label if: github.event_name == 'pull_request' @@ -36,29 +43,17 @@ jobs: env: GH_TOKEN: ${{ github.token }} - - name: Install dependencies - run: npm ci + - run: vp install --frozen-lockfile - - name: Install Playwright Browsers - run: | - sudo tee /etc/apt/apt.conf.d/99-ci >/dev/null <<'EOF' - Acquire::Retries "0"; - Acquire::http::Timeout "10"; - Acquire::https::Timeout "10"; - EOF - npx playwright install chromium firefox webkit --with-deps --no-shell - timeout-minutes: 2 + - run: rm -r test/**/screenshots/** - - name: Update screenshots - run: | - rm -r test/**/screenshots/** - node --run test:ci:update + - run: vp run test test/visual --update timeout-minutes: 4 - name: Push new screenshots run: | - git config user.name "${{ github.actor }}" - git config user.email "${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com" + git config user.name "$GITHUB_ACTOR" + git config user.email "$GITHUB_ACTOR_ID+$GITHUB_ACTOR@users.noreply.github.com" git add "test/**/screenshots/**" git diff-index --quiet HEAD || git commit -m "Update screenshots" git push diff --git a/.oxfmtrc.json b/.oxfmtrc.json deleted file mode 100644 index a85ef2fcc6..0000000000 --- a/.oxfmtrc.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "$schema": "./node_modules/oxfmt/configuration_schema.json", - "ignorePatterns": ["/website/routeTree.gen.ts"], - "singleQuote": true, - "trailingComma": "none", - "sortImports": { - "customGroups": [ - { - "groupName": "react", - "elementNamePattern": ["react", "react/**", "react-dom", "react-dom/**"] - }, - { - "groupName": "ecij", - "elementNamePattern": ["ecij"] - }, - { - "groupName": "clsx", - "elementNamePattern": ["clsx"] - }, - { - "groupName": "./src", - "elementNamePattern": ["**/src", "**/src/**"] - }, - { - "groupName": "./renderers", - "elementNamePattern": ["**/renderers", "**/renderers/**"] - }, - { - "groupName": "./components", - "elementNamePattern": ["**/components", "**/components/**"] - }, - { - "groupName": "./hooks", - "elementNamePattern": ["**/hooks", "**/hooks/**"] - }, - { - "groupName": "./utils", - "elementNamePattern": ["**/utils", "**/utils/**"] - }, - { - "groupName": "./types", - "elementNamePattern": ["**/types", "**/types/**"] - } - ], - "groups": [ - "side_effect_style", - "side_effect", - { "newlinesBetween": true }, - "builtin", - "react", - "external", - "ecij", - "clsx", - { "newlinesBetween": true }, - "./src", - "./renderers", - "./components", - "./hooks", - "./utils", - "./types", - "index", - "sibling", - "parent", - "unknown" - ], - "newlinesBetween": false - } -} diff --git a/.oxlintrc.json b/.oxlintrc.json deleted file mode 100644 index df8dbe9a0b..0000000000 --- a/.oxlintrc.json +++ /dev/null @@ -1,747 +0,0 @@ -{ - "$schema": "./node_modules/oxlint/configuration_schema.json", - - "plugins": ["eslint", "oxc", "react", "typescript", "unicorn", "vitest"], - - "options": { - "denyWarnings": true, - "reportUnusedDisableDirectives": "warn", - "respectEslintDisableDirectives": false, - "typeAware": true, - "typeCheck": true - }, - - "env": { - "builtin": true - }, - - "ignorePatterns": ["/website/routeTree.gen.ts"], - - // https://oxc.rs/docs/guide/usage/linter/rules.html - /* -// copy all the rules from the rules table for easy pasting -const groups = new Set(['eslint', 'oxc', 'react', 'typescript', 'unicorn', 'vitest']); -copy( - Iterator.from(document.querySelectorAll('tbody tr')) - .map((row) => [ - row.children[1].textContent, - row.querySelector(':any-link').textContent - ]) - .filter(([group]) => groups.has(group)) - .map(([group, rule]) => `"${group}/${rule}": "warn",`) - .toArray() - .sort() - .join('\n') -); - */ - "rules": { - "eslint/accessor-pairs": "warn", - "eslint/array-callback-return": ["warn", { "checkForEach": true }], - "eslint/arrow-body-style": "off", - "eslint/block-scoped-var": "warn", - "eslint/capitalized-comments": "off", - "eslint/class-methods-use-this": "warn", - "eslint/complexity": "off", - "eslint/constructor-super": "off", - "eslint/curly": "off", - "eslint/default-case": "warn", - "eslint/default-case-last": "warn", - "eslint/default-param-last": "off", - "eslint/eqeqeq": ["warn", "always", { "null": "ignore" }], - "eslint/for-direction": "warn", - "eslint/func-name-matching": "off", - "eslint/func-names": "off", - "eslint/func-style": "off", - "eslint/getter-return": "warn", - "eslint/grouped-accessor-pairs": ["warn", "getBeforeSet"], - "eslint/guard-for-in": "off", - "eslint/id-denylist": "off", - "eslint/id-length": "off", - "eslint/id-match": "off", - "eslint/init-declarations": "off", - "eslint/logical-assignment-operators": ["warn", "always", { "enforceForIfStatements": true }], - "eslint/max-classes-per-file": "off", - "eslint/max-depth": "off", - "eslint/max-lines": "off", - "eslint/max-lines-per-function": "off", - "eslint/max-nested-callbacks": "off", - "eslint/max-params": "off", - "eslint/max-statements": "off", - "eslint/new-cap": "off", - "eslint/no-alert": "off", - "eslint/no-array-constructor": "warn", - "eslint/no-async-promise-executor": "warn", - "eslint/no-await-in-loop": "off", - "eslint/no-bitwise": "off", - "eslint/no-caller": "warn", - "eslint/no-case-declarations": "warn", - "eslint/no-class-assign": "off", - "eslint/no-compare-neg-zero": "warn", - "eslint/no-cond-assign": "warn", - "eslint/no-console": "warn", - "eslint/no-const-assign": "off", - "eslint/no-constant-binary-expression": "warn", - "eslint/no-constant-condition": "warn", - "eslint/no-constructor-return": "warn", - "eslint/no-continue": "off", - "eslint/no-control-regex": "warn", - "eslint/no-debugger": "warn", - "eslint/no-delete-var": "warn", - "eslint/no-div-regex": "off", - "eslint/no-dupe-class-members": "off", - "eslint/no-dupe-else-if": "warn", - "eslint/no-dupe-keys": "warn", - "eslint/no-duplicate-case": "warn", - "eslint/no-duplicate-imports": "off", - "eslint/no-else-return": ["warn", { "allowElseIf": false }], - "eslint/no-empty": ["warn", { "allowEmptyCatch": true }], - "eslint/no-empty-character-class": "warn", - "eslint/no-empty-function": "off", - "eslint/no-empty-pattern": "warn", - "eslint/no-empty-static-block": "warn", - "eslint/no-eq-null": "off", - "eslint/no-eval": "warn", - "eslint/no-ex-assign": "warn", - "eslint/no-extend-native": "warn", - "eslint/no-extra-bind": "warn", - "eslint/no-extra-boolean-cast": ["warn", { "enforceForLogicalOperands": true }], - "eslint/no-extra-label": "warn", - "eslint/no-fallthrough": ["warn", { "reportUnusedFallthroughComment": true }], - "eslint/no-func-assign": "warn", - "eslint/no-global-assign": "warn", - "eslint/no-implicit-coercion": "off", - "eslint/no-implicit-globals": "off", - "eslint/no-implied-eval": "off", - "eslint/no-import-assign": "warn", - "eslint/no-inline-comments": "off", - "eslint/no-inner-declarations": "off", - "eslint/no-invalid-regexp": "warn", - "eslint/no-irregular-whitespace": "warn", - "eslint/no-iterator": "warn", - "eslint/no-label-var": "warn", - "eslint/no-labels": "warn", - "eslint/no-lone-blocks": "warn", - "eslint/no-lonely-if": "warn", - "eslint/no-loop-func": "off", - "eslint/no-loss-of-precision": "warn", - "eslint/no-magic-numbers": "off", - "eslint/no-misleading-character-class": "warn", - "eslint/no-multi-assign": "off", - "eslint/no-multi-str": "warn", - "eslint/no-negated-condition": "warn", - "eslint/no-nested-ternary": "off", - "eslint/no-new": "warn", - "eslint/no-new-func": "warn", - "eslint/no-new-native-nonconstructor": "warn", - "eslint/no-new-wrappers": "warn", - "eslint/no-nonoctal-decimal-escape": "warn", - "eslint/no-obj-calls": "warn", - "eslint/no-object-constructor": "warn", - "eslint/no-param-reassign": "off", - "eslint/no-plusplus": "off", - "eslint/no-promise-executor-return": "warn", - "eslint/no-proto": "warn", - "eslint/no-prototype-builtins": "warn", - "eslint/no-redeclare": "warn", - "eslint/no-regex-spaces": "warn", - "eslint/no-restricted-exports": "off", - "eslint/no-restricted-globals": [ - "warn", - { "name": "Omit", "message": "Use Omit from types instead." } - ], - "eslint/no-restricted-imports": "off", - "eslint/no-restricted-properties": "off", - "eslint/no-return-assign": "off", - "eslint/no-script-url": "warn", - "eslint/no-self-assign": "warn", - "eslint/no-self-compare": "warn", - "eslint/no-sequences": ["warn", { "allowInParentheses": false }], - "eslint/no-setter-return": "warn", - "eslint/no-shadow": "off", - "eslint/no-shadow-restricted-names": "warn", - "eslint/no-sparse-arrays": "warn", - "eslint/no-template-curly-in-string": "warn", - "eslint/no-ternary": "off", - "eslint/no-this-before-super": "off", - "eslint/no-throw-literal": "off", - "eslint/no-unassigned-vars": "warn", - "eslint/no-undef": "off", - "eslint/no-undefined": "off", - "eslint/no-underscore-dangle": "off", - "eslint/no-unexpected-multiline": "off", - "eslint/no-unmodified-loop-condition": "warn", - "eslint/no-unneeded-ternary": ["warn", { "defaultAssignment": false }], - "eslint/no-unreachable": "warn", - "eslint/no-unreachable-loop": "warn", - "eslint/no-unsafe-finally": "warn", - "eslint/no-unsafe-negation": ["warn", { "enforceForOrderingRelations": true }], - "eslint/no-unsafe-optional-chaining": ["warn", { "disallowArithmeticOperators": true }], - "eslint/no-unused-expressions": ["warn", { "enforceForJSX": true }], - "eslint/no-unused-labels": "warn", - "eslint/no-unused-private-class-members": "off", - "eslint/no-unused-vars": [ - "warn", - { "fix": { "imports": "safe-fix" }, "ignoreRestSiblings": true } - ], - "eslint/no-use-before-define": "off", - "eslint/no-useless-assignment": "warn", - "eslint/no-useless-backreference": "warn", - "eslint/no-useless-call": "warn", - "eslint/no-useless-catch": "warn", - "eslint/no-useless-computed-key": "warn", - "eslint/no-useless-concat": "warn", - "eslint/no-useless-constructor": "warn", - "eslint/no-useless-escape": "warn", - "eslint/no-useless-rename": "warn", - "eslint/no-useless-return": "warn", - "eslint/no-var": "warn", - "eslint/no-void": "warn", - "eslint/no-warning-comments": "off", - "eslint/no-with": "warn", - "eslint/object-shorthand": ["warn", "always", { "avoidExplicitReturnArrows": true }], - "eslint/one-var": ["warn", "never"], - "eslint/operator-assignment": "warn", - "eslint/prefer-arrow-callback": "warn", - "eslint/prefer-const": ["warn", { "destructuring": "all" }], - "eslint/prefer-destructuring": "off", - "eslint/prefer-exponentiation-operator": "warn", - "eslint/prefer-named-capture-group": "off", - "eslint/prefer-numeric-literals": "warn", - "eslint/prefer-object-has-own": "warn", - "eslint/prefer-object-spread": "warn", - "eslint/prefer-promise-reject-errors": "off", - "eslint/prefer-regex-literals": ["warn", { "disallowRedundantWrapping": true }], - "eslint/prefer-rest-params": "warn", - "eslint/prefer-spread": "warn", - "eslint/prefer-template": "warn", - "eslint/preserve-caught-error": "warn", - "eslint/radix": "warn", - "eslint/require-await": "off", - "eslint/require-unicode-regexp": "off", - "eslint/require-yield": "warn", - "eslint/sort-imports": "off", - "eslint/sort-keys": "off", - "eslint/sort-vars": "off", - "eslint/symbol-description": "warn", - "eslint/unicode-bom": "warn", - "eslint/use-isnan": ["warn", { "enforceForIndexOf": true }], - "eslint/valid-typeof": ["warn", { "requireStringLiterals": true }], - "eslint/vars-on-top": "off", - "eslint/yoda": "off", - "oxc/approx-constant": "warn", - "oxc/bad-array-method-on-arguments": "warn", - "oxc/bad-bitwise-operator": "warn", - "oxc/bad-char-at-comparison": "warn", - "oxc/bad-comparison-sequence": "warn", - "oxc/bad-match-all-arg": "warn", - "oxc/bad-min-max-func": "warn", - "oxc/bad-object-literal-comparison": "warn", - "oxc/bad-replace-all-arg": "warn", - "oxc/branches-sharing-code": "warn", - "oxc/const-comparisons": "warn", - "oxc/double-comparisons": "warn", - "oxc/erasing-op": "warn", - "oxc/misrefactored-assign-op": "warn", - "oxc/missing-throw": "warn", - "oxc/no-accumulating-spread": "warn", - "oxc/no-async-await": "off", - "oxc/no-async-endpoint-handlers": "warn", - "oxc/no-barrel-file": "warn", - "oxc/no-const-enum": "warn", - "oxc/no-map-spread": "off", - "oxc/no-optional-chaining": "off", - "oxc/no-rest-spread-properties": "off", - "oxc/no-this-in-exported-function": "warn", - "oxc/number-arg-out-of-range": "warn", - "oxc/only-used-in-recursion": "warn", - "oxc/uninvoked-array-callback": "warn", - "react/button-has-type": "warn", - "react/capitalized-calls": "warn", - "react/checked-requires-onchange-or-readonly": "warn", - "react/display-name": ["warn", { "checkContextObjects": true }], - "react/error-boundaries": "warn", - "react/exhaustive-deps": "warn", - "react/exhaustive-effect-dependencies": "warn", - "react/forbid-component-props": "off", - "react/forbid-dom-props": "off", - "react/forbid-elements": "off", - "react/forward-ref-uses-ref": "warn", - "react/function-component-definition": "warn", - "react/globals": "warn", - "react/hook-use-state": "off", - "react/hooks": "warn", - "react/iframe-missing-sandbox": "warn", - "react/immutability": "warn", - "react/incompatible-library": "warn", - "react/invariant": "warn", - "react/jsx-boolean-value": "warn", - "react/jsx-curly-brace-presence": ["warn", { "propElementValues": "always" }], - "react/jsx-filename-extension": "off", - "react/jsx-fragments": "warn", - "react/jsx-handler-names": "off", - "react/jsx-key": "warn", - "react/jsx-max-depth": "off", - "react/jsx-no-comment-textnodes": "warn", - "react/jsx-no-constructed-context-values": "warn", - "react/jsx-no-duplicate-props": "warn", - "react/jsx-no-literals": "off", - "react/jsx-no-script-url": "warn", - "react/jsx-no-target-blank": ["warn", { "forms": true, "warnOnSpreadAttributes": true }], - "react/jsx-no-undef": "warn", - "react/jsx-no-useless-fragment": "warn", - "react/jsx-pascal-case": "warn", - "react/jsx-props-no-spread-multi": "warn", - "react/jsx-props-no-spreading": "off", - "react/memo-dependencies": "warn", - "react/no-array-index-key": "off", - "react/no-children-prop": "warn", - "react/no-clone-element": "warn", - "react/no-danger": "warn", - "react/no-danger-with-children": "warn", - "react/no-deriving-state-in-effects": "warn", - "react/no-did-mount-set-state": "warn", - "react/no-did-update-set-state": "warn", - "react/no-direct-mutation-state": "warn", - "react/no-find-dom-node": "warn", - "react/no-is-mounted": "warn", - "react/no-multi-comp": "off", - "react/no-namespace": "warn", - "react/no-object-type-as-default-prop": "warn", - "react/no-react-children": "warn", - "react/no-redundant-should-component-update": "warn", - "react/no-render-return-value": "warn", - "react/no-set-state": "off", - "react/no-string-refs": "warn", - "react/no-this-in-sfc": "warn", - "react/no-unescaped-entities": "warn", - "react/no-unknown-property": "off", - "react/no-unsafe": ["warn", { "checkAliases": true }], - "react/no-unstable-nested-components": "warn", - "react/no-will-update-set-state": "warn", - "react/only-export-components": "off", - "react/prefer-es6-class": "off", - "react/prefer-function-component": "warn", - "react/preserve-manual-memoization": "warn", - "react/purity": "warn", - "react/react-in-jsx-scope": "off", - "react/refs": "warn", - "react/require-render-return": "warn", - "react/rule-suppression": "warn", - "react/rules-of-hooks": "warn", - "react/self-closing-comp": "warn", - "react/set-state-in-effect": "warn", - "react/set-state-in-render": "warn", - "react/state-in-constructor": "off", - "react/static-components": "warn", - "react/style-prop-object": "warn", - "react/syntax": "warn", - "react/todo": "off", - "react/unsupported-syntax": "warn", - "react/use-memo": "warn", - "react/void-dom-elements-no-children": "warn", - "react/void-use-memo": "warn", - "typescript/adjacent-overload-signatures": "warn", - "typescript/array-type": "warn", - "typescript/await-thenable": "warn", - "typescript/ban-ts-comment": ["warn", { "ts-expect-error": false }], - "typescript/ban-tslint-comment": "off", - "typescript/ban-types": "off", - "typescript/class-literal-property-style": "off", - "typescript/consistent-generic-constructors": "warn", - "typescript/consistent-indexed-object-style": "warn", - "typescript/consistent-return": "off", - "typescript/consistent-type-assertions": [ - "warn", - { - "arrayLiteralTypeAssertions": "never", - "objectLiteralTypeAssertions": "never" - } - ], - "typescript/consistent-type-definitions": "warn", - "typescript/consistent-type-exports": [ - "warn", - { "fixMixedExportsWithInlineTypeSpecifier": true } - ], - "typescript/consistent-type-imports": ["warn", { "fixStyle": "inline-type-imports" }], - "typescript/dot-notation": "warn", - "typescript/explicit-function-return-type": "off", - "typescript/explicit-member-accessibility": "off", - "typescript/explicit-module-boundary-types": "off", - "typescript/method-signature-style": "warn", - "typescript/no-array-delete": "warn", - "typescript/no-base-to-string": "off", - "typescript/no-confusing-non-null-assertion": "off", - "typescript/no-confusing-void-expression": ["warn", { "ignoreArrowShorthand": true }], - "typescript/no-deprecated": "warn", - "typescript/no-duplicate-enum-values": "warn", - "typescript/no-duplicate-type-constituents": "warn", - "typescript/no-dynamic-delete": "off", - "typescript/no-empty-interface": "off", - "typescript/no-empty-object-type": "warn", - "typescript/no-explicit-any": ["warn", { "fixToUnknown": true }], - "typescript/no-extra-non-null-assertion": "warn", - "typescript/no-extraneous-class": "warn", - "typescript/no-floating-promises": "off", - "typescript/no-for-in-array": "warn", - "typescript/no-implied-eval": "warn", - "typescript/no-import-type-side-effects": "warn", - "typescript/no-inferrable-types": "warn", - "typescript/no-invalid-void-type": "warn", - "typescript/no-meaningless-void-operator": "warn", - "typescript/no-misused-new": "warn", - "typescript/no-misused-promises": "off", - "typescript/no-misused-spread": "warn", - "typescript/no-mixed-enums": "warn", - "typescript/no-namespace": "warn", - "typescript/no-non-null-asserted-nullish-coalescing": "warn", - "typescript/no-non-null-asserted-optional-chain": "warn", - "typescript/no-non-null-assertion": "off", - "typescript/no-redundant-type-constituents": "warn", - "typescript/no-require-imports": "warn", - "typescript/no-restricted-types": "off", - "typescript/no-this-alias": "warn", - "typescript/no-unnecessary-boolean-literal-compare": "warn", - "typescript/no-unnecessary-condition": [ - "warn", - { - "allowConstantLoopConditions": "only-allowed-literals", - "checkTypePredicates": true - } - ], - "typescript/no-unnecessary-parameter-property-assignment": "warn", - "typescript/no-unnecessary-qualifier": "off", - "typescript/no-unnecessary-template-expression": "warn", - "typescript/no-unnecessary-type-arguments": "warn", - "typescript/no-unnecessary-type-assertion": "warn", - "typescript/no-unnecessary-type-constraint": "warn", - "typescript/no-unnecessary-type-conversion": "warn", - "typescript/no-unnecessary-type-parameters": "warn", - "typescript/no-unsafe-argument": "off", - "typescript/no-unsafe-assignment": "off", - "typescript/no-unsafe-call": "off", - "typescript/no-unsafe-declaration-merging": "warn", - "typescript/no-unsafe-enum-comparison": "warn", - "typescript/no-unsafe-function-type": "warn", - "typescript/no-unsafe-member-access": "off", - "typescript/no-unsafe-return": "off", - "typescript/no-unsafe-type-assertion": "off", - "typescript/no-unsafe-unary-minus": "warn", - "typescript/no-useless-default-assignment": "warn", - "typescript/no-useless-empty-export": "warn", - "typescript/no-var-requires": "off", - "typescript/no-wrapper-object-types": "warn", - "typescript/non-nullable-type-assertion-style": "warn", - "typescript/only-throw-error": [ - "warn", - { - "allow": [ - { - "from": "package", - "package": "@tanstack/router-core", - "name": ["NotFoundError", "Redirect"] - } - ] - } - ], - "typescript/parameter-properties": "warn", - "typescript/prefer-as-const": "warn", - "typescript/prefer-enum-initializers": "warn", - "typescript/prefer-find": "warn", - "typescript/prefer-for-of": "warn", - "typescript/prefer-function-type": "warn", - "typescript/prefer-includes": "warn", - "typescript/prefer-literal-enum-member": "warn", - "typescript/prefer-namespace-keyword": "warn", - "typescript/prefer-nullish-coalescing": [ - "warn", - { - "ignoreConditionalTests": false, - "ignorePrimitives": true - } - ], - "typescript/prefer-optional-chain": "warn", - "typescript/prefer-promise-reject-errors": "warn", - "typescript/prefer-readonly": "warn", - "typescript/prefer-readonly-parameter-types": "off", - "typescript/prefer-reduce-type-parameter": "warn", - "typescript/prefer-regexp-exec": "warn", - "typescript/prefer-return-this-type": "warn", - "typescript/prefer-string-starts-ends-with": "warn", - "typescript/prefer-ts-expect-error": "warn", - "typescript/promise-function-async": "off", - "typescript/related-getter-setter-pairs": "off", - "typescript/require-array-sort-compare": "warn", - "typescript/require-await": "warn", - "typescript/restrict-plus-operands": [ - "warn", - { - "allowAny": false, - "allowBoolean": false, - "allowNullish": false, - "allowNumberAndString": false, - "allowRegExp": false - } - ], - "typescript/restrict-template-expressions": "off", - "typescript/return-await": "warn", - "typescript/strict-boolean-expressions": "off", - "typescript/strict-void-return": "off", - "typescript/switch-exhaustiveness-check": "warn", - "typescript/triple-slash-reference": ["warn", { "lib": "never", "types": "never" }], - "typescript/unbound-method": "off", - "typescript/unified-signatures": "off", - "typescript/use-unknown-in-catch-callback-variable": "warn", - "unicorn/catch-error-name": "warn", - "unicorn/consistent-assert": "warn", - "unicorn/consistent-date-clone": "warn", - "unicorn/consistent-empty-array-spread": "warn", - "unicorn/consistent-existence-index-check": "warn", - "unicorn/consistent-function-scoping": "warn", - "unicorn/consistent-template-literal-escape": "warn", - "unicorn/custom-error-definition": "warn", - "unicorn/empty-brace-spaces": "off", - "unicorn/error-message": "warn", - "unicorn/escape-case": "warn", - "unicorn/explicit-length-check": "warn", - "unicorn/explicit-timer-delay": "warn", - "unicorn/filename-case": ["warn", { "cases": { "camelCase": true, "pascalCase": true } }], - "unicorn/import-style": "off", - "unicorn/max-nested-calls": "off", - "unicorn/new-for-builtins": "warn", - "unicorn/no-abusive-eslint-disable": "warn", - "unicorn/no-accessor-recursion": "warn", - "unicorn/no-anonymous-default-export": "warn", - "unicorn/no-array-callback-reference": "off", - "unicorn/no-array-fill-with-reference-type": "warn", - "unicorn/no-array-for-each": "warn", - "unicorn/no-array-method-this-argument": "warn", - "unicorn/no-array-reduce": "warn", - "unicorn/no-array-reverse": "warn", - "unicorn/no-array-sort": "warn", - "unicorn/no-await-expression-member": "warn", - "unicorn/no-await-in-promise-methods": "warn", - "unicorn/no-confusing-array-with": "off", - "unicorn/no-console-spaces": "warn", - "unicorn/no-document-cookie": "warn", - "unicorn/no-empty-file": "warn", - "unicorn/no-hex-escape": "warn", - "unicorn/no-immediate-mutation": "warn", - "unicorn/no-instanceof-array": "off", - "unicorn/no-instanceof-builtins": "warn", - "unicorn/no-invalid-fetch-options": "warn", - "unicorn/no-invalid-remove-event-listener": "warn", - "unicorn/no-length-as-slice-end": "warn", - "unicorn/no-lonely-if": "warn", - "unicorn/no-magic-array-flat-depth": "off", - "unicorn/no-negated-condition": "off", - "unicorn/no-negation-in-equality-check": "warn", - "unicorn/no-nested-ternary": "off", - "unicorn/no-new-array": "warn", - "unicorn/no-new-buffer": "warn", - "unicorn/no-null": "off", - "unicorn/no-object-as-default-parameter": "warn", - "unicorn/no-process-exit": "warn", - "unicorn/no-single-promise-in-promise-methods": "warn", - "unicorn/no-static-only-class": "warn", - "unicorn/no-thenable": "warn", - "unicorn/no-this-assignment": "warn", - "unicorn/no-typeof-undefined": "warn", - "unicorn/no-unnecessary-array-flat-depth": "warn", - "unicorn/no-unnecessary-array-splice-count": "warn", - "unicorn/no-unnecessary-await": "warn", - "unicorn/no-unnecessary-slice-end": "warn", - "unicorn/no-unreadable-array-destructuring": "warn", - "unicorn/no-unreadable-iife": "warn", - "unicorn/no-useless-collection-argument": "warn", - "unicorn/no-useless-error-capture-stack-trace": "warn", - "unicorn/no-useless-fallback-in-spread": "warn", - "unicorn/no-useless-iterator-to-array": "warn", - "unicorn/no-useless-length-check": "warn", - "unicorn/no-useless-promise-resolve-reject": "warn", - "unicorn/no-useless-spread": "warn", - "unicorn/no-useless-switch-case": "warn", - "unicorn/no-useless-undefined": "off", - "unicorn/no-zero-fractions": "warn", - "unicorn/number-literal-case": "off", - "unicorn/numeric-separators-style": "warn", - "unicorn/prefer-add-event-listener": "warn", - "unicorn/prefer-array-find": "warn", - "unicorn/prefer-array-flat": "warn", - "unicorn/prefer-array-flat-map": "warn", - "unicorn/prefer-array-index-of": "warn", - "unicorn/prefer-array-some": "warn", - "unicorn/prefer-at": "off", - "unicorn/prefer-bigint-literals": "warn", - "unicorn/prefer-blob-reading-methods": "warn", - "unicorn/prefer-class-fields": "warn", - "unicorn/prefer-classlist-toggle": "warn", - "unicorn/prefer-code-point": "warn", - "unicorn/prefer-date-now": "warn", - "unicorn/prefer-default-parameters": "warn", - "unicorn/prefer-dom-node-append": "warn", - "unicorn/prefer-dom-node-dataset": "warn", - "unicorn/prefer-dom-node-remove": "warn", - "unicorn/prefer-dom-node-text-content": "warn", - "unicorn/prefer-event-target": "warn", - "unicorn/prefer-export-from": "warn", - "unicorn/prefer-global-this": "warn", - "unicorn/prefer-import-meta-properties": "warn", - "unicorn/prefer-includes": "off", - "unicorn/prefer-keyboard-event-key": "off", - "unicorn/prefer-logical-operator-over-ternary": "warn", - "unicorn/prefer-math-min-max": "warn", - "unicorn/prefer-math-trunc": "warn", - "unicorn/prefer-modern-dom-apis": "warn", - "unicorn/prefer-modern-math-apis": "warn", - "unicorn/prefer-module": "warn", - "unicorn/prefer-native-coercion-functions": "warn", - "unicorn/prefer-negative-index": "warn", - "unicorn/prefer-node-protocol": "warn", - "unicorn/prefer-number-coercion": "off", - "unicorn/prefer-number-properties": ["warn", { "checkInfinity": true }], - "unicorn/prefer-object-from-entries": "warn", - "unicorn/prefer-optional-catch-binding": "warn", - "unicorn/prefer-prototype-methods": "warn", - "unicorn/prefer-query-selector": "off", - "unicorn/prefer-reflect-apply": "warn", - "unicorn/prefer-regexp-test": "warn", - "unicorn/prefer-response-static-json": "warn", - "unicorn/prefer-set-has": "warn", - "unicorn/prefer-set-size": "warn", - "unicorn/prefer-single-call": "warn", - "unicorn/prefer-spread": "warn", - "unicorn/prefer-string-raw": "warn", - "unicorn/prefer-string-replace-all": "warn", - "unicorn/prefer-string-slice": "warn", - "unicorn/prefer-string-starts-ends-with": "off", - "unicorn/prefer-string-trim-start-end": "warn", - "unicorn/prefer-structured-clone": "warn", - "unicorn/prefer-ternary": "off", - "unicorn/prefer-top-level-await": "warn", - "unicorn/prefer-type-error": "warn", - "unicorn/relative-url-style": "warn", - "unicorn/require-array-join-separator": "warn", - "unicorn/require-module-attributes": "warn", - "unicorn/require-module-specifiers": "warn", - "unicorn/require-number-to-fixed-digits-argument": "warn", - "unicorn/require-post-message-target-origin": "warn", - "unicorn/switch-case-braces": ["warn", "avoid"], - "unicorn/switch-case-break-position": "warn", - "unicorn/text-encoding-identifier-case": "warn", - "unicorn/throw-new-error": "warn" - }, - - "overrides": [ - { - "files": ["test/**/*"], - - "rules": { - "typescript/no-floating-promises": "warn", - "unicorn/consistent-function-scoping": "off", - "unicorn/prefer-ternary": "off", - "vitest/consistent-each-for": "warn", - "vitest/consistent-test-filename": "off", - "vitest/consistent-test-it": "warn", - "vitest/consistent-vitest-vi": "warn", - "vitest/expect-expect": "off", - "vitest/hoisted-apis-on-top": "warn", - "vitest/max-expects": "off", - "vitest/max-nested-describe": "off", - "vitest/no-alias-methods": "warn", - "vitest/no-commented-out-tests": "warn", - "vitest/no-conditional-expect": "off", - "vitest/no-conditional-in-test": "off", - "vitest/no-conditional-tests": "warn", - "vitest/no-disabled-tests": "off", - "vitest/no-duplicate-hooks": "warn", - "vitest/no-focused-tests": "warn", - "vitest/no-hooks": "off", - "vitest/no-identical-title": "warn", - "vitest/no-import-node-test": "warn", - "vitest/no-importing-vitest-globals": "warn", - "vitest/no-interpolation-in-snapshots": "off", - "vitest/no-large-snapshots": "off", - "vitest/no-mocks-import": "warn", - "vitest/no-restricted-matchers": "off", - "vitest/no-restricted-vi-methods": "off", - "vitest/no-standalone-expect": [ - "warn", - { - "additionalTestBlockFunctions": [ - "beforeAll", - "beforeEach", - "afterAll", - "afterEach", - "aroundAll", - "aroundEach" - ] - } - ], - "vitest/no-test-prefixes": "warn", - "vitest/no-test-return-statement": "warn", - "vitest/no-unneeded-async-expect-function": "warn", - "vitest/padding-around-after-all-blocks": "off", - "vitest/padding-around-test-blocks": "off", - "vitest/prefer-called-exactly-once-with": "warn", - "vitest/prefer-called-once": "warn", - "vitest/prefer-called-times": "off", - "vitest/prefer-called-with": "off", - "vitest/prefer-comparison-matcher": "warn", - "vitest/prefer-describe-function-title": "off", - "vitest/prefer-each": "warn", - "vitest/prefer-equality-matcher": "warn", - "vitest/prefer-expect-assertions": "off", - "vitest/prefer-expect-resolves": "warn", - "vitest/prefer-expect-type-of": "warn", - "vitest/prefer-hooks-in-order": "warn", - "vitest/prefer-hooks-on-top": "warn", - "vitest/prefer-import-in-mock": "warn", - "vitest/prefer-importing-vitest-globals": "off", - "vitest/prefer-lowercase-title": "off", - "vitest/prefer-mock-promise-shorthand": "warn", - "vitest/prefer-mock-return-shorthand": "warn", - "vitest/prefer-snapshot-hint": "off", - "vitest/prefer-spy-on": "warn", - "vitest/prefer-strict-boolean-matchers": "warn", - "vitest/prefer-strict-equal": "warn", - "vitest/prefer-to-be": "warn", - "vitest/prefer-to-be-falsy": "off", - "vitest/prefer-to-be-object": "warn", - "vitest/prefer-to-be-truthy": "off", - "vitest/prefer-to-contain": "warn", - "vitest/prefer-to-have-been-called-times": "warn", - "vitest/prefer-to-have-length": "warn", - "vitest/prefer-todo": "warn", - "vitest/require-awaited-expect-poll": "warn", - "vitest/require-hook": "off", - "vitest/require-local-test-context-for-concurrent-snapshots": "off", - "vitest/require-mock-type-parameters": "off", - "vitest/require-test-timeout": "off", - "vitest/require-to-throw-message": "warn", - "vitest/require-top-level-describe": "off", - "vitest/valid-describe-callback": "warn", - "vitest/valid-expect": "warn", - "vitest/valid-expect-in-promise": "warn", - "vitest/valid-title": "warn", - "vitest/warn-todo": "warn" - } - }, - - { - "files": ["test/failOnConsole.ts"], - - "rules": { - "eslint/no-console": "off" - } - }, - - { - "files": ["**/*.d.ts"], - - "rules": { - "typescript/consistent-indexed-object-style": "off", - "unicorn/require-module-specifiers": "off" - } - } - ] -} diff --git a/.vite-hooks/pre-commit b/.vite-hooks/pre-commit new file mode 100644 index 0000000000..85fb65b4fc --- /dev/null +++ b/.vite-hooks/pre-commit @@ -0,0 +1 @@ +vp staged diff --git a/.vscode/extensions.json b/.vscode/extensions.json index cf3caf0895..315fe2f80d 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,7 @@ { - "recommendations": ["dbaeumer.vscode-eslint", "oxc.oxc-vscode", "typescriptteam.native-preview"] + "recommendations": [ + "dbaeumer.vscode-eslint", + "typescriptteam.native-preview", + "VoidZero.vite-plus-extension-pack" + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 6b25533823..6a898b7f25 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,12 +1,15 @@ { "editor.codeActionsOnSave": { "source.fixAll": "explicit", + "source.fixAll.oxc": "explicit", "source.organizeLinkDefinitions": "explicit", - "source.removeUnusedImports": "explicit", - "source.format.oxc": "explicit" + "source.removeUnusedImports": "explicit" }, "editor.defaultFormatter": "oxc.oxc-vscode", + "editor.formatOnSave": true, + "editor.formatOnSaveMode": "file", "js/ts.experimental.useTsgo": true, + "js/ts.tsdk.path": "./node_modules/typescript", // ESLint is only used for markdown; JS/TS is linted by the oxc extension "eslint.validate": ["markdown"], "eslint.problems.shortenToSingleLine": true, @@ -19,5 +22,7 @@ "search.exclude": { "**/package-lock.json": true, "**/routeTree.gen.ts": true - } + }, + "oxc.disableNestedConfig": true, + "oxc.fmt.disableNestedConfig": true } diff --git a/AGENTS.md b/AGENTS.md index 51d211b317..bf5a5b7d88 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,18 +1,5 @@ # AGENTS.md -## Commands - -```shell -npm ci # setup -node --run build # library → lib/ -node --run lint # oxlint -node --run lint:md # eslint --max-warnings 0 (markdown only) -node --run lint:fix # oxlint --fix && eslint --fix -node --run format # oxfmt -node --run test # vitest (browser + node) -node --run test -- # single test, e.g. test/browser/rowHeight.test.ts -``` - ## Architecture react-data-grid is a data grid with **zero `dependencies`** (peer dependency: React 19.2+). It uses CSS Grid for layout and implements row/column virtualization in JS. @@ -29,7 +16,7 @@ src/ cellRenderers/ # default cell renderers (e.g. checkbox, toggleGroup, value) editors/ # default editors (renderTextEditor) test/ - browser/ # vitest browser-mode tests (Playwright, Chromium + Firefox) + browser/ # vitest browser-mode tests (Playwright: Chromium, Firefox, WebKit) node/ # vitest SSR tests (Node.js) visual/ # vitest visual regression tests (CI-only — never run locally) website/ # demo site (Vite + TanStack Router) @@ -47,16 +34,30 @@ website/ # demo site (Vite + TanStack Router) - **Dual classnames** — components apply both a semantic class (`rdg-cell`) and a generated hash. Preserve both. - **Light/dark mode** — handled via CSS `light-dark()` + `color-scheme`, not JS. - **Accessibility first** — ARIA attributes (e.g. `aria-colindex`, `aria-rowindex`, `aria-selected`, roles) are required. Tests query by role. -- **Formatting** — oxfmt (not Prettier). **Linting** — ESLint (must pass with zero warnings). -- **Build** — tsdown bundles library to `lib/`; `ecij` plugin prefixes classes with `rdg-{version}-` (dots→dashes) to avoid cross-version conflicts. +- **Build** — `vp pack` bundles the library to `lib/`; `ecij` plugin prefixes classes with `rdg-{version}-` (dots→dashes) to avoid cross-version conflicts. ## Testing -- Browser tests use `vitest/browser` + Playwright. `test/setupBrowser.ts` configures `page.render()` via `vitest-browser-react` and registers custom locators via `locators.extend()` — prefer `page.getGrid()`, `page.getCell({ name })`, `page.getRow()`, `page.getHeaderCell()`, `page.getActiveCell()`, etc. over raw `page.getByRole()`. +- Browser tests use `vite-plus/test/browser` + Playwright. `test/setupBrowser.ts` configures `page.render()` via `vitest-browser-react` and registers custom locators via `locators.extend()` — prefer `page.getGrid()`, `page.getCell({ name })`, `page.getRow()`, `page.getHeaderCell()`, `page.getActiveCell()`, etc. over raw `page.getByRole()`. - Test helpers in `test/browser/utils.tsx`: `setup()`, `getRowWithCell()`, `getCellsAtRowIndex()`, `validateCellPosition()`, `scrollGrid()`, `safeTab()`, `testCount()`, `testRowCount()`. - `test/failOnConsole.ts` fails tests on unexpected console warnings/errors. - **Never run visual regression tests** — screenshots are environment-dependent so visual regression tests must run in CI only. +## Tooling + +The project uses [Vite+](https://viteplus.dev/guide/), whose global `vp` CLI wraps Vite, Rolldown, Vitest, tsdown, Oxlint, Oxfmt, and Vite Task. Run `vp` directly, not through `npx`. Its docs are in `node_modules/vite-plus/docs`. + +- `vp ` runs a built-in command, e.g. `vp dev`, `vp check`, `vp test`, `vp pack`, `vp build`. +- `vp run ` runs a task from `vite.config.ts`, e.g. `vp run typecheck`, `vp run eslint`, `vp run ci`. +- Run `vp install` after pulling changes. + ## Validation -Run before submitting changes: `node --run lint`, `node --run format`, `node --run test`. +Run `vp run ci` before submitting changes. It runs the same checks as CI, and skips any whose inputs haven't changed since they last passed. + +While iterating, run individual checks instead. The static checks take seconds, so run them before tests: + +- `vp run typecheck` type checks with `tsc --build`; `vp check` does not type check. +- `vp check --fix` formats and lints, fixing what it can. Without `--fix`, a formatting error stops it before linting. +- `vp run eslint` lints Markdown files. +- `vp test ` runs specific test files, e.g. `vp test test/browser/sorting.test.tsx`. Add `--project "browser (chromium)"` to test in a single browser, or `--project node` to run the SSR test. The full suite takes about a minute. diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 43c994c2d3..0000000000 --- a/CLAUDE.md +++ /dev/null @@ -1 +0,0 @@ -@AGENTS.md diff --git a/README.md b/README.md index 97766502df..d2c6715295 100644 --- a/README.md +++ b/README.md @@ -56,18 +56,15 @@ The DataGrid component is designed to handle large datasets efficiently while of Install `react-data-grid` using your favorite package manager: ```sh -npm i react-data-grid -``` - -```sh +# npm +npm install react-data-grid +# Vite+ +vp add react-data-grid +# pnpm pnpm add react-data-grid -``` - -```sh +# Yarn yarn add react-data-grid -``` - -```sh +# Bun bun add react-data-grid ``` @@ -2109,8 +2106,8 @@ type Maybe = T | undefined | null; - `SR`, `TSummaryRow`: Summary row type - `K`: Row key type -[ci-badge]: https://github.com/Comcast/react-data-grid/workflows/CI/badge.svg -[ci-url]: https://github.com/Comcast/react-data-grid/actions +[ci-badge]: https://github.com/Comcast/react-data-grid/actions/workflows/ci.yml/badge.svg +[ci-url]: https://github.com/Comcast/react-data-grid/actions/workflows/ci.yml [codecov-badge]: https://codecov.io/gh/Comcast/react-data-grid/branch/main/graph/badge.svg?token=cvrRSWiz0Q [codecov-url]: https://app.codecov.io/gh/Comcast/react-data-grid [npm-badge]: https://img.shields.io/npm/v/react-data-grid diff --git a/eslint.config.ts b/eslint.config.ts index 2ac8a309d7..ec1d9ef987 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -32,7 +32,6 @@ copy( ) // map link to rule declaration .map((link) => `'markdown/${link.textContent}': 1,`) - .toArray() .join('\n') ); */ diff --git a/package-lock.json b/package-lock.json index 78e6a5b2c4..df708e0cbc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,29 +13,25 @@ "@faker-js/faker": "^10.3.0", "@tanstack/react-router": "^1.166.7", "@tanstack/router-plugin": "^1.166.7", - "@tsdown/css": "^0.23.0", "@types/node": "^26.0.0", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "@vitejs/plugin-react": "^6.1.1", - "@vitest/browser-playwright": "^5.0.0", - "@vitest/coverage-istanbul": "^5.0.0", + "@vitest/browser-playwright": "5.0.1", + "@vitest/coverage-istanbul": "5.0.1", "clsx": "^2.1.1", "ecij": "^0.5.0", "eslint": "^10.2.1", "jspdf": "^4.2.0", "jspdf-autotable": "^5.0.7", "oxc-transform-react": "^0.151.0", - "oxfmt": "^0.70.0", - "oxlint": "^1.80.0", - "oxlint-tsgolint": "^7.0.2001", "playwright": "^1.62.1", "react": "^19.3.0", "react-dom": "^19.3.0", - "tsdown": "^0.23.0", "typescript": "^7.0.2", - "vite": "^8.1.0", - "vitest": "^5.0.0", + "vite": "npm:@voidzero-dev/vite-plus-core@1.0.0", + "vite-plus": "1.0.0", + "vitest": "5.0.1", "vitest-browser-react": "^2.3.0" }, "peerDependencies": { @@ -220,9 +216,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", - "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", "dev": true, "license": "MIT", "dependencies": { @@ -236,9 +232,9 @@ } }, "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==", + "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": { @@ -325,9 +321,9 @@ } }, "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==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", "dev": true, "license": "MIT", "dependencies": { @@ -343,6 +339,19 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "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": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { "version": "4.12.2", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", @@ -611,6 +620,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@oxc-project/runtime": { + "version": "0.151.0", + "resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.151.0.tgz", + "integrity": "sha512-fNuliiqGTseerW2FTbxq6UOQavKL/NvNh9K3peJZZVNi1NbM4Ehscwp3MX9nu+9bfbSfmPUEivF779XQU5exiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@oxc-project/types": { "version": "0.151.0", "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.151.0.tgz", @@ -1746,6 +1765,19 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@oxlint/plugins": { + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/plugins/-/plugins-1.79.0.tgz", + "integrity": "sha512-S0uyoxakDINJ4DPgqxGlEEvrdSMeQb7Z2lKVjxoY2gwsbZbfg2Xr8Klfeo5ZeraHmmdBCELFUHkSe6KEmBpMvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.29", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", @@ -1753,19 +1785,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@quansync/fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@quansync/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "quansync": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - } - }, "node_modules/@rolldown/binding-android-arm-eabi": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.11.tgz", @@ -1779,6 +1798,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1796,6 +1816,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1813,6 +1834,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1830,6 +1852,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1847,6 +1870,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1864,6 +1888,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1884,6 +1909,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1904,6 +1930,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1924,6 +1951,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1944,6 +1972,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1964,6 +1993,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -1984,6 +2014,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -2001,6 +2032,7 @@ "os": [ "openharmony" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -2018,6 +2050,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -2035,6 +2068,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": "^20.19.0 || >=22.12.0" } @@ -2085,13 +2119,13 @@ } }, "node_modules/@tanstack/react-store": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.11.1.tgz", - "integrity": "sha512-HaIGKI3YLmjBYIvy5DFDY23oNaYZIsTZfngey07Uh5iLVJgM3bIGCnZeOFOqzjFld9JHWcaHJnasD/bKoGKwJQ==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.11.2.tgz", + "integrity": "sha512-oj5O5DmiMWE+ih+SioX2ayC1kbK7d3fpLx0B75fPJr9nY3zU+hoW010yr64qXsY/9fyiLVE2bn5mGNV3owm8RQ==", "dev": true, "license": "MIT", "dependencies": { - "@tanstack/store": "0.11.1", + "@tanstack/store": "0.11.2", "use-sync-external-store": "^1.6.0" }, "funding": { @@ -2221,9 +2255,9 @@ } }, "node_modules/@tanstack/store": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.11.1.tgz", - "integrity": "sha512-mzTOBhypOuDJAy/D8n2MfUZ1HFkXnmSETviRyhqEC8LUE7/IZQExOTxMANj3KjTofYTkFNpBY67qaVrT41YccA==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.11.2.tgz", + "integrity": "sha512-sJ4mjol8uQsHV0gOJzzjwXfh2Fwm+Sz0+8deqiTm4jGbMdjzNSW+xZCFm0kUa870uhd8yi+DpKnZb5Kc4apa0Q==", "dev": true, "license": "MIT", "funding": { @@ -2245,49 +2279,47 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, - "node_modules/@tsdown/css": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tsdown/css/-/css-0.23.0.tgz", - "integrity": "sha512-EfSQCVAz24CRz92WdJj/Yb+gJMV3m2C/iDsFO4XJkd12Ez9WnW0KtpLohAFtc4gDzflFlh9I0UHTZc6BQmxSHw==", + "node_modules/@testing-library/dom": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.2.tgz", + "integrity": "sha512-yzr2S9HyAIdhz2/6qHgbs665Q7PKVcDF05vsOlHPxG1mo36gKVesdYVeDLnXgfjJ03CrKRk08knc6+E/9m8v2Q==", "dev": true, "license": "MIT", "dependencies": { - "lightningcss": "^1.33.0", - "postcss-load-config": "^6.0.1", - "rolldown": "~1.2.7" + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" }, "engines": { - "node": "^22.18.0 || ^24.11.0 || >=26.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" + "node": ">=18" + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.7", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.7.tgz", + "integrity": "sha512-MPCpX8bxe8zS+JmmTwLp8jd0dy1rAm60Te/SL8JrQM3qvQJcBOs1d7IefJMyZzqM3EWBrDn/LWDt1BCGu4ASfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" }, "peerDependencies": { - "postcss": "^8.4.0", - "postcss-import": "^16.0.0 || ^17.0.0", - "postcss-modules": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "*", - "sass-embedded": "*", - "tsdown": "0.23.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "postcss-import": { - "optional": true - }, - "postcss-modules": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } + "@testing-library/dom": ">=7.21.4" } }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/chai": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", @@ -2338,9 +2370,9 @@ "license": "MIT" }, "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==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", "dev": true, "license": "MIT", "dependencies": { @@ -2816,16 +2848,16 @@ } }, "node_modules/@vitest/browser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-5.0.2.tgz", - "integrity": "sha512-nX9xXZ/j8YfU7KTeFa+tpSP331SbI81qBQTASRlcopYeaTgBerNmJryzHXHrFOW0NYldd3Dn5gw651zGnmaQzw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-5.0.1.tgz", + "integrity": "sha512-s2UroEhP2BZPoen1qrXXTtVqnUcs6y2sxMLGCZ8tZDkH2iM/6tTC2GVTPCgF+oVF3X5M6wC/X2O0MvvoHNmH0Q==", "dev": true, "license": "MIT", "dependencies": { "@blazediff/core": "1.10.0", - "@vitest/mocker": "5.0.2", - "@vitest/ui": "5.0.2", - "@vitest/utils": "5.0.2", + "@vitest/mocker": "5.0.1", + "@vitest/ui": "5.0.1", + "@vitest/utils": "5.0.1", "magic-string": "^1.2.3", "pngjs": "^7.0.0", "sirv": "^3.0.2", @@ -2836,18 +2868,18 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "5.0.2" + "vitest": "5.0.1" } }, "node_modules/@vitest/browser-playwright": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-5.0.2.tgz", - "integrity": "sha512-wU0B1Zy9+a55fdUT7JBCcnnjpTx0HHvUlQT6yFnuwCSY244BkPPwabNX+9PAljc96gRELcfm5APtnsn/3qiaPw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-5.0.1.tgz", + "integrity": "sha512-BlknN81ZeoCyP5CSm5u7+1BTlS7d0cDU5DfndNSjEC3SmbzOESGrp+DQpNhQmTlggawWc+yKVEM03mM/aBynqg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/browser": "5.0.2", - "@vitest/mocker": "5.0.2", + "@vitest/browser": "5.0.1", + "@vitest/mocker": "5.0.1", "tinyrainbow": "^3.1.1" }, "funding": { @@ -2855,7 +2887,7 @@ }, "peerDependencies": { "playwright": "*", - "vitest": "5.0.2" + "vitest": "5.0.1" }, "peerDependenciesMeta": { "playwright": { @@ -2863,6 +2895,24 @@ } } }, + "node_modules/@vitest/browser-preview": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitest/browser-preview/-/browser-preview-5.0.1.tgz", + "integrity": "sha512-NagNnZD6A8ccl+pycLWX2b/e9YJtH5NuDUyiiadQjptMRuZVBAB9r9I3itdKm6exxtcl+rOTv2rWt6vu5uOm1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@testing-library/dom": "^10.4.1", + "@testing-library/user-event": "^14.6.6", + "@vitest/browser": "5.0.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "5.0.1" + } + }, "node_modules/@vitest/browser/node_modules/magic-string": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.2.tgz", @@ -2874,9 +2924,9 @@ } }, "node_modules/@vitest/coverage-istanbul": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-5.0.2.tgz", - "integrity": "sha512-YHA67+r9tAUDwVUcIJgc5u2sLwO8hHbC1Lcv5XmgMFjNk0HNl/0sJmADY474c7zP9r1bQDacQgN9Ix7MlBb4dA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-5.0.1.tgz", + "integrity": "sha512-JROeZ7Yy4xOMXQALW6CHT3O165LlUCB55F0aQ1LBRuFOCPCnSM1vDx8YxZTs8uPIBW9lcEftfNfOvIj4IJ1i9g==", "dev": true, "license": "MIT", "dependencies": { @@ -2894,13 +2944,13 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "5.0.2" + "vitest": "5.0.1" } }, "node_modules/@vitest/istanbul-lib-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@vitest/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.1.tgz", - "integrity": "sha512-k3DJZ8LhMBK9NS4SclF1ASD3OgXEWDorbIcPTRDK0/Zae6fRvu+fJRxtFdLfHsa9Y24beCdPnoNZ4LviTNstfA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vitest/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.2.tgz", + "integrity": "sha512-9J/JMwOf9AoJhAywhrn7ScKTL38hsWQP/qPG60OtaAFcQ5OXPwKsxZFlbnuCKmZ61m8/lGgHYnFpdyQZUvG/iA==", "dev": true, "license": "MIT", "engines": { @@ -2908,9 +2958,9 @@ } }, "node_modules/@vitest/istanbul-lib-instrument": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@vitest/istanbul-lib-instrument/-/istanbul-lib-instrument-1.0.1.tgz", - "integrity": "sha512-sSwnQN40rt2TiJeW30tBhMKi+6oTZkD3OzdzHAl7o5NJzWtp//sCN2abHfEXQV9dfwTto8Fu+nyQRygcQt/pjA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vitest/istanbul-lib-instrument/-/istanbul-lib-instrument-1.0.2.tgz", + "integrity": "sha512-KFlvK0uYxYjdNoQJR+6F1B45u0ZOmYgOZndqfwLiGBjYHACc8q1Wyuw/ZQeGP3UKc7XsSZ51NKQDKt0IIbGMQg==", "dev": true, "license": "MIT", "dependencies": { @@ -2918,20 +2968,20 @@ "@babel/parser": "^8.0.4", "@istanbuljs/schema": "^0.1.3", "@jridgewell/trace-mapping": "^0.3.23", - "@vitest/istanbul-lib-coverage": "1.0.1" + "@vitest/istanbul-lib-coverage": "1.0.2" }, "engines": { "node": ">=22" } }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/@babel/code-frame": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0.tgz", - "integrity": "sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.6.tgz", + "integrity": "sha512-uMHhvmDmwFiLuiozaoRYTZHqMFuu3fem/X9JY78lohAuLoh8LSGGC8JqUzo2cVuBsBxkjMZNk56CE7ock8Xxkw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^8.0.0", + "@babel/helper-validator-identifier": "^8.0.6", "js-tokens": "^10.0.0" }, "engines": { @@ -2939,9 +2989,9 @@ } }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/@babel/compat-data": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-8.0.0.tgz", - "integrity": "sha512-DOjnob/cXOUgDOozCDeq/aK2p5y8dUIVdf6tNhEV1HQRd6I8aQ4f4fbtHRVEvb6lP3BGomrKHiS8ICAASSVQSw==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-8.0.5.tgz", + "integrity": "sha512-YLsYoQMvL8l8WrGpN3Zj7O1wK5LEBN+cQtux7BcuHyxIXve724XG+zuJ1n3U1cUweRtTzQOA4IHbuQw3N34SZw==", "dev": true, "license": "MIT", "engines": { @@ -2949,20 +2999,20 @@ } }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/@babel/core": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-8.0.1.tgz", - "integrity": "sha512-5FgxM4dLQpMJHSiVATk8foW263dVHQHBVpXYiimNECVWG01f4nFyEbQixeT6Mwvg7TayREJ2gpKl3o2RoMdnqw==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-8.0.6.tgz", + "integrity": "sha512-5zwYt1V4ji3mXKKRIAkohSJ29WepxNwxQi+7y7P5AcVPh1dcxnZBU2cfxHnPwS+u9+lZnXPsv30TQaF2xg+Tfg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^8.0.0", - "@babel/generator": "^8.0.0", - "@babel/helper-compilation-targets": "^8.0.0", - "@babel/helpers": "^8.0.0", - "@babel/parser": "^8.0.0", + "@babel/code-frame": "^8.0.6", + "@babel/generator": "^8.0.6", + "@babel/helper-compilation-targets": "^8.0.6", + "@babel/helpers": "^8.0.5", + "@babel/parser": "^8.0.6", "@babel/template": "^8.0.0", - "@babel/traverse": "^8.0.0", - "@babel/types": "^8.0.0", + "@babel/traverse": "^8.0.6", + "@babel/types": "^8.0.6", "@types/gensync": "^1.0.5", "convert-source-map": "^2.0.0", "empathic": "^2.0.1", @@ -2970,7 +3020,7 @@ "import-meta-resolve": "^4.2.0", "json5": "^2.2.3", "obug": "^2.1.1", - "semver": "^7.7.3" + "verkit": "^0.3.2" }, "engines": { "node": "^22.18.0 || >=24.11.0" @@ -2981,16 +3031,16 @@ } }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/@babel/generator": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0.tgz", - "integrity": "sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.6.tgz", + "integrity": "sha512-/pcanjdRsonCexCuxgGD8fKnBLLzk2i9uM4kmcmGyyev2R5YDs+rafMYZ89RvaGY1mW8T7C5au0TyYaEeHBGng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^8.0.0", - "@babel/types": "^8.0.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", + "@babel/parser": "^8.0.6", + "@babel/types": "^8.0.6", + "@jridgewell/gen-mapping": "0.4.0-beta.0", + "@jridgewell/trace-mapping": "^0.3.31", "@types/jsesc": "^2.5.0", "jsesc": "^3.0.2" }, @@ -2999,26 +3049,26 @@ } }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/@babel/helper-compilation-targets": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-8.0.0.tgz", - "integrity": "sha512-JwculLABZvyPvyLBpwU/E/IbH2uM3mnxNtIJpxnIfb24y1PrdVxK5Dqjle4DpgqpGRnwgC7G8IkzPdSXZrO1Ew==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-8.0.6.tgz", + "integrity": "sha512-HTrtZ4+iA0+kzdbCgvdSk1U4pEl3BvpGnlUbualCGNbrVhhQvhgBzurTUmqpWyvyHbWYWaIfdx2mOlL9LJjsew==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^8.0.0", + "@babel/compat-data": "^8.0.5", "@babel/helper-validator-option": "^8.0.0", "browserslist": "^4.24.0", - "lru-cache": "^11.0.0", - "semver": "^7.7.3" + "flru": "1.0.2", + "verkit": "^0.3.2" }, "engines": { "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/@babel/helper-globals": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-8.0.0.tgz", - "integrity": "sha512-lLozHOM6sWWlxNo8CYqHy4MBZeTvHXNgVPBfPOGsjPKUzHC2Az9QwB6gxdQmpwHl6GlQtbGgS+lj5887guDiLw==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-8.0.6.tgz", + "integrity": "sha512-OdnA/N52LhzFpeUuVz5YGuSWjc7TPHiFmVYZbPlSgExocO2GwbxVpSni9MVs5wwW+wZ4kPuwBEBN9pIPDYz1mA==", "dev": true, "license": "MIT", "engines": { @@ -3026,9 +3076,9 @@ } }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/@babel/helper-string-parser": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0.tgz", - "integrity": "sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.6.tgz", + "integrity": "sha512-+6HYEBnsDRZHJtUTAEfMQd0zMDqdFHS7C+5vAsEZqBUr3vEMWOWlHJ0Jz1gS8jJIlCvLsuA6ivmeoqzH936YcA==", "dev": true, "license": "MIT", "engines": { @@ -3036,9 +3086,9 @@ } }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/@babel/helper-validator-identifier": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.4.tgz", - "integrity": "sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.6.tgz", + "integrity": "sha512-HYx0YmuchRxRSpnjvcNffnPS8DCauKNmnumIuHG3jnQAVewRA7kfJGwF13ayEpSZs7s4R/oBH4eppuXcAQd5JQ==", "dev": true, "license": "MIT", "engines": { @@ -3056,27 +3106,27 @@ } }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/@babel/helpers": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-8.0.0.tgz", - "integrity": "sha512-wfbi91pM3py96oIiJEz7qIpyXDytgr9zQC1HEWwlGNVRAEmItuU/0a41ZUKu1sJGyhhOIpc4t5vk4PYzt8wpsg==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-8.0.5.tgz", + "integrity": "sha512-fQtPOXjYOYv85PIdwotp2TJGVYOycX0PQq+l844fFAxOULtBy8BVF35GyeueX0r4KvDthqPH5xAI1clQPk/2uA==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^8.0.0", - "@babel/types": "^8.0.0" + "@babel/types": "^8.0.5" }, "engines": { "node": "^22.18.0 || >=24.11.0" } }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/@babel/parser": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.4.tgz", - "integrity": "sha512-srpptsAkEbbNIC/q8nT7o+m6CQe8CJUTV/t7MYc9NnWlgYVtHOb7JH6SorxMhN0kuRJjVqXbKClG6xSbPtzz+g==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.6.tgz", + "integrity": "sha512-LpGDIYJAzc3Y3PT9x+FxBrGYu2PlWxLmyN7SwPTzaX0LSwEmFJBsRnPBqmaXF2r1v+Zhz6lNiEJ+7yKtM5+Ugg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^8.0.4" + "@babel/types": "^8.0.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -3101,18 +3151,18 @@ } }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/@babel/traverse": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-8.0.4.tgz", - "integrity": "sha512-bZnmqzGG8UZneG1lLxBoWIH0G6Gr1D846Yu4/3XnY6FhCndMR49u26nTY08u/dAxWmLWF9vGQOuC+84FfIUoeg==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-8.0.6.tgz", + "integrity": "sha512-ilYV+qLStGzSKLipJlETdvdtpK3rAuwfCmCoGKv15MU4EoeIuLkespSNoNLFGOPSciEHx9TLWtN5mv0fz5w5mQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^8.0.0", - "@babel/generator": "^8.0.0", - "@babel/helper-globals": "^8.0.0", - "@babel/parser": "^8.0.4", + "@babel/code-frame": "^8.0.6", + "@babel/generator": "^8.0.6", + "@babel/helper-globals": "^8.0.6", + "@babel/parser": "^8.0.6", "@babel/template": "^8.0.0", - "@babel/types": "^8.0.4", + "@babel/types": "^8.0.6", "obug": "^2.1.1" }, "engines": { @@ -3120,19 +3170,30 @@ } }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/@babel/types": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.4.tgz", - "integrity": "sha512-eY+Yn3dCqTGmyiq2QRU66lA5FL8lqqqvecHt0fF3uHONIa7ToYsaCiWV8lOKqAs0Rb2SjixiKFROngnulPtt2g==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.6.tgz", + "integrity": "sha512-c+xgSWboV2pdwXP67BUWDVRHi2BO5Q3KwxyFVs7taVTY+fsK47/L51ZXQoV9rozHJDNHvJ4v4WEsI/IlxV2l2A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^8.0.0", - "@babel/helper-validator-identifier": "^8.0.4" + "@babel/helper-string-parser": "^8.0.6", + "@babel/helper-validator-identifier": "^8.0.6" }, "engines": { "node": "^22.18.0 || >=24.11.0" } }, + "node_modules/@vitest/istanbul-lib-instrument/node_modules/@jridgewell/gen-mapping": { + "version": "0.4.0-beta.0", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.4.0-beta.0.tgz", + "integrity": "sha512-JdGNkbE4GlNPYQhM0L95fBQr7ctLZJ276QXQLTad4t1oSdnnCI3fDq9DW3BqYAWv8Wc3+HS+4Gsii1oPMCfz1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.6.0-beta.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@vitest/istanbul-lib-instrument/node_modules/js-tokens": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", @@ -3140,51 +3201,28 @@ "dev": true, "license": "MIT" }, - "node_modules/@vitest/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "11.5.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", - "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@vitest/istanbul-lib-instrument/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@vitest/istanbul-lib-report": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@vitest/istanbul-lib-report/-/istanbul-lib-report-1.0.1.tgz", - "integrity": "sha512-1EOLRfsTMnyAr3+kEAsP4o9dhaDlGPpD7H5iLBBeq//YpNB1VIahkPhB+eRp9N2Dkfw8oySROjE3yf9XDeaIkQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vitest/istanbul-lib-report/-/istanbul-lib-report-1.0.2.tgz", + "integrity": "sha512-gUsfXZJbzPamoIY5TvHFiMMoXESBrUMo+xqaj+rYrWI69+EnvRlYBlP96ZnHPY4vX8kyUpgAnFUCg5wZG/HkDQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/istanbul-lib-coverage": "1.0.1" + "@vitest/istanbul-lib-coverage": "1.0.2" }, "engines": { "node": ">=22" } }, "node_modules/@vitest/istanbul-lib-source-maps": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@vitest/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.0.1.tgz", - "integrity": "sha512-3/9S3YuBDg2X2+gM40jUTfwV66w8LrDUF/YPdqVElDwh/541cKSb8A7Eqd0N/Fza1FXeMp6XGzilLDEMOhk6Eg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vitest/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.0.2.tgz", + "integrity": "sha512-Ia3+9WDB5UKN940ztJ5LyhqDaS/It05Uh2VQ70KIPDWlOed2ZsJTJTyMb7x6OIW4eAwWSBFknpqJafJetTTXLw==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", - "@vitest/istanbul-lib-coverage": "1.0.1", + "@vitest/istanbul-lib-coverage": "1.0.2", "obug": "^2.1.4" }, "engines": { @@ -3192,14 +3230,14 @@ } }, "node_modules/@vitest/mocker": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.2.tgz", - "integrity": "sha512-Z5FS00Q1SJHkB35xATsmWGdQ5WA1/0MV3CDjqyv7GavHv1OfOj145MNfHOlHk7QLes21dKFDHr8EO2zvL+9WGA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.1.tgz", + "integrity": "sha512-6K1DoBNAPGvuOcSsGA4D6x+5zEEff/KmOOP3uetT2TrGpVfI+HRHRnJJfKi5ib/g1vx8IYHQD8s0pbJz8WQI7Q==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.31", - "@vitest/spy": "5.0.2", + "@vitest/spy": "5.0.1", "estree-walker": "^3.0.3", "magic-string": "^1.2.3" }, @@ -3230,9 +3268,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-5.0.2.tgz", - "integrity": "sha512-YHM+mQQ7N1ROHMugJ7P/M+fC/q1G4zs/iAMZZCvhHcY8WkwPQcXBHD+z18oz+808Cfa12K7jOr3XPQMcLIovjw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-5.0.1.tgz", + "integrity": "sha512-6guWwj5d9bguuefTOvJoq387tfpkzSv554YdUEGzjJH2PnnmvzTLQ1UQSuAk5wBFVhf2CUmy/S/palOcb6dmpA==", "dev": true, "license": "MIT", "dependencies": { @@ -3242,10 +3280,36 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/snapshot": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-5.0.1.tgz", + "integrity": "sha512-aEW4fuQVg1i3fnC781qvwxC5QNptUvb+JjIUfX1WuWJqkjCgpiU8+I89mMcJmxOPLdaGAwEPFFVk02rGKYexvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "5.0.1", + "@vitest/utils": "5.0.1", + "magic-string": "^1.2.3", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/magic-string": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.2.tgz", + "integrity": "sha512-vG+rjFRj1PqdIBozIxAGMjPlOhaVe+GXpbttY/iSK7rGcJRMlwNJO7dcUwmUqkymsFLJiNGI06t4D7Fr7yRC9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.6.0" + } + }, "node_modules/@vitest/spy": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.2.tgz", - "integrity": "sha512-Ijc7T1nT9efNb5LxvjaBrEqw3f/QwUv5EE0nKqZxgqsaV/FxAAZ8baGylA8X/Z2oS4Lp+K74Jr6dTJsDKxJDeg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.1.tgz", + "integrity": "sha512-rbto/mF/SGERxEgYOek7Xm6B9b+y+mVoo+f4b2LymYO8zM1b7uB5nHuhVMTP2hxdzgxvGiZYGxGIaMvL5y180Q==", "dev": true, "license": "MIT", "funding": { @@ -3253,13 +3317,13 @@ } }, "node_modules/@vitest/ui": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-5.0.2.tgz", - "integrity": "sha512-FRGWhLK/S+aaAtty/5d+jTtY5l+9pGNcjz6IHbyUiP3VWs6a+zIgU4lc1SzWCR7H+OXgetAI06i/VpCWQmVorQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-5.0.1.tgz", + "integrity": "sha512-7PvQu/X9/pQoHYfNLAYL22qsD4/+sx2k7zpUA7XvjW0sc40r3/r0lGZ2fsEyOHMuO8Q1KjiO1QQVjJdnWUy/WQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "5.0.2", + "@vitest/utils": "5.0.1", "fflate": "^0.8.3", "flatted": "^3.4.4", "pathe": "^2.0.3", @@ -3270,17 +3334,17 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "5.0.2" + "vitest": "5.0.1" } }, "node_modules/@vitest/utils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-5.0.2.tgz", - "integrity": "sha512-mgpUtxFhKeOKVaArBVHNJGdYHAeRh135o59l13uVmPUCS1OUtis5pBqXEgE25iqRgFqEBwXvJlkhknRsYnMeqg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-5.0.1.tgz", + "integrity": "sha512-E9+yEA+jsfaoxZcUHFzEqUrQcoNh2EwrPT5efIqkUPUwD5Ua2Li9BRWaYeRwvzvdLgTSVrre8oKNeyrfg7KkdQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "5.0.2", + "@vitest/pretty-format": "5.0.1", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.1" }, @@ -3288,24 +3352,10 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@yuku-codegen/binding-android-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-android-arm64/-/binding-android-arm64-0.9.4.tgz", - "integrity": "sha512-6ViGFAr+N2Yjnc8wBx16wJZGB0pGmClILO+FUC3kzwEydfjXQovWEdcFyl98RVtWdj9ahS41XXe2zKFl+L3uWg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@yuku-codegen/binding-darwin-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-arm64/-/binding-darwin-arm64-0.9.4.tgz", - "integrity": "sha512-0BTB70ha+wRsz6fI5HosevJpMmvgndmf+6ND1OneFKCrWhNzX/2xIQ36Z8rUgv5bpnWjKl6bRvzSFV3PU+WOlQ==", + "node_modules/@voidzero-dev/vite-plus-darwin-arm64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@voidzero-dev/vite-plus-darwin-arm64/-/vite-plus-darwin-arm64-1.0.0.tgz", + "integrity": "sha512-lR+0rHOCYQTUo4Un0Sy14Xi1NBqoPXRnhsRyc0Joe53fomZ+wPtgErk15tkvWQdSLGNOr8hDDWJKo/kzI0Y37w==", "cpu": [ "arm64" ], @@ -3314,12 +3364,15 @@ "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/@yuku-codegen/binding-darwin-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-x64/-/binding-darwin-x64-0.9.4.tgz", - "integrity": "sha512-9QVVqq8LCD6v+Gl099u32YJ0999HBCoe09ecIeifKTi4Y1azX44DkF9q9pP2lxgwRUvR3GmWl5k1pLe3ojR2rg==", + "node_modules/@voidzero-dev/vite-plus-darwin-x64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@voidzero-dev/vite-plus-darwin-x64/-/vite-plus-darwin-x64-1.0.0.tgz", + "integrity": "sha512-MW3YnWpYP6wxvpd5KLFYTdtHTcAVnN0mVoLrmA9KCKWfOzO8nanr8hpuyEIdLMQT3r/7VNKRvgROI0CZZDP9/A==", "cpu": [ "x64" ], @@ -3328,28 +3381,17 @@ "optional": true, "os": [ "darwin" - ] - }, - "node_modules/@yuku-codegen/binding-freebsd-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-freebsd-x64/-/binding-freebsd-x64-0.9.4.tgz", - "integrity": "sha512-Qm3ky33Em9w1XVSryq+D/arLVapeqp0Bu1719UGV6olmfp4kTD+NfsLG9bRx5hOJSu1Zl3r9LbyTP1oTmcHAsg==", - "cpu": [ - "x64" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/@yuku-codegen/binding-linux-arm-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.9.4.tgz", - "integrity": "sha512-euKmS7pnkeJylEN6+9bfu0jHtGfbQRfFBIpmTe8YVnWzQ5Rjyrns13+1kao2RSS9DNkucX1RXIdiTvQoDUXF0w==", + "node_modules/@voidzero-dev/vite-plus-linux-arm64-gnu": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@voidzero-dev/vite-plus-linux-arm64-gnu/-/vite-plus-linux-arm64-gnu-1.0.0.tgz", + "integrity": "sha512-n4onkD4oT+g4jLj9rR37TM4i2IbaYvIiU68p1A/5KrwnIHzbv2maO0BqBYdIRnBy1Mil8pIx9HsT8riWCjZeTw==", "cpu": [ - "arm" + "arm64" ], "dev": true, "libc": [ @@ -3359,14 +3401,17 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/@yuku-codegen/binding-linux-arm-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-musl/-/binding-linux-arm-musl-0.9.4.tgz", - "integrity": "sha512-7JTizi2O+ks9/dLPDLYmVLsYQUC9Fxu0e6LNA+F6FFQ/sV2o7owBb1eTccMKkgauWGGUpJYQvlXrCKpGwguvhA==", + "node_modules/@voidzero-dev/vite-plus-linux-arm64-musl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@voidzero-dev/vite-plus-linux-arm64-musl/-/vite-plus-linux-arm64-musl-1.0.0.tgz", + "integrity": "sha512-EZfgINa0FL/eIsLkL3MfQz7+Dc4VDAeIrf1UZDlitt//8NIOqI6nVMPnIFzMZThaIncIose+cVWsEkKLAKMM/A==", "cpu": [ - "arm" + "arm64" ], "dev": true, "libc": [ @@ -3376,14 +3421,17 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/@yuku-codegen/binding-linux-arm64-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.9.4.tgz", - "integrity": "sha512-f7eLYDwmcz56Jzvp8UmXUehFzTAn6hEHt64GDWNWGSqrphHRvWLEshQ+sQv8DfNpkXFaOQ49erl4gb2Wm0JM+A==", + "node_modules/@voidzero-dev/vite-plus-linux-x64-gnu": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@voidzero-dev/vite-plus-linux-x64-gnu/-/vite-plus-linux-x64-gnu-1.0.0.tgz", + "integrity": "sha512-R6+/oVLCSEvatOG1utYo0d0I++QPjWuRt2moD21+UUu2mQ8VyZHaaQLgoxrQG9shA9o0RBDmwxhGUXL20Rk1FA==", "cpu": [ - "arm64" + "x64" ], "dev": true, "libc": [ @@ -3393,14 +3441,17 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/@yuku-codegen/binding-linux-arm64-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.9.4.tgz", - "integrity": "sha512-bLdjCgo+u3dU3HH/t+WZ8FsAo2IgdOzruTHZ+XTFquj6j//QJjH9xfyRtu7h65lCT3CQVW9aGEe6/A/HPyA9KQ==", + "node_modules/@voidzero-dev/vite-plus-linux-x64-musl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@voidzero-dev/vite-plus-linux-x64-musl/-/vite-plus-linux-x64-musl-1.0.0.tgz", + "integrity": "sha512-B1Ottn22hn9RZ6XIVrWCXAAMfCOQRJ4KWoKbPL4JxC+UgvEiY9kC1ZFPqEAI89zIbW8eLdP3BeT14NQ0h1rtxw==", "cpu": [ - "arm64" + "x64" ], "dev": true, "libc": [ @@ -3410,49 +3461,221 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/@yuku-codegen/binding-linux-x64-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.9.4.tgz", - "integrity": "sha512-hDMB71QCDx2AAxhlCBgakngMAa4KK6f6rcTt9v8nrzoXs681cmZultGeZk0tjONxli+N+VMhXQUoiVCSJuKiQg==", + "node_modules/@voidzero-dev/vite-plus-win32-arm64-msvc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@voidzero-dev/vite-plus-win32-arm64-msvc/-/vite-plus-win32-arm64-msvc-1.0.0.tgz", + "integrity": "sha512-XXK6N5xMkGVIcqMaVDjqDh44z0Z00DA8dYn2BWUkFOQflUU1Z3IWt+bPm/1Y7LjkwBWj5qD2zsQY1ANDCeX9QA==", "cpu": [ - "x64" + "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "win32" + ], + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/@yuku-codegen/binding-linux-x64-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-musl/-/binding-linux-x64-musl-0.9.4.tgz", - "integrity": "sha512-uk1hOZA79AqziAH9A/eSD05VchNRdnLb6zxFGHhCbLYeeGYL+KOEL0+kCIPtaKuQ7wdxDOooiKE1D0jpaWQ0aA==", + "node_modules/@voidzero-dev/vite-plus-win32-x64-msvc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@voidzero-dev/vite-plus-win32-x64-msvc/-/vite-plus-win32-x64-msvc-1.0.0.tgz", + "integrity": "sha512-XabdwdAsJ9QqEVSpSOuiiyJjiEwbwOspGahei9svQUGjs7e8MPuj4y/ltBHJZpyCBdZI6fhlc7Xaps9bUtl7Og==", "cpu": [ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ - "linux" - ] + "win32" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@yuku-codegen/binding-android-arm64": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-android-arm64/-/binding-android-arm64-0.9.5.tgz", + "integrity": "sha512-jrOY5WM+AaAqkv51fHP1x28ifto4WgcZVzodLUyMU1jMWn5Sq+VciRdk/n8E0Ey5w4p4cWWE+m5GfXWOYh7Kzw==", + "cpu": [ + "arm64" + ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@yuku-codegen/binding-darwin-arm64": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-arm64/-/binding-darwin-arm64-0.9.5.tgz", + "integrity": "sha512-4O4lkCQIzPZGjiNB1GORSI6hBECbiiSBS/APZXPvNKYH+nhY4uuqv03LNXA+SET3hoBjvr95P5rIhY8KQaQUBA==", + "cpu": [ + "arm64" + ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@yuku-codegen/binding-darwin-x64": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-x64/-/binding-darwin-x64-0.9.5.tgz", + "integrity": "sha512-9EvoUO0SEhD6/d8VHdWuPerepPMSR1y84+UEgz8Un1Ope14Oe7xMvePpEQLTLovoIFZ8Zg3iZ8z8E11pZMqC3g==", + "cpu": [ + "x64" + ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@yuku-codegen/binding-freebsd-x64": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-freebsd-x64/-/binding-freebsd-x64-0.9.5.tgz", + "integrity": "sha512-HqT78WwgHTmp8lwujoUa9CrIortX4DdpuiVC18ZPSGvuuJf4ylpIEI6QrQEM78Zwz3muhAWAOXZ5irdiYY+AyA==", + "cpu": [ + "x64" + ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@yuku-codegen/binding-linux-arm-gnu": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.9.5.tgz", + "integrity": "sha512-QJXwIW6Ms3QIawbcBIedmrmXnfdpuAOjZJ/eAABq5XTzWvSxZ7lutu9W5yIHahlaTaFnBo7ikrVMD1szLTpPUw==", + "cpu": [ + "arm" + ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@yuku-codegen/binding-linux-arm-musl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-musl/-/binding-linux-arm-musl-0.9.5.tgz", + "integrity": "sha512-eHbFy3IHGb+IYarrYwAo0yWSEQV3eAmEn6VrsKA6I1Wy1YPJxWqSJlV69JhqsHtJuJlljUIF3ex0y46yaKIu9w==", + "cpu": [ + "arm" + ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@yuku-codegen/binding-linux-arm64-gnu": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.9.5.tgz", + "integrity": "sha512-ByoJMbySTaDhjAXSu8q6Lh7HKg3YoesXpcT72aYk0Aiw4PCznmY4ybpLTq0RCvp0RIPhFm/6yECFiGBwyCC1nw==", + "cpu": [ + "arm64" + ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@yuku-codegen/binding-linux-arm64-musl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.9.5.tgz", + "integrity": "sha512-gD9vfXIoBw1toSxhO9rgmSu/FEfy3PMznJAxVjIuH8DrWEiDKXmJO0pJKfj1Ltbe/TmtWVZR+TjISqeSIGQzMg==", + "cpu": [ + "arm64" + ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@yuku-codegen/binding-linux-x64-gnu": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.9.5.tgz", + "integrity": "sha512-BARvdnvqMGjOr5Iel2JH+9H5vAIE0R6H0Z2fsT02xrvmI/1ZXNB8lkuX+ZGevPhZb3zJ9WeC/R8JZstrsUOK5g==", + "cpu": [ + "x64" + ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@yuku-codegen/binding-linux-x64-musl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-musl/-/binding-linux-x64-musl-0.9.5.tgz", + "integrity": "sha512-x8flcevS1fbb7ESrmpOY/pON4eInSaE/7Ktjqx2udOE2W33BNSZmJuwpyUgo54AoHNqrcaM7szqydyJn5fNvew==", + "cpu": [ + "x64" + ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, "node_modules/@yuku-codegen/binding-win32-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-arm64/-/binding-win32-arm64-0.9.4.tgz", - "integrity": "sha512-IbZuNVrctjts5lAKUEd9ppnzvylaPdYBTv8AVDtY6EyQ5hpgUfsReqbqODJVGpn2/uIk1fa1jWP012orPoiK+A==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-arm64/-/binding-win32-arm64-0.9.5.tgz", + "integrity": "sha512-KOL/rBatWqH4ZpCNoF8ZtSNdOJbAxBJLmk/VeRciepGROPTbPum1A9t67GpFgOU7qrkUWlPJdJ+KHKbvbmOt+w==", "cpu": [ "arm64" ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", "dev": true, "license": "MIT", "optional": true, @@ -3461,12 +3684,13 @@ ] }, "node_modules/@yuku-codegen/binding-win32-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-x64/-/binding-win32-x64-0.9.4.tgz", - "integrity": "sha512-UqC4C0PlVAPEQ8fYr0AamuW2zKAkqQFiaaQ88Rl3YlzSNlshj+VmDoSbJRw4TFYL22+Vw53zDSJ95aXyjJN/aw==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-x64/-/binding-win32-x64-0.9.5.tgz", + "integrity": "sha512-FxENahEjWSan59Syh/us/Kf4wNq8qrJLFJ3R2N4Oiwtb6yNdz/rWLNTIoNSssnsp7IoWJdUP6o/Z8ppg7lXMcg==", "cpu": [ "x64" ], + "deprecated": "yuku-codegen is pure JavaScript since 0.14", "dev": true, "license": "MIT", "optional": true, @@ -3475,12 +3699,13 @@ ] }, "node_modules/@yuku-parser/binding-android-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-android-arm64/-/binding-android-arm64-0.9.4.tgz", - "integrity": "sha512-x+dZef5ulszaYzgjHLUgnhDXAgJsGfodl30JuTinfLN5mEyB50burpUuyUqufGQp0fpI/sHLAN3V8fuJteFEQQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-android-arm64/-/binding-android-arm64-0.9.5.tgz", + "integrity": "sha512-A2JCFCSHfnficqYEw4Iujpx7XrkMM3UfFcgJFmYpZSo9zM4nyhmdIIE0FogSduuU60lhM0/UcfuUBXIVNBMlGQ==", "cpu": [ "arm64" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", "dev": true, "license": "MIT", "optional": true, @@ -3489,12 +3714,13 @@ ] }, "node_modules/@yuku-parser/binding-darwin-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.9.4.tgz", - "integrity": "sha512-bSpjVPP8zTTcMZi78gxPkZZhVNbg4Doqsb2CrxHR2g+vZxP7Ey4GVzgD5nVYSHgS1y8dGULGW8AhPrfRWFEF6w==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.9.5.tgz", + "integrity": "sha512-3PiyU+Eare4YuKaQ22N98/yAiROPY5o/NQJHraICzDvk4pgS+m+bgLKOvkGBRn33OnV95Vdv1Mn38b+MQHpULQ==", "cpu": [ "arm64" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", "dev": true, "license": "MIT", "optional": true, @@ -3503,12 +3729,13 @@ ] }, "node_modules/@yuku-parser/binding-darwin-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-x64/-/binding-darwin-x64-0.9.4.tgz", - "integrity": "sha512-QNswJLBxsoDkghztrF0bUy+DEUoeX1lS4cL3dCM1IB4hfLoZ3Jf3jmCoggDnqN++sJ91F6w8oHiyQ4ZhUEr/bg==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-x64/-/binding-darwin-x64-0.9.5.tgz", + "integrity": "sha512-blFMAFI7AInI83XaiOF8cIeiRM46Nz9EfpZtZPRLbKxSA9aAr5v8aHYpmfN6NoyXxAv/10pwS4gsAuc1W6fy5Q==", "cpu": [ "x64" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", "dev": true, "license": "MIT", "optional": true, @@ -3517,12 +3744,13 @@ ] }, "node_modules/@yuku-parser/binding-freebsd-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.9.4.tgz", - "integrity": "sha512-D4rmGI0EOwxmKsv3+iGQDmtJ9/Oqr9wPxsQpONZ+QmxHqNbl+08XaJkhuC5wAg17bj6afcpdQfiIAoSMBY17Rw==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.9.5.tgz", + "integrity": "sha512-TsNuL4qsZdO0tHp5GW43Y5fHeLPpPHA675wdcPNTcdq2ZO5AvsQWFFoiDg8CH4oBktfsQ9tdvKhjLnLYwKvp4g==", "cpu": [ "x64" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", "dev": true, "license": "MIT", "optional": true, @@ -3531,12 +3759,13 @@ ] }, "node_modules/@yuku-parser/binding-linux-arm-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.9.4.tgz", - "integrity": "sha512-rZuqBxlaRnNY57nawRP1LPx4i+ieCrvIQkBsbGu/xjWkZGzFCrHPliy5YiMxp3Mw4v5KftAlDJx7c9jApNk2ww==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.9.5.tgz", + "integrity": "sha512-b0afYK5gHeV8RdmOcqAlgM8ONsye4cax4DMnIBaoJyPMd1UTGvTbpkqQcPVdhmHlcfcGVGMV1laeVovlr/dscw==", "cpu": [ "arm" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", "dev": true, "libc": [ "glibc" @@ -3548,12 +3777,13 @@ ] }, "node_modules/@yuku-parser/binding-linux-arm-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-musl/-/binding-linux-arm-musl-0.9.4.tgz", - "integrity": "sha512-0PRDvRZvh18Q1lADxs0RMtqYHTd3dD/o1WEnMO/K8o7V9Gmy/7nD3/HjGQCxFPxkHTp41toF+DsXgEandAc2Gw==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-musl/-/binding-linux-arm-musl-0.9.5.tgz", + "integrity": "sha512-fD3lKzl+r6j6n8DwiMY53qnh5DLqD8KJjCp+NbVud54Nnh3Q9Wprqss3YzyMHP3NSJk663Wlg1E1X5qOuFVFig==", "cpu": [ "arm" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", "dev": true, "libc": [ "musl" @@ -3565,12 +3795,13 @@ ] }, "node_modules/@yuku-parser/binding-linux-arm64-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.9.4.tgz", - "integrity": "sha512-CT1I24KFA/Tv/Exi1f+CVxafUIjlKm3gc51HbWLW7yf7OvJKCvKSja+EB17sDtYsS5a2EB9BTr8I5fPuDJ8rFA==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.9.5.tgz", + "integrity": "sha512-aRU/aCphV1MWCl/lvI6NX8LgucHQ68Fx+vz7NBb/5MEr2EuzCxiPOQqeFcMdWh+2AED/p0AvAREch0c+cSnlhA==", "cpu": [ "arm64" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", "dev": true, "libc": [ "glibc" @@ -3582,12 +3813,13 @@ ] }, "node_modules/@yuku-parser/binding-linux-arm64-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.9.4.tgz", - "integrity": "sha512-DP193Z3nUXQ92AwmmkIAhVLxv2qj8rWAAAODownCwUk0wKrmnyH9km9Gd4NSmntBYG/Kv0P5btN6qcO1JXgEdw==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.9.5.tgz", + "integrity": "sha512-5+Guro0l8H473YXlEjVNBRLN/IbPbJdnQh1zo0OLt49xxnON+XMJRRaEyTOTfkn9QSRg0+BhEKGR4W9Gu2uZJQ==", "cpu": [ "arm64" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", "dev": true, "libc": [ "musl" @@ -3599,12 +3831,13 @@ ] }, "node_modules/@yuku-parser/binding-linux-x64-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.9.4.tgz", - "integrity": "sha512-tjoxmuNz+xmSt/Or+US5aaKpRZcptQsWYaPtDp1/0QUvhyg8VS6mOrizKkzVBJKYVNZ7eDTleOBquYVm+Haz6w==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.9.5.tgz", + "integrity": "sha512-pwwSyV9q+GlvzSXlsMZBMlgk22L5bud714/vqZCdeUTivzeUVltQzUaf3IQXOGXdpc59JYTeuMCtbGquaAUoCA==", "cpu": [ "x64" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", "dev": true, "libc": [ "glibc" @@ -3616,12 +3849,13 @@ ] }, "node_modules/@yuku-parser/binding-linux-x64-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.9.4.tgz", - "integrity": "sha512-kHXf72EM6oHN58Swwruf9plXlCVY4mOlgqIjpXenEAY87cVcH3VxMZdCQG7rIKa+k0Hf3E/WS/8ufqZSCER7Gw==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.9.5.tgz", + "integrity": "sha512-z18j6JN3lBHH8vzN7gG1M8fI0nlgItSfnC9PfbmUbt97iHViKfw2iA2G9fGwRMe5LyPRZBrejIlapbygPbpdaw==", "cpu": [ "x64" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", "dev": true, "libc": [ "musl" @@ -3633,12 +3867,13 @@ ] }, "node_modules/@yuku-parser/binding-win32-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-arm64/-/binding-win32-arm64-0.9.4.tgz", - "integrity": "sha512-Yj6+bbGDZrLbzp1Qr7hiaIjYagslUrRy6t3TIxfiXUeJWNH8ydx7birM0UJiIInqUld0mk9qBz1kei/T8gcKvw==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-arm64/-/binding-win32-arm64-0.9.5.tgz", + "integrity": "sha512-s6Gwttb1dQvtPX6Bgkw+UPC9IO3UBDXc6Zezog8MMgvu3UfJBBB9TQqKBX/2quu0Eyh+lLSAyNlIyyecaagUPg==", "cpu": [ "arm64" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", "dev": true, "license": "MIT", "optional": true, @@ -3647,12 +3882,13 @@ ] }, "node_modules/@yuku-parser/binding-win32-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-x64/-/binding-win32-x64-0.9.4.tgz", - "integrity": "sha512-B9D+Z1/jVfoEd1SgbuaYTPH6onVlSsSaK151mW8Rb6Yv+OrTOocNnv2w3peBicS6MB3VI+mJG8YqxRI4ONd1OQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-x64/-/binding-win32-x64-0.9.5.tgz", + "integrity": "sha512-FrERt9YWatY3bJfSUdi4YWY+6iQcyo3MzCC821BxlWM5TFZEHijnpz/bknR79VHlXY/9CvXz8ZlaAGPsTtN3nw==", "cpu": [ "x64" ], + "deprecated": "yuku-parser runs on yuku-core since 0.14", "dev": true, "license": "MIT", "optional": true, @@ -3661,16 +3897,16 @@ ] }, "node_modules/@yuku-toolchain/types": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-toolchain/types/-/types-0.9.4.tgz", - "integrity": "sha512-dqnMswJWE7YBbPEvGstgFlWFTRn20V/Hu82XTDjWxzaU18rGpxBqxhKlBlgyWrPARRvNLIqY2XA6S9edR+2AsA==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@yuku-toolchain/types/-/types-0.9.5.tgz", + "integrity": "sha512-KiuLNNgX9uNealaWAR+G3/cMXnRk9x4TY2EkYe/KIag+UPdwiA0RRf1hr1WAxzTP8KGzCTkqUdLPvqh32sEO3w==", "dev": true, "license": "MIT" }, "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==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", "dev": true, "license": "MIT", "bin": { @@ -3707,6 +3943,29 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "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": { + "node": ">=8" + } + }, + "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", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/ansis": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.4.0.tgz", @@ -3717,6 +3976,16 @@ "node": ">=14" } }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -3762,9 +4031,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.11.17", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.17.tgz", - "integrity": "sha512-KAUDn1OSS0fmPlGO+NOUMRcOQ/b/shUBH3OgkG73mPgdf+JD/BQ6fHboGxNOxnUmlwcq+lLq3dTkayRPuSfXwg==", + "version": "2.11.27", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.27.tgz", + "integrity": "sha512-ElY12DaROGuan+lMmZ8Cvo/ZUbXPe7Enc/9VU/b1T3Kp4dwytRcNdR8DoSJN5SNJT/CuvcCA0DHDVmMOCePdRQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3788,9 +4057,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", - "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", + "version": "4.29.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.3.tgz", + "integrity": "sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==", "dev": true, "funding": [ { @@ -3808,11 +4077,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.11.12", - "caniuse-lite": "^1.0.30001809", - "electron-to-chromium": "^1.5.402", - "node-releases": "^2.0.53", - "update-browserslist-db": "^1.3.0" + "baseline-browser-mapping": "^2.11.26", + "caniuse-lite": "^1.0.30001813", + "electron-to-chromium": "^1.5.439", + "node-releases": "^2.0.57", + "update-browserslist-db": "^1.3.3" }, "bin": { "browserslist": "cli.js" @@ -3821,16 +4090,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/cac": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cac/-/cac-7.0.0.tgz", - "integrity": "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.19.0" - } - }, "node_modules/cacheable": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.5.0.tgz", @@ -3846,9 +4105,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001809", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", - "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", + "version": "1.0.30001814", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001814.tgz", + "integrity": "sha512-/Uaf1lAzr59XcMpW0o96WoEfr+VXK2OX4U9AgFoiSHsVJ4HppnIFUjtYzsyDH2+tgANaQb2/oxYGwCPapN1FpA==", "dev": true, "funding": [ { @@ -3899,9 +4158,9 @@ } }, "node_modules/chai": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.3.0.tgz", + "integrity": "sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==", "dev": true, "license": "MIT", "engines": { @@ -3970,13 +4229,16 @@ "license": "MIT" }, "node_modules/core-js": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz", - "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==", + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.50.0.tgz", + "integrity": "sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw==", "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, + "engines": { + "node": "*" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -4054,13 +4316,6 @@ "dev": true, "license": "MIT" }, - "node_modules/defu": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", - "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", - "dev": true, - "license": "MIT" - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -4105,6 +4360,13 @@ "node": ">=0.3.1" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, "node_modules/dompurify": { "version": "3.4.16", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.16.tgz", @@ -4116,27 +4378,6 @@ "@types/trusted-types": "^2.0.7" } }, - "node_modules/dts-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dts-resolver/-/dts-resolver-3.0.0.tgz", - "integrity": "sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - }, - "peerDependencies": { - "oxc-resolver": ">=11.0.0" - }, - "peerDependenciesMeta": { - "oxc-resolver": { - "optional": true - } - } - }, "node_modules/ecij": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/ecij/-/ecij-0.5.0.tgz", @@ -4154,16 +4395,16 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.412", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.412.tgz", - "integrity": "sha512-z4rMe3esBzlzovKHj4gxJnsCGZRK5l4baUvm+gCGJBPE+gsyUMKsuU9tnEUtI1dOebXz1ytAPGjvXhmQ7rIPwA==", + "version": "1.5.444", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.444.tgz", + "integrity": "sha512-5ss/uJfoDYDHT0lfJzT6FbcskIzROIOPf0BbbFkGcvDzoJU7i//9GDrwwIHQVmIsrAGiF3ihpADBRIsrEFt1rQ==", "dev": true, "license": "ISC" }, "node_modules/empathic": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.1.tgz", - "integrity": "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.1.0.tgz", + "integrity": "sha512-AnfC1ATldl49/cvZdLPDjBfrRNwbDO05aibiOtzQu3qtlbJtomNLhF30HEtn/7iBz50dlMECqATo3fG0LrdEgw==", "dev": true, "license": "MIT", "engines": { @@ -4279,19 +4520,6 @@ } }, "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": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/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==", @@ -4304,19 +4532,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/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": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/espree": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", @@ -4335,19 +4550,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/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/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", @@ -4461,6 +4663,24 @@ "url": "https://github.com/sponsors/wooorm" } }, + "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": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fflate": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", @@ -4514,9 +4734,19 @@ "dev": true, "license": "ISC" }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "node_modules/flru": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flru/-/flru-1.0.2.tgz", + "integrity": "sha512-kWyh8ADvHBFz6ua5xYOPnUroZTT/bwWfrCeL0Wj1dzG4/YOmOcfJ99W8dOVyyynJN35rZ9aCOtHChqQovV7yog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=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": { @@ -4548,22 +4778,6 @@ "node": ">=6.9.0" } }, - "node_modules/get-tsconfig": { - "version": "5.0.0-beta.6", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.6.tgz", - "integrity": "sha512-X6fBC0pmImC70gvX2zm56go9hx0MyoGVdG0tUCkg/D+Xnh5TJsOZ7iDbOdI3PvmtrDxnu1YdDufpK2QJX1Meqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "engines": { - "node": ">=20.20.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, "node_modules/github-slugger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", @@ -4571,6 +4785,19 @@ "dev": true, "license": "ISC" }, + "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": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/hashery": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", @@ -4584,13 +4811,6 @@ "node": ">=20" } }, - "node_modules/hookable": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz", - "integrity": "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==", - "dev": true, - "license": "MIT" - }, "node_modules/hookified": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", @@ -4634,19 +4854,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/import-without-cache": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/import-without-cache/-/import-without-cache-0.4.0.tgz", - "integrity": "sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -4688,9 +4895,9 @@ } }, "node_modules/isbot": { - "version": "5.1.40", - "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.40.tgz", - "integrity": "sha512-yNeeynhhtIVRBk12tBV4eHNxwB42HzR4Q3Ea7vCOiJhImGaAIdIMrbJtacQlBizGLjUPw+akkFI5Dn9T70XoVQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.2.2.tgz", + "integrity": "sha512-iQcBXcd+Rv/pkubRyGh2utW2j1oPG5hZY6TUhVPpqK4G+o3IbxpJNx04hgksjc/N7GK5pEorUxDeg31cFgEk/w==", "dev": true, "license": "Unlicense", "engines": { @@ -4790,9 +4997,9 @@ } }, "node_modules/katex": { - "version": "0.16.46", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.46.tgz", - "integrity": "sha512-WHy4Coo+bGZyH7NwJKHkS04YFsFcarWbAEOAC3EMndzdN6VSZqklLLIgfxzyaW9jDoeGYJX9SWbJPKpecox0Uw==", + "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", @@ -5103,19 +5310,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -5153,6 +5347,16 @@ "yallist": "^3.0.2" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -5164,9 +5368,9 @@ } }, "node_modules/magicast": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.4.tgz", - "integrity": "sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.5.tgz", + "integrity": "sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==", "dev": true, "license": "MIT", "dependencies": { @@ -5330,9 +5534,9 @@ } }, "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.1.tgz", + "integrity": "sha512-OuJHqvr455pwu2OaOrir7dbzqs4jlWKOtlu9L6GjcIjjQwNyw02VntQsr/Ek6/A13vgnXfUhBekWRUP1OkNivw==", "dev": true, "license": "MIT", "dependencies": { @@ -5416,9 +5620,9 @@ } }, "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==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.3.tgz", + "integrity": "sha512-wgyJtgUkUcdU7zci7uuwc/tzoAhm0TswWhaXuvnWolqug+8jY7bgNkBBL0dYBnHgc/tHL7lCzRdPsdUxUKKBqw==", "dev": true, "license": "MIT", "dependencies": { @@ -5427,8 +5631,10 @@ "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", + "micromark-util-character": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" }, @@ -5452,9 +5658,9 @@ } }, "node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.3.tgz", + "integrity": "sha512-oGYfQzHSG5dOMovQcJ3fyTmZlWAWpi0XA0sJwJs+i6OT88o1+Jtw/8z0CmdowSLxGhhFK89rQ/oXph/wN02PNw==", "dev": true, "funding": [ { @@ -5478,6 +5684,7 @@ "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-edit-map": "^1.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", @@ -5488,9 +5695,9 @@ } }, "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==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.4.tgz", + "integrity": "sha512-wxEeE8v8XVvOrxn1TZj74qYhAtTQsSqufHVS3uNVyT1MupXxhyaHk8/9xDNPh9BmL77QNDgWTkZ3RsYHB2ry7w==", "dev": true, "funding": [ { @@ -5508,18 +5715,19 @@ "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", + "micromark-factory-space": "^2.1.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", + "micromark-util-edit-map": "^1.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "micromark-util-types": "^2.0.3" } }, "node_modules/micromark-extension-frontmatter": { @@ -5618,9 +5826,9 @@ } }, "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==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.2.tgz", + "integrity": "sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==", "dev": true, "license": "MIT", "dependencies": { @@ -5733,9 +5941,9 @@ } }, "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.1.0.tgz", + "integrity": "sha512-fS8hnLIjnjvdQIj39Geug8wWsR0HrYZ43KShKxNfwT7t2LOHo/LbWZEzEaSOjwtjdCsjoE6syHhonEzW0zv0+Q==", "dev": true, "funding": [ { @@ -5926,6 +6134,26 @@ "micromark-util-symbol": "^2.0.0" } }, + "node_modules/micromark-util-edit-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-edit-map/-/micromark-util-edit-map-1.0.0.tgz", + "integrity": "sha512-Pa2ljlsEL6sVwFaYeyrOLSYbQt73JvGbPOYFq+9AElXiSnfI5Q4465RRZ1sHv7lDjDOnGRDDaqPXqClqWK/q1Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, "node_modules/micromark-util-encode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", @@ -6063,9 +6291,9 @@ "license": "MIT" }, "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==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.3.tgz", + "integrity": "sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==", "dev": true, "funding": [ { @@ -6080,13 +6308,13 @@ "license": "MIT" }, "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^5.0.5" + "brace-expansion": "^5.0.8" }, "engines": { "node": "18 || 20 || >=22" @@ -6113,9 +6341,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.18", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", - "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", "dev": true, "funding": [ { @@ -6139,9 +6367,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.53", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", - "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", + "version": "2.0.57", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.57.tgz", + "integrity": "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==", "dev": true, "license": "MIT", "engines": { @@ -6149,9 +6377,9 @@ } }, "node_modules/obug": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", - "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz", + "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==", "dev": true, "funding": [ "https://github.com/sponsors/sxzz", @@ -6366,10 +6594,20 @@ } }, "node_modules/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.2.0.tgz", + "integrity": "sha512-zJq6RP/5q+TO2OpFV3FHzlPnFjmkb7Nc99a5SNjJE+uu/PkpChs+NIZSSzbBoD+6kjiISXjfYdwj1ZRQ81dz/w==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "(MIT AND Zlib)" }, "node_modules/path-exists": { @@ -6495,49 +6733,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.1.1" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "jiti": ">=1.21.0", - "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6564,6 +6759,21 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6594,23 +6804,6 @@ "dev": true, "license": "MIT" }, - "node_modules/quansync": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-1.0.0.tgz", - "integrity": "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/antfu" - }, - { - "type": "individual", - "url": "https://github.com/sponsors/sxzz" - } - ], - "license": "MIT" - }, "node_modules/raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", @@ -6645,10 +6838,17 @@ "react": "^19.3.0" } }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, "node_modules/readdirp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", - "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", "dev": true, "license": "MIT", "engines": { @@ -6667,16 +6867,6 @@ "license": "MIT", "optional": true }, - "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": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, "node_modules/rgbcolor": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", @@ -6694,6 +6884,7 @@ "integrity": "sha512-qpSwIyz0jHQq5qXBTNxFmE6664rJ7O+4TvPFOiOaBSrz8IOHc1koKKSqTM2H6u1UG1+TveuC6vaDHKXFOvb1Kw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@oxc-project/types": "=0.151.0", "@rolldown/pluginutils": "^1.0.0" @@ -6722,48 +6913,6 @@ "@rolldown/binding-win32-x64-msvc": "1.2.11" } }, - "node_modules/rolldown-plugin-dts": { - "version": "0.28.5", - "resolved": "https://registry.npmjs.org/rolldown-plugin-dts/-/rolldown-plugin-dts-0.28.5.tgz", - "integrity": "sha512-yYd3C9CeJwqjOc9X23m0Tyxcqic491uLZlfg51szT287S8zCCqLR2uoySoElgqy2CLn7PdXcEo1dlkBs4n1WHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "dts-resolver": "^3.0.0", - "get-tsconfig": "5.0.0-beta.6", - "obug": "^2.1.4", - "yuku-ast": "^0.9.3", - "yuku-codegen": "^0.9.3", - "yuku-parser": "^0.9.3" - }, - "engines": { - "node": "^22.18.0 || ^24.11.0 || >=26.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - }, - "peerDependencies": { - "@typescript/native-preview": "*", - "@volar/typescript": "~2.4.0", - "rolldown": "^1.2.0", - "typescript": "^5.0.0 || ^6.0.0 || ~7.0.0", - "vue-tsc": "~3.2.0 || ~3.3.0" - }, - "peerDependenciesMeta": { - "@typescript/native-preview": { - "optional": true - }, - "@volar/typescript": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vue-tsc": { - "optional": true - } - } - }, "node_modules/scheduler": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", @@ -6782,9 +6931,9 @@ } }, "node_modules/seroval": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.6.7.tgz", - "integrity": "sha512-AeDcLh0yO2SFm9W71essgnSzLV9DI8ZH0x0knXn2DMnUZj728mpLbxjlbB6IqKCmqh8JA3cEqRyGoNkt584JcQ==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.6.8.tgz", + "integrity": "sha512-HlSgSAkTk4EqHcje1ptJjfZi1YDv5KbhVJ/d3P7T/nAXua2VmDu+AKDX5VTdFfZf48nDkWB2TKYt0DrCSa+3wg==", "dev": true, "license": "MIT", "engines": { @@ -6792,9 +6941,9 @@ } }, "node_modules/seroval-plugins": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.6.7.tgz", - "integrity": "sha512-4Nk35ttD3DTDJW4hgw5StsVAPeU6qnDFnULAouw6tQ7oLTV/ICXrWpsXo2EE52eSP2joUMazbVf52mFEcADqRw==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.6.8.tgz", + "integrity": "sha512-N7mWAMydj89EnYTHtRpS3LBrAz3J9O6oVrqpuXuvlAHfAUG8WEKqtbAd7SBiJNY5NfCAFhSdyAh7wI4Shjqy4g==", "dev": true, "license": "MIT", "engines": { @@ -6827,6 +6976,13 @@ "node": ">=8" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, "node_modules/sirv": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", @@ -6843,15 +6999,22 @@ } }, "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, "node_modules/stackblur-canvas": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", @@ -6864,9 +7027,9 @@ } }, "node_modules/std-env": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", - "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.3.0.tgz", + "integrity": "sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==", "dev": true, "license": "MIT" }, @@ -6929,24 +7092,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/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": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, "node_modules/tinypool": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-2.1.2.tgz", @@ -6958,9 +7103,9 @@ } }, "node_modules/tinyrainbow": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", - "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.2.0.tgz", + "integrity": "sha512-LgO3D9yZJjApUiuUfl9iFAwrtaX4+lok3wJIqttGoKCHlWUqHqbQpnxCf82L8FjgKsh4iGo78hqJwgL8F6To2A==", "dev": true, "license": "MIT", "engines": { @@ -6977,98 +7122,6 @@ "node": ">=6" } }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tsdown": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.23.0.tgz", - "integrity": "sha512-BaT+ep1xnj5hdyICLd5r5SYYE+TXnI1ATePLykv9vcKpHpFTWUWRH+x1AF/E2qcu3YB6+vI8IdyxIIIffEqw5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "cac": "^7.0.0", - "defu": "^6.1.7", - "empathic": "^2.0.1", - "hookable": "^6.1.1", - "import-without-cache": "^0.4.0", - "obug": "^2.1.4", - "picomatch": "^4.0.7", - "rolldown": "~1.2.7", - "rolldown-plugin-dts": "^0.28.5", - "tinyexec": "^1.3.1", - "tinyglobby": "^0.2.17", - "tree-kill": "^1.2.2", - "unconfig-core": "^7.5.0", - "verkit": "^0.4.0" - }, - "bin": { - "tsdown": "dist/run.mjs" - }, - "engines": { - "node": "^22.18.0 || ^24.11.0 || >=26.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - }, - "peerDependencies": { - "@arethetypeswrong/core": "^0.18.1", - "@tsdown/css": "0.23.0", - "@tsdown/exe": "0.23.0", - "@vitejs/devtools": "*", - "publint": "^0.3.8", - "tsx": "*", - "typescript": "^5.0.0 || ^6.0.0 || ^7.0.0", - "unplugin-unused": ">=0.5.0", - "unrun": "*" - }, - "peerDependenciesMeta": { - "@arethetypeswrong/core": { - "optional": true - }, - "@tsdown/css": { - "optional": true - }, - "@tsdown/exe": { - "optional": true - }, - "@vitejs/devtools": { - "optional": true - }, - "publint": { - "optional": true - }, - "tsx": { - "optional": true - }, - "typescript": { - "optional": true - }, - "unplugin-unused": { - "optional": true - }, - "unrun": { - "optional": true - } - } - }, - "node_modules/tsdown/node_modules/tinyexec": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz", - "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7117,20 +7170,6 @@ "@typescript/typescript-win32-x64": "7.0.2" } }, - "node_modules/unconfig-core": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/unconfig-core/-/unconfig-core-7.5.0.tgz", - "integrity": "sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@quansync/fs": "^1.0.0", - "quansync": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/undici-types": { "version": "8.9.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", @@ -7213,14 +7252,14 @@ } }, "node_modules/unplugin": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-3.3.0.tgz", - "integrity": "sha512-qa66K+crbfyE6JK10GjvbJeRrOsuC/JpbnHctfyp/i4oBTxWOzJfRZyDiOk1PtErMFRu8JhsU/wPvOdBNWe5Rg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-3.4.0.tgz", + "integrity": "sha512-9skdIFlCsPdFV7wUfZxNsFInlW+7nJmGu2gkTu0OUhF56aXGsHab9x52/QhdJ4lC7ZDPWTxbiC4ANqVlsuaW3w==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.5", - "picomatch": "^4.0.4", + "picomatch": "^4.0.7", "webpack-virtual-modules": "^0.6.2" }, "engines": { @@ -7228,6 +7267,7 @@ }, "peerDependencies": { "@farmfe/core": "*", + "@rsbuild/core": "*", "@rspack/core": "*", "bun-types-no-globals": "*", "esbuild": "*", @@ -7241,6 +7281,9 @@ "@farmfe/core": { "optional": true }, + "@rsbuild/core": { + "optional": true + }, "@rspack/core": { "optional": true }, @@ -7268,9 +7311,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", - "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", "dev": true, "funding": [ { @@ -7330,9 +7373,9 @@ } }, "node_modules/verkit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.4.0.tgz", - "integrity": "sha512-sXMwN6DMHeouPfCxkxWkKAmxphWKEenHYY5H1nIBzU3PmDsmJp6kBXJdshjVdpMZuWCmL9SH7KFRx29AylpP6g==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.3.2.tgz", + "integrity": "sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==", "dev": true, "license": "MIT", "engines": { @@ -7343,45 +7386,57 @@ } }, "node_modules/vite": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.1.tgz", - "integrity": "sha512-/bvH9E9tmCXRGp2uXY3WbOldqpTwFkbha/8ANaEQ6VkxhH60KyqLwgZq6lG2y+4uT55x9+9eUHMpQ7uGnOCKjA==", + "name": "@voidzero-dev/vite-plus-core", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@voidzero-dev/vite-plus-core/-/vite-plus-core-1.0.0.tgz", + "integrity": "sha512-GHCd6d7h3JVojI/yxe/EAHwX5gn+OI7G932VBnYoTiwATLJrvHOs+okx7Ek2LGEJ57NJRENwCFgVYefjwPLfFA==", "dev": true, "license": "MIT", "dependencies": { + "@oxc-project/runtime": "=0.151.0", + "@oxc-project/types": "=0.151.0", "lightningcss": "^1.33.0", - "picomatch": "^4.0.7", - "postcss": "^8.5.28", - "rolldown": "~1.2.9", - "tinyglobby": "^0.2.17" - }, - "bin": { - "vite": "bin/vite.js" + "postcss": "^8.5.6", + "yuku-codegen": "^0.9.3", + "yuku-parser": "^0.9.3" }, "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" + "node": "^20.19.0 || ^22.18.0 || >=24.11.0" }, "optionalDependencies": { + "@voidzero-dev/vite-plus-darwin-arm64": "1.0.0", + "@voidzero-dev/vite-plus-darwin-x64": "1.0.0", + "@voidzero-dev/vite-plus-linux-arm64-gnu": "1.0.0", + "@voidzero-dev/vite-plus-linux-arm64-musl": "1.0.0", + "@voidzero-dev/vite-plus-linux-x64-gnu": "1.0.0", + "@voidzero-dev/vite-plus-linux-x64-musl": "1.0.0", + "@voidzero-dev/vite-plus-win32-arm64-msvc": "1.0.0", + "@voidzero-dev/vite-plus-win32-x64-msvc": "1.0.0", "fsevents": "~2.3.3" }, "peerDependencies": { + "@arethetypeswrong/core": "^0.18.1", "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.7.1", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", + "publint": "^0.3.8", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", + "typescript": "^5.0.0 || ^6.0.0 || ^7.0.0", + "unplugin-unused": ">=0.5.0", + "unrun": "*", "yaml": "^2.4.2" }, "peerDependenciesMeta": { + "@arethetypeswrong/core": { + "optional": true + }, "@types/node": { "optional": true }, @@ -7397,6 +7452,9 @@ "less": { "optional": true }, + "publint": { + "optional": true + }, "sass": { "optional": true }, @@ -7415,20 +7473,81 @@ "tsx": { "optional": true }, + "typescript": { + "optional": true + }, + "unplugin-unused": { + "optional": true + }, + "unrun": { + "optional": true + }, "yaml": { "optional": true } } }, + "node_modules/vite-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vite-plus/-/vite-plus-1.0.0.tgz", + "integrity": "sha512-2ezzBWt+AVO+I2F9Cpb2Of0J12Lat35kWZ/FRL2monMnKZuACKfkYAA/nMqdDo1KwB8sWjTKzmD9mRCh1Q1n+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.151.0", + "@oxlint/plugins": "=1.79.0", + "@vitest/browser": "5.0.1", + "@vitest/browser-preview": "5.0.1", + "@vitest/mocker": "5.0.1", + "@vitest/pretty-format": "5.0.1", + "@vitest/snapshot": "5.0.1", + "@vitest/spy": "5.0.1", + "@vitest/utils": "5.0.1", + "oxfmt": "=0.70.0", + "oxlint": "=1.85.0", + "oxlint-tsgolint": "=7.0.2003", + "vite": "npm:@voidzero-dev/vite-plus-core@1.0.0", + "vitest": "5.0.1" + }, + "bin": { + "vp": "bin/vp", + "vpr": "bin/vpr" + }, + "engines": { + "node": "^22.18.0 || ^24.11.0 || >=26.0.0" + }, + "optionalDependencies": { + "@voidzero-dev/vite-plus-darwin-arm64": "1.0.0", + "@voidzero-dev/vite-plus-darwin-x64": "1.0.0", + "@voidzero-dev/vite-plus-linux-arm64-gnu": "1.0.0", + "@voidzero-dev/vite-plus-linux-arm64-musl": "1.0.0", + "@voidzero-dev/vite-plus-linux-x64-gnu": "1.0.0", + "@voidzero-dev/vite-plus-linux-x64-musl": "1.0.0", + "@voidzero-dev/vite-plus-win32-arm64-msvc": "1.0.0", + "@voidzero-dev/vite-plus-win32-x64-msvc": "1.0.0" + }, + "peerDependencies": { + "@vitest/browser-playwright": "5.0.1", + "@vitest/browser-webdriverio": "^5.0.0-beta.5 || >=5.0.0" + }, + "peerDependenciesMeta": { + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + } + } + }, "node_modules/vitest": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.2.tgz", - "integrity": "sha512-7MQrx9pDv5aHiUcovIb/70Ys3tgtkUVgCtledvKdCmEO+/1Dicq5ZqoSxOW034m03oqC+oHOKui2dM6qtMLoJg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.1.tgz", + "integrity": "sha512-iA95lQbKEkvrtTkdAgnWbXfbipWiiWe/hDl2P5tMi6WFwD76G0NxXAGp/M9EOcYupeGJRr6wppMc7CoA41TQjg==", "dev": true, "license": "MIT", "dependencies": { "@types/chai": "^5.2.2", - "@vitest/mocker": "5.0.2", + "@vitest/mocker": "5.0.1", "chai": "^6.2.2", "es-module-lexer": "^2.3.2", "expect-type": "^1.4.0", @@ -7436,10 +7555,10 @@ "obug": "^2.1.4", "picomatch": "^4.0.7", "std-env": "^4.2.0", - "tinybench": "^6.1.4", - "tinyexec": "^1.3.0", + "tinybench": "6.1.4", + "tinyexec": "1.3.0", "tinyglobby": "^0.2.17", - "why-is-node-running": "^3.2.1" + "why-is-node-running": "^2.3.0" }, "bin": { "vitest": "vitest.mjs" @@ -7454,12 +7573,12 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "5.0.2", - "@vitest/browser-preview": "5.0.2", + "@vitest/browser-playwright": "5.0.1", + "@vitest/browser-preview": "5.0.1", "@vitest/browser-webdriverio": "^5.0.0-beta.5 || >=5.0.0", - "@vitest/coverage-istanbul": "5.0.2", - "@vitest/coverage-v8": "5.0.2", - "@vitest/ui": "5.0.2", + "@vitest/coverage-istanbul": "5.0.1", + "@vitest/coverage-v8": "5.0.1", + "@vitest/ui": "5.0.1", "happy-dom": "*", "jsdom": "*", "vite": "^6.4.0 || ^7.0.0 || ^8.0.0" @@ -7529,13 +7648,13 @@ } }, "node_modules/vitest/node_modules/magic-string": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.2.3.tgz", - "integrity": "sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.2.tgz", + "integrity": "sha512-vG+rjFRj1PqdIBozIxAGMjPlOhaVe+GXpbttY/iSK7rGcJRMlwNJO7dcUwmUqkymsFLJiNGI06t4D7Fr7yRC9g==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" + "@jridgewell/sourcemap-codec": "^1.6.0" } }, "node_modules/webpack-virtual-modules": { @@ -7562,16 +7681,20 @@ } }, "node_modules/why-is-node-running": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-3.2.2.tgz", - "integrity": "sha512-NKUzAelcoCXhXL4dJzKIwXeR8iEVqsA0Lq6Vnd0UXvgaKbzVo4ZTHROF2Jidrv+SgxOQ03fMinnNhzZATxOD3A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, "bin": { "why-is-node-running": "cli.js" }, "engines": { - "node": ">=20.11" + "node": ">=8" } }, "node_modules/word-wrap": { @@ -7627,62 +7750,62 @@ } }, "node_modules/yuku-ast": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/yuku-ast/-/yuku-ast-0.9.4.tgz", - "integrity": "sha512-AeeHDopMAy2mMafUMEIZxmQaCJOPEvBGDSSA23y5iKuzak3H2otfmgo4ObJubuzdHlJrv4eFY3KQ5XZOru5gpw==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/yuku-ast/-/yuku-ast-0.9.5.tgz", + "integrity": "sha512-Q8qW8WwQnN5Cm0ZZivdRIfv0sRLTjUq0YumXJkw8CYN1aCdICH9rk4C47/4n6kA5EqDtlj+F608twoTSV2MwdQ==", "dev": true, "license": "MIT", "dependencies": { - "@yuku-toolchain/types": "^0.9.4" + "@yuku-toolchain/types": "^0.9.5" } }, "node_modules/yuku-codegen": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/yuku-codegen/-/yuku-codegen-0.9.4.tgz", - "integrity": "sha512-pPr8xA8wBjrebER5VFeqS1XqATED1dQXU7JoAectAi1RBG4YFJz5yBirnmmmHZHldgnMKs/pMGkDtwGVQX+Efg==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/yuku-codegen/-/yuku-codegen-0.9.5.tgz", + "integrity": "sha512-zGUVyDpSK4b6c9B0yyxi2P0wujn1XZTbG9dCb7d6gyAoP63EMgyLzUwPUvwxPG5jgYqhlI7w+S3oCyapqGr4PA==", "dev": true, "license": "MIT", "dependencies": { - "@yuku-toolchain/types": "^0.9.4" + "@yuku-toolchain/types": "^0.9.5" }, "optionalDependencies": { - "@yuku-codegen/binding-android-arm64": "0.9.4", - "@yuku-codegen/binding-darwin-arm64": "0.9.4", - "@yuku-codegen/binding-darwin-x64": "0.9.4", - "@yuku-codegen/binding-freebsd-x64": "0.9.4", - "@yuku-codegen/binding-linux-arm-gnu": "0.9.4", - "@yuku-codegen/binding-linux-arm-musl": "0.9.4", - "@yuku-codegen/binding-linux-arm64-gnu": "0.9.4", - "@yuku-codegen/binding-linux-arm64-musl": "0.9.4", - "@yuku-codegen/binding-linux-x64-gnu": "0.9.4", - "@yuku-codegen/binding-linux-x64-musl": "0.9.4", - "@yuku-codegen/binding-win32-arm64": "0.9.4", - "@yuku-codegen/binding-win32-x64": "0.9.4" + "@yuku-codegen/binding-android-arm64": "0.9.5", + "@yuku-codegen/binding-darwin-arm64": "0.9.5", + "@yuku-codegen/binding-darwin-x64": "0.9.5", + "@yuku-codegen/binding-freebsd-x64": "0.9.5", + "@yuku-codegen/binding-linux-arm-gnu": "0.9.5", + "@yuku-codegen/binding-linux-arm-musl": "0.9.5", + "@yuku-codegen/binding-linux-arm64-gnu": "0.9.5", + "@yuku-codegen/binding-linux-arm64-musl": "0.9.5", + "@yuku-codegen/binding-linux-x64-gnu": "0.9.5", + "@yuku-codegen/binding-linux-x64-musl": "0.9.5", + "@yuku-codegen/binding-win32-arm64": "0.9.5", + "@yuku-codegen/binding-win32-x64": "0.9.5" } }, "node_modules/yuku-parser": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/yuku-parser/-/yuku-parser-0.9.4.tgz", - "integrity": "sha512-VWnoJzdB2g1JjsMEcB2MxSLoDbgISgOiNRsgiR0qrQKiUw2yyzEfYEYkNHSMNhdGkSo7gtmcN+2UOczzGDLAuw==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/yuku-parser/-/yuku-parser-0.9.5.tgz", + "integrity": "sha512-IBnAdNVMswWbJcM7woPluOudectJzFjJ1N8jVRxP9Uq4CIv5hZdBIcdmtRbFDYF/Ph2j2gVup4YJ4N9mh0jYFA==", "dev": true, "license": "MIT", "dependencies": { - "@yuku-toolchain/types": "^0.9.4", - "yuku-ast": "^0.9.4" + "@yuku-toolchain/types": "^0.9.5", + "yuku-ast": "^0.9.5" }, "optionalDependencies": { - "@yuku-parser/binding-android-arm64": "0.9.4", - "@yuku-parser/binding-darwin-arm64": "0.9.4", - "@yuku-parser/binding-darwin-x64": "0.9.4", - "@yuku-parser/binding-freebsd-x64": "0.9.4", - "@yuku-parser/binding-linux-arm-gnu": "0.9.4", - "@yuku-parser/binding-linux-arm-musl": "0.9.4", - "@yuku-parser/binding-linux-arm64-gnu": "0.9.4", - "@yuku-parser/binding-linux-arm64-musl": "0.9.4", - "@yuku-parser/binding-linux-x64-gnu": "0.9.4", - "@yuku-parser/binding-linux-x64-musl": "0.9.4", - "@yuku-parser/binding-win32-arm64": "0.9.4", - "@yuku-parser/binding-win32-x64": "0.9.4" + "@yuku-parser/binding-android-arm64": "0.9.5", + "@yuku-parser/binding-darwin-arm64": "0.9.5", + "@yuku-parser/binding-darwin-x64": "0.9.5", + "@yuku-parser/binding-freebsd-x64": "0.9.5", + "@yuku-parser/binding-linux-arm-gnu": "0.9.5", + "@yuku-parser/binding-linux-arm-musl": "0.9.5", + "@yuku-parser/binding-linux-arm64-gnu": "0.9.5", + "@yuku-parser/binding-linux-arm64-musl": "0.9.5", + "@yuku-parser/binding-linux-x64-gnu": "0.9.5", + "@yuku-parser/binding-linux-x64-musl": "0.9.5", + "@yuku-parser/binding-win32-arm64": "0.9.5", + "@yuku-parser/binding-win32-x64": "0.9.5" } }, "node_modules/zod": { diff --git a/package.json b/package.json index 06a8f4b073..38c7f72d57 100644 --- a/package.json +++ b/package.json @@ -33,49 +33,32 @@ } }, "scripts": { - "start": "vite serve --clearScreen false", - "preview": "vite preview", - "build:website": "vite build", - "build": "tsdown", - "test": "vitest run --project browser --project node", - "test:watch": "vitest watch --project browser --project node", - "test:ci": "vitest run", - "test:ci:update": "vitest run --project visual --update", - "format": "oxfmt", - "format:check": "oxfmt --check", - "lint": "oxlint", - "lint:md": "eslint --max-warnings 0", - "lint:fix": "oxlint --fix && eslint --fix", - "typecheck": "tsc --build" + "prepare": "vp config" }, "devDependencies": { "@eslint/markdown": "^8.0.1", "@faker-js/faker": "^10.3.0", "@tanstack/react-router": "^1.166.7", "@tanstack/router-plugin": "^1.166.7", - "@tsdown/css": "^0.23.0", "@types/node": "^26.0.0", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "@vitejs/plugin-react": "^6.1.1", - "@vitest/browser-playwright": "^5.0.0", - "@vitest/coverage-istanbul": "^5.0.0", + "@vitest/browser-playwright": "5.0.1", + "@vitest/coverage-istanbul": "5.0.1", "clsx": "^2.1.1", "ecij": "^0.5.0", "eslint": "^10.2.1", "jspdf": "^4.2.0", "jspdf-autotable": "^5.0.7", "oxc-transform-react": "^0.151.0", - "oxfmt": "^0.70.0", - "oxlint": "^1.80.0", - "oxlint-tsgolint": "^7.0.2001", "playwright": "^1.62.1", "react": "^19.3.0", "react-dom": "^19.3.0", - "tsdown": "^0.23.0", "typescript": "^7.0.2", - "vite": "^8.1.0", - "vitest": "^5.0.0", + "vite": "npm:@voidzero-dev/vite-plus-core@1.0.0", + "vite-plus": "1.0.0", + "vitest": "5.0.1", "vitest-browser-react": "^2.3.0" }, "peerDependencies": { @@ -83,13 +66,23 @@ "react-dom": "^19.2" }, "overrides": { - "oxc-transform-react": "$oxc-transform-react" + "oxc-transform-react": "$oxc-transform-react", + "vite": "npm:@voidzero-dev/vite-plus-core@1.0.0", + "vitest": "5.0.1" }, "devEngines": { + "packageManager": { + "name": "npm", + "version": "^12.2.0", + "onFail": "download" + }, "runtime": { "name": "node", - "version": "^26.0.0", - "onFail": "warn" + "version": "^26.10.0", + "onFail": "download" } + }, + "allowScripts": { + "core-js": false } } diff --git a/test/browser/TreeDataGrid.test.tsx b/test/browser/TreeDataGrid.test.tsx index 8c825013a9..96a5ff79e0 100644 --- a/test/browser/TreeDataGrid.test.tsx +++ b/test/browser/TreeDataGrid.test.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import type { Column } from '../../src'; import { renderTextEditor, SelectColumn, TreeDataGrid } from '../../src'; diff --git a/test/browser/column/cellClass.test.ts b/test/browser/column/cellClass.test.ts index e9bf7fbe54..e87c505340 100644 --- a/test/browser/column/cellClass.test.ts +++ b/test/browser/column/cellClass.test.ts @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import type { Column } from '../../../src'; import { cellClassname } from '../../../src/style/cell'; diff --git a/test/browser/column/colSpan.test.ts b/test/browser/column/colSpan.test.ts index 4f05658930..a5b1855eed 100644 --- a/test/browser/column/colSpan.test.ts +++ b/test/browser/column/colSpan.test.ts @@ -1,4 +1,4 @@ -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import type { Column } from '../../../src'; import { getCellsAtRowIndex, safeTab, setup, validateCellPosition } from '../utils'; diff --git a/test/browser/column/draggable.test.ts b/test/browser/column/draggable.test.ts index 9de5c0cdca..0b9d9597b3 100644 --- a/test/browser/column/draggable.test.ts +++ b/test/browser/column/draggable.test.ts @@ -1,4 +1,4 @@ -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import type { Column } from '../../../src'; import { setup } from '../utils'; diff --git a/test/browser/column/endFrozen.test.ts b/test/browser/column/endFrozen.test.ts index 9eae3788e5..6c42a8b092 100644 --- a/test/browser/column/endFrozen.test.ts +++ b/test/browser/column/endFrozen.test.ts @@ -1,4 +1,4 @@ -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import type { Column } from '../../../src'; import { diff --git a/test/browser/column/grouping.test.ts b/test/browser/column/grouping.test.ts index d414e82b04..bb161b893d 100644 --- a/test/browser/column/grouping.test.ts +++ b/test/browser/column/grouping.test.ts @@ -1,4 +1,4 @@ -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import type { ColumnOrColumnGroup } from '../../../src'; import { safeTab, setup, testCount, validateCellPosition } from '../utils'; diff --git a/test/browser/column/headerCellClass.test.ts b/test/browser/column/headerCellClass.test.ts index 3533915134..9ceef76abd 100644 --- a/test/browser/column/headerCellClass.test.ts +++ b/test/browser/column/headerCellClass.test.ts @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import type { Column, ColumnGroup } from '../../../src'; import { cellClassname } from '../../../src/style/cell'; diff --git a/test/browser/column/name.test.tsx b/test/browser/column/name.test.tsx index 137a67fcf7..685751a354 100644 --- a/test/browser/column/name.test.tsx +++ b/test/browser/column/name.test.tsx @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import type { Column } from '../../../src'; import { setup } from '../utils'; diff --git a/test/browser/column/renderCell.test.tsx b/test/browser/column/renderCell.test.tsx index 4b36de5dca..6d5e338cee 100644 --- a/test/browser/column/renderCell.test.tsx +++ b/test/browser/column/renderCell.test.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import { DataGrid } from '../../../src'; import type { Column } from '../../../src'; diff --git a/test/browser/column/renderEditCell.test.tsx b/test/browser/column/renderEditCell.test.tsx index 7326feed1c..6bf499544e 100644 --- a/test/browser/column/renderEditCell.test.tsx +++ b/test/browser/column/renderEditCell.test.tsx @@ -1,6 +1,6 @@ import { useMemo, useState } from 'react'; import { createPortal } from 'react-dom'; -import { page, server, userEvent } from 'vitest/browser'; +import { page, server, userEvent } from 'vite-plus/test/browser'; import { DataGrid } from '../../../src'; import type { Column, DataGridProps } from '../../../src'; diff --git a/test/browser/column/renderHeaderCell.test.tsx b/test/browser/column/renderHeaderCell.test.tsx index a22af61a5c..0a254000c7 100644 --- a/test/browser/column/renderHeaderCell.test.tsx +++ b/test/browser/column/renderHeaderCell.test.tsx @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import type { Column } from '../../../src'; import { setup } from '../utils'; diff --git a/test/browser/column/renderSummaryCell.test.tsx b/test/browser/column/renderSummaryCell.test.tsx index dabc7eeabe..540d57c82a 100644 --- a/test/browser/column/renderSummaryCell.test.tsx +++ b/test/browser/column/renderSummaryCell.test.tsx @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import type { Column } from '../../../src'; import { setup } from '../utils'; diff --git a/test/browser/column/resizable.test.tsx b/test/browser/column/resizable.test.tsx index 65d5d129eb..39901e121f 100644 --- a/test/browser/column/resizable.test.tsx +++ b/test/browser/column/resizable.test.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { commands, page, server, userEvent } from 'vitest/browser'; +import { commands, page, server, userEvent } from 'vite-plus/test/browser'; import { DataGrid, type Column, type ColumnWidth, type ColumnWidths } from '../../../src'; import { setup } from '../utils'; diff --git a/test/browser/column/startFrozen.test.ts b/test/browser/column/startFrozen.test.ts index 40092f1212..fa834d5a85 100644 --- a/test/browser/column/startFrozen.test.ts +++ b/test/browser/column/startFrozen.test.ts @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import type { Column } from '../../../src'; import { cellClassname, cellFrozenStartClassname } from '../../../src/style/cell'; diff --git a/test/browser/column/summaryCellClass.test.ts b/test/browser/column/summaryCellClass.test.ts index 861e747066..94c78a6cd5 100644 --- a/test/browser/column/summaryCellClass.test.ts +++ b/test/browser/column/summaryCellClass.test.ts @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import type { Column } from '../../../src'; import { cellClassname } from '../../../src/style/cell'; diff --git a/test/browser/columnOrder.test.tsx b/test/browser/columnOrder.test.tsx index 345e93c96d..3ed1fe4921 100644 --- a/test/browser/columnOrder.test.tsx +++ b/test/browser/columnOrder.test.tsx @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import { DataGrid, SelectColumn, TreeDataGrid } from '../../src'; import type { Column } from '../../src'; diff --git a/test/browser/copyPaste.test.tsx b/test/browser/copyPaste.test.tsx index a063235dc1..59bb152931 100644 --- a/test/browser/copyPaste.test.tsx +++ b/test/browser/copyPaste.test.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import { DataGrid } from '../../src'; import type { CellPasteArgs, Column } from '../../src'; diff --git a/test/browser/direction.test.ts b/test/browser/direction.test.ts index d3ced541d5..254be22af1 100644 --- a/test/browser/direction.test.ts +++ b/test/browser/direction.test.ts @@ -1,4 +1,4 @@ -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import type { Column } from '../../src'; import { safeTab, setup } from './utils'; diff --git a/test/browser/dragFill.test.tsx b/test/browser/dragFill.test.tsx index 16b125b353..6616d73274 100644 --- a/test/browser/dragFill.test.tsx +++ b/test/browser/dragFill.test.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { commands, page, userEvent } from 'vitest/browser'; +import { commands, page, userEvent } from 'vite-plus/test/browser'; import { DataGrid } from '../../src'; import type { Column, FillEvent } from '../../src'; diff --git a/test/browser/events.test.tsx b/test/browser/events.test.tsx index 9f01cfbdc4..5cee0d412c 100644 --- a/test/browser/events.test.tsx +++ b/test/browser/events.test.tsx @@ -1,4 +1,4 @@ -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import { DataGrid } from '../../src'; import type { Column } from '../../src'; diff --git a/test/browser/headerRowClass.test.ts b/test/browser/headerRowClass.test.ts index cb3e8ceb20..a6a583206b 100644 --- a/test/browser/headerRowClass.test.ts +++ b/test/browser/headerRowClass.test.ts @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import type { Column } from '../../src'; import { headerRowClassname } from '../../src/HeaderRow'; diff --git a/test/browser/keyboardNavigation.test.tsx b/test/browser/keyboardNavigation.test.tsx index 0ecb8561e2..9130c81441 100644 --- a/test/browser/keyboardNavigation.test.tsx +++ b/test/browser/keyboardNavigation.test.tsx @@ -1,4 +1,4 @@ -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import { DataGrid, SelectColumn } from '../../src'; import type { Column } from '../../src'; diff --git a/test/browser/label.test.ts b/test/browser/label.test.ts index d5cacdcfd5..f43f987255 100644 --- a/test/browser/label.test.ts +++ b/test/browser/label.test.ts @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import { setup } from './utils'; diff --git a/test/browser/renderTextEditor.test.tsx b/test/browser/renderTextEditor.test.tsx index 6468720df6..676c84ef0f 100644 --- a/test/browser/renderTextEditor.test.tsx +++ b/test/browser/renderTextEditor.test.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import { DataGrid, renderTextEditor } from '../../src'; import type { Column } from '../../src'; diff --git a/test/browser/renderers.test.tsx b/test/browser/renderers.test.tsx index 5486632bc4..8c47187d8c 100644 --- a/test/browser/renderers.test.tsx +++ b/test/browser/renderers.test.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import { Cell, diff --git a/test/browser/rowClass.test.ts b/test/browser/rowClass.test.ts index 3b64b9dcb0..b9e79210f1 100644 --- a/test/browser/rowClass.test.ts +++ b/test/browser/rowClass.test.ts @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import type { Column } from '../../src'; import { rowClassname } from '../../src/style/row'; diff --git a/test/browser/rowHeight.test.ts b/test/browser/rowHeight.test.ts index 5ed9647509..da554de11f 100644 --- a/test/browser/rowHeight.test.ts +++ b/test/browser/rowHeight.test.ts @@ -1,4 +1,4 @@ -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import type { Column, DataGridProps } from '../../src'; import { safeTab, setup, testRowCount } from './utils'; diff --git a/test/browser/rowSelection.test.tsx b/test/browser/rowSelection.test.tsx index 8f5d885071..84c56e66b8 100644 --- a/test/browser/rowSelection.test.tsx +++ b/test/browser/rowSelection.test.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import { DataGrid, SelectColumn } from '../../src'; import type { Column } from '../../src'; diff --git a/test/browser/scrollToCell.test.tsx b/test/browser/scrollToCell.test.tsx index f983e7d92e..376e330f47 100644 --- a/test/browser/scrollToCell.test.tsx +++ b/test/browser/scrollToCell.test.tsx @@ -1,5 +1,5 @@ import { createRef } from 'react'; -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import type { Column, DataGridHandle } from '../../src'; import { setup } from './utils'; diff --git a/test/browser/sorting.test.tsx b/test/browser/sorting.test.tsx index 9f21d8c569..abf2595591 100644 --- a/test/browser/sorting.test.tsx +++ b/test/browser/sorting.test.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { page, userEvent } from 'vitest/browser'; +import { page, userEvent } from 'vite-plus/test/browser'; import { DataGrid } from '../../src'; import type { Column, SortColumn } from '../../src/types'; diff --git a/test/browser/utils.tsx b/test/browser/utils.tsx index 6860786170..56f0ba619a 100644 --- a/test/browser/utils.tsx +++ b/test/browser/utils.tsx @@ -1,4 +1,4 @@ -import { page, userEvent, type Locator } from 'vitest/browser'; +import { page, userEvent, type Locator } from 'vite-plus/test/browser'; import { DataGrid } from '../../src'; import type { DataGridProps } from '../../src'; diff --git a/test/browser/virtualization.test.ts b/test/browser/virtualization.test.ts index 7b97b43f98..7cf71f97e0 100644 --- a/test/browser/virtualization.test.ts +++ b/test/browser/virtualization.test.ts @@ -1,4 +1,4 @@ -import { page, type Locator } from 'vitest/browser'; +import { page, type Locator } from 'vite-plus/test/browser'; import type { Column } from '../../src'; import { getCellsAtRowIndex, scrollGrid, setup } from './utils'; diff --git a/test/setupBrowser.ts b/test/setupBrowser.ts index b824890219..e5ad48fc66 100644 --- a/test/setupBrowser.ts +++ b/test/setupBrowser.ts @@ -2,8 +2,13 @@ // need to import it so TypeScript can pick up types import 'vitest-browser-react'; +import { + locators, + userEvent, + type Locator, + type LocatorByRoleOptions +} from 'vite-plus/test/browser'; import { configure } from 'vitest-browser-react/pure'; -import { locators, userEvent, type Locator, type LocatorByRoleOptions } from 'vitest/browser'; // avoid priting huge stack traces // chromium defaults to 10 diff --git a/test/visual/basicGrid.test.tsx b/test/visual/basicGrid.test.tsx index 9d4629e3b1..39361287f5 100644 --- a/test/visual/basicGrid.test.tsx +++ b/test/visual/basicGrid.test.tsx @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import { DataGrid, SelectColumn, type Column } from '../../src'; @@ -48,6 +48,7 @@ test('basic grid', async () => { rows={rows} topSummaryRows={topSummaryRows} bottomSummaryRows={bottomSummaryRows} + style={{ height: 350 }} /> ); diff --git a/test/visual/treeGrid.test.tsx b/test/visual/treeGrid.test.tsx index 79dc6e0fa3..16c20dfb03 100644 --- a/test/visual/treeGrid.test.tsx +++ b/test/visual/treeGrid.test.tsx @@ -1,4 +1,4 @@ -import { page } from 'vitest/browser'; +import { page } from 'vite-plus/test/browser'; import { SelectColumn, TreeDataGrid, type Column } from '../../src'; @@ -73,6 +73,7 @@ test('tree grid', async () => { rowGrouper={rowGrouper} expandedGroupIds={new Set(['USA', 'USA__2020'])} onExpandedGroupIdsChange={() => {}} + style={{ height: 350 }} /> ); diff --git a/tsconfig.base.json b/tsconfig.base.json index c291d3bb5f..540412dca2 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -8,6 +8,7 @@ "jsx": "react-jsx", "lib": [], "moduleDetection": "force", + "noEmit": true, "noImplicitReturns": true, "noUnusedLocals": true, "outDir": "./node_modules/.cache/ts", diff --git a/tsconfig.src.json b/tsconfig.src.json index 9a89c9d3e5..4cfa36c120 100644 --- a/tsconfig.src.json +++ b/tsconfig.src.json @@ -1,7 +1,8 @@ { "extends": "./tsconfig.base.json", "compilerOptions": { - "lib": ["ESNext", "DOM"] + "lib": ["ESNext", "DOM"], + "noEmit": false }, "include": ["src/**/*"] } diff --git a/tsconfig.test.json b/tsconfig.test.json index 03cb7253c7..a36718939d 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -3,7 +3,7 @@ "compilerOptions": { "lib": ["ESNext", "DOM"], "skipLibCheck": true, - "types": ["vitest/globals"] + "types": ["vite-plus/test/globals"] }, "include": ["src/css.d.ts", "test/**/*"], "references": [{ "path": "tsconfig.src.json" }] diff --git a/tsconfig.vite.json b/tsconfig.vite.json index 57b2050a8e..6ca1f39909 100644 --- a/tsconfig.vite.json +++ b/tsconfig.vite.json @@ -4,5 +4,5 @@ "lib": ["ESNext", "DOM"], "skipLibCheck": true }, - "include": ["package.json", "tsdown.config.ts", "vite.config.ts"] + "include": ["package.json", "vite.config.ts"] } diff --git a/tsdown.config.ts b/tsdown.config.ts deleted file mode 100644 index c045c043b2..0000000000 --- a/tsdown.config.ts +++ /dev/null @@ -1,45 +0,0 @@ -import react from '@vitejs/plugin-react'; -import { ecij } from 'ecij/plugin'; -import { Features } from 'lightningcss'; -import { defineConfig } from 'tsdown'; - -import pkg from './package.json' with { type: 'json' }; - -export default defineConfig({ - outDir: 'lib', - target: ['baseline-widely-available', 'node24.0.0'], - platform: 'neutral', - sourcemap: true, - treeshake: { - moduleSideEffects: false, - propertyReadSideEffects: false, - propertyWriteSideEffects: false - }, - deps: { - // fail the build if it would result in bundling devDependencies like ecij, - // unless explicitely listed in the `onlyBundle` array - onlyBundle: [] - }, - css: { - fileName: 'styles.css', - lightningcss: { - // https://github.com/parcel-bundler/lightningcss/issues/873 - exclude: Features.Nesting | Features.LightDark - } - }, - dts: { - build: true, - tsconfig: './tsconfig.src.json' - }, - plugins: [ - ecij({ - // We add the package version as prefix to avoid style conflicts - // between multiple versions of RDG on the same page - classPrefix: `rdg-${pkg.version.replaceAll('.', '-')}-` - }), - react({ - compiler: true, - exclude: [/node_modules/, /\.d\.ts$/] - }) - ] -}); diff --git a/vite.config.ts b/vite.config.ts index 547f96a261..677eae7d26 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,21 +1,23 @@ -import { tanstackRouter } from '@tanstack/router-plugin/vite'; import react from '@vitejs/plugin-react'; -import { playwright, type PlaywrightProviderOptions } from '@vitest/browser-playwright'; import { ecij } from 'ecij/plugin'; import { Features } from 'lightningcss'; -import { defineConfig, type ViteUserConfig } from 'vitest/config'; -import type { BrowserCommand } from 'vitest/node'; +import { defineConfig, lazyPlugins } from 'vite-plus'; +import { playwright, type PlaywrightProviderOptions } from 'vite-plus/test/browser-playwright'; +import type { BrowserCommandContext } from 'vite-plus/test/node'; + +import pkg from './package.json' with { type: 'json' }; const isCI = process.env.CI === 'true'; +const isCIWorkflow = process.env.GITHUB_WORKFLOW === 'CI'; const isTest = process.env.VITEST === 'true'; const isAgent = process.env.AI_AGENT !== undefined; // TODO: remove when `userEvent.pointer` is supported -const resizeColumn: BrowserCommand<[name: string, resizeBy: number | readonly number[]]> = async ( - { page, iframe }, - name, - resizeBy -) => { +async function resizeColumn( + { page, iframe }: BrowserCommandContext, + name: string, + resizeBy: number | readonly number[] +) { const resizeHandle = iframe .getByRole('columnheader', { name, exact: true }) .locator('.rdg-resize-handle'); @@ -29,14 +31,14 @@ const resizeColumn: BrowserCommand<[name: string, resizeBy: number | readonly nu await page.mouse.move(newX, y + 5); } await page.mouse.up(); -}; +} // TODO: remove when `userEvent.pointer` is supported -const dragFill: BrowserCommand<[from: string, to: string]> = async ( - { page, iframe, project }, - from, - to -) => { +async function dragFill( + { page, iframe, project }: BrowserCommandContext, + from: string, + to: string +) { await iframe.getByRole('gridcell', { name: from, exact: true }).click(); await iframe.locator('.rdg-cell-drag-handle').hover(); await page.mouse.down(); @@ -48,7 +50,7 @@ const dragFill: BrowserCommand<[from: string, to: string]> = async ( }); } await page.mouse.up(); -}; +} const actionTimeout = 2000; const viewport = { width: 1920, height: 1080 } as const; @@ -59,10 +61,66 @@ const playwrightOptions: PlaywrightProviderOptions = { } }; -export default defineConfig(({ isPreview }): ViteUserConfig => ({ +export default defineConfig({ + staged: { + '*': 'vp fmt --no-error-on-unmatched-pattern', + '*.md': 'vp run eslint' + }, + + run: { + tasks: { + eslint: { + command: 'eslint --max-warnings 0' + }, + typecheck: { + command: 'tsc --build', + cache: false + }, + 'install-browsers': { + command: isCI + ? [ + 'echo ::group::Install browsers', + 'sudo cp .github/apt.conf /etc/apt/apt.conf.d/99-ci', + 'playwright install --no-shell --with-deps', + 'echo ::endgroup::' + ] + : 'playwright install --no-shell', + // browsers are installed outside the workspace, so they cannot be restored from the cache + cache: false + }, + test: { + command: 'vp test', + dependsOn: ['install-browsers'], + cache: { + // `CI` enables visual tests, `GITHUB_WORKFLOW` enables coverage + env: ['CI', 'GITHUB_WORKFLOW'], + input: [{ auto: true }, '!coverage/**', '!node_modules/.cache/vite/**'] + } + }, + ci: { + command: [ + // type check runs first, as type issues are often + // the root cause of errors reported by later checks + 'vp run typecheck', + 'vp check', + 'vp run eslint', + 'vp pack', + 'vp build', + 'git diff --exit-code website/routeTree.gen.ts', + 'vp run test' + ], + cache: { + // `vp pack` cleans `lib/` before writing to it + input: [{ auto: true }, '!lib/**'] + } + } + } + }, + base: '/react-data-grid/', cacheDir: 'node_modules/.cache/vite', clearScreen: false, + build: { chunkImportMap: true, modulePreload: { polyfill: false }, @@ -87,6 +145,7 @@ export default defineConfig(({ isPreview }): ViteUserConfig => ({ } } }, + css: { transformer: 'lightningcss', lightningcss: { @@ -94,23 +153,65 @@ export default defineConfig(({ isPreview }): ViteUserConfig => ({ exclude: Features.Nesting | Features.LightDark } }, - plugins: isPreview - ? [] - : [ - ecij(), - !isTest && - tanstackRouter({ - target: 'react', - generatedRouteTree: 'website/routeTree.gen.ts', - routesDirectory: 'website/routes', - tmpDir: 'node_modules/.cache/tanstack', - autoCodeSplitting: true - }), - react({ compiler: true }) - ], + + plugins: lazyPlugins(() => [ + ecij(), + !isTest && + import('@tanstack/router-plugin/vite').then(({ tanstackRouter }) => + tanstackRouter({ + target: 'react', + generatedRouteTree: 'website/routeTree.gen.ts', + routesDirectory: 'website/routes', + tmpDir: 'node_modules/.cache/tanstack', + autoCodeSplitting: true + }) + ), + react({ compiler: true }) + ]), + server: { open: !isAgent }, + + pack: { + outDir: 'lib', + target: ['baseline-widely-available', 'node24.0.0'], + platform: 'neutral', + sourcemap: true, + treeshake: { + moduleSideEffects: false, + propertyReadSideEffects: false, + propertyWriteSideEffects: false + }, + deps: { + // fail the build if it would result in bundling devDependencies like ecij, + // unless explicitly listed in the `onlyBundle` array + onlyBundle: [] + }, + css: { + fileName: 'styles.css', + lightningcss: { + // https://github.com/parcel-bundler/lightningcss/issues/873 + exclude: Features.Nesting | Features.LightDark + } + }, + dts: { + build: true, + tsconfig: './tsconfig.src.json' + }, + plugins: [ + ecij({ + // We add the package version as prefix to avoid style conflicts + // between multiple versions of RDG on the same page + classPrefix: `rdg-${pkg.version.replaceAll('.', '-')}-` + }), + react({ + compiler: true, + exclude: [/node_modules/, /\.d\.ts$/] + }) + ] + }, + test: { dir: 'test', globals: true, @@ -122,7 +223,7 @@ export default defineConfig(({ isPreview }): ViteUserConfig => ({ }, coverage: { provider: 'istanbul', - enabled: isCI, + enabled: isCIWorkflow, include: ['src/**/*.{ts,tsx}'], reporter: ['json'] }, @@ -186,19 +287,11 @@ export default defineConfig(({ isPreview }): ViteUserConfig => ({ { test: { name: 'browser', - include: ['browser/**/*.test.*'], + include: ['browser/**/*.test.*', ...(isCI ? ['visual/*.test.*'] : [])], browser: { enabled: true }, setupFiles: ['test/browser/styles.css', 'test/setupBrowser.ts', 'test/failOnConsole.ts'] } }, - { - test: { - name: 'visual', - include: ['visual/*.test.*'], - browser: { enabled: true }, - setupFiles: ['test/setupBrowser.ts', 'test/failOnConsole.ts'] - } - }, { test: { name: 'node', @@ -208,5 +301,815 @@ export default defineConfig(({ isPreview }): ViteUserConfig => ({ } } ] + }, + + lint: { + ignorePatterns: ['/website/routeTree.gen.ts'], + + plugins: ['eslint', 'oxc', 'react', 'typescript', 'unicorn', 'vitest'], + + options: { + denyWarnings: true, + reportUnusedDisableDirectives: 'warn', + respectEslintDisableDirectives: false, + typeAware: true + }, + + env: { + builtin: true + }, + + // https://oxc.rs/docs/guide/usage/linter/rules.html + /* +// copy all the rules from the rules table for easy pasting +const groups = new Set(['eslint', 'oxc', 'react', 'typescript', 'unicorn', 'vitest']); +copy( + Iterator.from(document.querySelectorAll('tbody tr')) + .map((row) => [ + row.children[1].textContent, + row.querySelector(':any-link').textContent + ]) + .filter(([group]) => groups.has(group)) + .map(([group, rule]) => `"${group}/${rule}": "warn",`) + .toArray() + .sort() + .join('\n') +); + */ + rules: { + 'eslint/accessor-pairs': 'warn', + 'eslint/array-callback-return': ['warn', { checkForEach: true }], + 'eslint/arrow-body-style': 'off', + 'eslint/block-scoped-var': 'warn', + 'eslint/capitalized-comments': 'off', + 'eslint/class-methods-use-this': 'warn', + 'eslint/complexity': 'off', + 'eslint/constructor-super': 'off', + 'eslint/curly': 'off', + 'eslint/default-case': 'warn', + 'eslint/default-case-last': 'warn', + 'eslint/default-param-last': 'off', + 'eslint/eqeqeq': ['warn', 'always', { null: 'ignore' }], + 'eslint/for-direction': 'warn', + 'eslint/func-name-matching': 'off', + 'eslint/func-names': 'off', + 'eslint/func-style': 'off', + 'eslint/getter-return': 'warn', + 'eslint/grouped-accessor-pairs': ['warn', 'getBeforeSet'], + 'eslint/guard-for-in': 'off', + 'eslint/id-denylist': 'off', + 'eslint/id-length': 'off', + 'eslint/id-match': 'off', + 'eslint/init-declarations': 'off', + 'eslint/logical-assignment-operators': ['warn', 'always', { enforceForIfStatements: true }], + 'eslint/max-classes-per-file': 'off', + 'eslint/max-depth': 'off', + 'eslint/max-lines': 'off', + 'eslint/max-lines-per-function': 'off', + 'eslint/max-nested-callbacks': 'off', + 'eslint/max-params': 'off', + 'eslint/max-statements': 'off', + 'eslint/new-cap': 'off', + 'eslint/no-alert': 'off', + 'eslint/no-array-constructor': 'warn', + 'eslint/no-async-promise-executor': 'warn', + 'eslint/no-await-in-loop': 'off', + 'eslint/no-bitwise': 'off', + 'eslint/no-caller': 'warn', + 'eslint/no-case-declarations': 'warn', + 'eslint/no-class-assign': 'off', + 'eslint/no-compare-neg-zero': 'warn', + 'eslint/no-cond-assign': 'warn', + 'eslint/no-console': 'warn', + 'eslint/no-const-assign': 'off', + 'eslint/no-constant-binary-expression': 'warn', + 'eslint/no-constant-condition': 'warn', + 'eslint/no-constructor-return': 'warn', + 'eslint/no-continue': 'off', + 'eslint/no-control-regex': 'warn', + 'eslint/no-debugger': 'warn', + 'eslint/no-delete-var': 'warn', + 'eslint/no-div-regex': 'off', + 'eslint/no-dupe-class-members': 'off', + 'eslint/no-dupe-else-if': 'warn', + 'eslint/no-dupe-keys': 'warn', + 'eslint/no-duplicate-case': 'warn', + 'eslint/no-duplicate-imports': 'off', + 'eslint/no-else-return': ['warn', { allowElseIf: false }], + 'eslint/no-empty': ['warn', { allowEmptyCatch: true }], + 'eslint/no-empty-character-class': 'warn', + 'eslint/no-empty-function': 'off', + 'eslint/no-empty-pattern': 'warn', + 'eslint/no-empty-static-block': 'warn', + 'eslint/no-eq-null': 'off', + 'eslint/no-eval': 'warn', + 'eslint/no-ex-assign': 'warn', + 'eslint/no-extend-native': 'warn', + 'eslint/no-extra-bind': 'warn', + 'eslint/no-extra-boolean-cast': ['warn', { enforceForLogicalOperands: true }], + 'eslint/no-extra-label': 'warn', + 'eslint/no-fallthrough': ['warn', { reportUnusedFallthroughComment: true }], + 'eslint/no-func-assign': 'warn', + 'eslint/no-global-assign': 'warn', + 'eslint/no-implicit-coercion': 'off', + 'eslint/no-implicit-globals': 'off', + 'eslint/no-implied-eval': 'off', + 'eslint/no-import-assign': 'warn', + 'eslint/no-inline-comments': 'off', + 'eslint/no-inner-declarations': 'off', + 'eslint/no-invalid-regexp': 'warn', + 'eslint/no-irregular-whitespace': 'warn', + 'eslint/no-iterator': 'warn', + 'eslint/no-label-var': 'warn', + 'eslint/no-labels': 'warn', + 'eslint/no-lone-blocks': 'warn', + 'eslint/no-lonely-if': 'warn', + 'eslint/no-loop-func': 'off', + 'eslint/no-loss-of-precision': 'warn', + 'eslint/no-magic-numbers': 'off', + 'eslint/no-misleading-character-class': 'warn', + 'eslint/no-multi-assign': 'off', + 'eslint/no-multi-str': 'warn', + 'eslint/no-negated-condition': 'warn', + 'eslint/no-nested-ternary': 'off', + 'eslint/no-new': 'warn', + 'eslint/no-new-func': 'warn', + 'eslint/no-new-native-nonconstructor': 'warn', + 'eslint/no-new-wrappers': 'warn', + 'eslint/no-nonoctal-decimal-escape': 'warn', + 'eslint/no-obj-calls': 'warn', + 'eslint/no-object-constructor': 'warn', + 'eslint/no-param-reassign': 'off', + 'eslint/no-plusplus': 'off', + 'eslint/no-promise-executor-return': 'warn', + 'eslint/no-proto': 'warn', + 'eslint/no-prototype-builtins': 'warn', + 'eslint/no-redeclare': 'warn', + 'eslint/no-regex-spaces': 'warn', + 'eslint/no-restricted-exports': 'off', + 'eslint/no-restricted-globals': [ + 'warn', + { name: 'Omit', message: 'Use Omit from types instead.' } + ], + 'eslint/no-restricted-imports': 'off', + 'eslint/no-restricted-properties': 'off', + 'eslint/no-return-assign': 'off', + 'eslint/no-script-url': 'warn', + 'eslint/no-self-assign': 'warn', + 'eslint/no-self-compare': 'warn', + 'eslint/no-sequences': ['warn', { allowInParentheses: false }], + 'eslint/no-setter-return': 'warn', + 'eslint/no-shadow': 'off', + 'eslint/no-shadow-restricted-names': 'warn', + 'eslint/no-sparse-arrays': 'warn', + 'eslint/no-template-curly-in-string': 'warn', + 'eslint/no-ternary': 'off', + 'eslint/no-this-before-super': 'off', + 'eslint/no-throw-literal': 'off', + 'eslint/no-unassigned-vars': 'warn', + 'eslint/no-undef': 'off', + 'eslint/no-undefined': 'off', + 'eslint/no-underscore-dangle': 'off', + 'eslint/no-unexpected-multiline': 'off', + 'eslint/no-unmodified-loop-condition': 'warn', + 'eslint/no-unneeded-ternary': ['warn', { defaultAssignment: false }], + 'eslint/no-unreachable': 'warn', + 'eslint/no-unreachable-loop': 'warn', + 'eslint/no-unsafe-finally': 'warn', + 'eslint/no-unsafe-negation': ['warn', { enforceForOrderingRelations: true }], + 'eslint/no-unsafe-optional-chaining': ['warn', { disallowArithmeticOperators: true }], + 'eslint/no-unused-expressions': ['warn', { enforceForJSX: true }], + 'eslint/no-unused-labels': 'warn', + 'eslint/no-unused-private-class-members': 'off', + 'eslint/no-unused-vars': ['warn', { fix: { imports: 'safe-fix' }, ignoreRestSiblings: true }], + 'eslint/no-use-before-define': 'off', + 'eslint/no-useless-assignment': 'warn', + 'eslint/no-useless-backreference': 'warn', + 'eslint/no-useless-call': 'warn', + 'eslint/no-useless-catch': 'warn', + 'eslint/no-useless-computed-key': 'warn', + 'eslint/no-useless-concat': 'warn', + 'eslint/no-useless-constructor': 'warn', + 'eslint/no-useless-escape': 'warn', + 'eslint/no-useless-rename': 'warn', + 'eslint/no-useless-return': 'warn', + 'eslint/no-var': 'warn', + 'eslint/no-void': 'warn', + 'eslint/no-warning-comments': 'off', + 'eslint/no-with': 'warn', + 'eslint/object-shorthand': ['warn', 'always', { avoidExplicitReturnArrows: true }], + 'eslint/one-var': ['warn', 'never'], + 'eslint/operator-assignment': 'warn', + 'eslint/prefer-arrow-callback': 'warn', + 'eslint/prefer-const': ['warn', { destructuring: 'all' }], + 'eslint/prefer-destructuring': 'off', + 'eslint/prefer-exponentiation-operator': 'warn', + 'eslint/prefer-named-capture-group': 'off', + 'eslint/prefer-numeric-literals': 'warn', + 'eslint/prefer-object-has-own': 'warn', + 'eslint/prefer-object-spread': 'warn', + 'eslint/prefer-promise-reject-errors': 'off', + 'eslint/prefer-regex-literals': ['warn', { disallowRedundantWrapping: true }], + 'eslint/prefer-rest-params': 'warn', + 'eslint/prefer-spread': 'warn', + 'eslint/prefer-template': 'warn', + 'eslint/preserve-caught-error': 'warn', + 'eslint/radix': 'warn', + 'eslint/require-await': 'off', + 'eslint/require-unicode-regexp': 'off', + 'eslint/require-yield': 'warn', + 'eslint/sort-imports': 'off', + 'eslint/sort-keys': 'off', + 'eslint/sort-vars': 'off', + 'eslint/symbol-description': 'warn', + 'eslint/unicode-bom': 'warn', + 'eslint/use-isnan': ['warn', { enforceForIndexOf: true }], + 'eslint/valid-typeof': ['warn', { requireStringLiterals: true }], + 'eslint/vars-on-top': 'off', + 'eslint/yoda': 'off', + 'oxc/approx-constant': 'warn', + 'oxc/bad-array-method-on-arguments': 'warn', + 'oxc/bad-bitwise-operator': 'warn', + 'oxc/bad-char-at-comparison': 'warn', + 'oxc/bad-comparison-sequence': 'warn', + 'oxc/bad-match-all-arg': 'warn', + 'oxc/bad-min-max-func': 'warn', + 'oxc/bad-object-literal-comparison': 'warn', + 'oxc/bad-replace-all-arg': 'warn', + 'oxc/branches-sharing-code': 'warn', + 'oxc/const-comparisons': 'warn', + 'oxc/double-comparisons': 'warn', + 'oxc/erasing-op': 'warn', + 'oxc/misrefactored-assign-op': 'warn', + 'oxc/missing-throw': 'warn', + 'oxc/no-accumulating-spread': 'warn', + 'oxc/no-async-await': 'off', + 'oxc/no-async-endpoint-handlers': 'warn', + 'oxc/no-barrel-file': 'warn', + 'oxc/no-const-enum': 'warn', + 'oxc/no-map-spread': 'off', + 'oxc/no-optional-chaining': 'off', + 'oxc/no-rest-spread-properties': 'off', + 'oxc/no-this-in-exported-function': 'warn', + 'oxc/number-arg-out-of-range': 'warn', + 'oxc/only-used-in-recursion': 'warn', + 'oxc/uninvoked-array-callback': 'warn', + 'react/button-has-type': 'warn', + 'react/capitalized-calls': 'warn', + 'react/checked-requires-onchange-or-readonly': 'warn', + 'react/display-name': ['warn', { checkContextObjects: true }], + 'react/error-boundaries': 'warn', + 'react/exhaustive-deps': 'warn', + 'react/exhaustive-effect-dependencies': 'warn', + 'react/forbid-component-props': 'off', + 'react/forbid-dom-props': 'off', + 'react/forbid-elements': 'off', + 'react/forward-ref-uses-ref': 'warn', + 'react/function-component-definition': 'warn', + 'react/globals': 'warn', + 'react/hook-use-state': 'off', + 'react/hooks': 'warn', + 'react/iframe-missing-sandbox': 'warn', + 'react/immutability': 'warn', + 'react/incompatible-library': 'warn', + 'react/invariant': 'warn', + 'react/jsx-boolean-value': 'warn', + 'react/jsx-curly-brace-presence': ['warn', { propElementValues: 'always' }], + 'react/jsx-filename-extension': 'off', + 'react/jsx-fragments': 'warn', + 'react/jsx-handler-names': 'off', + 'react/jsx-key': 'warn', + 'react/jsx-max-depth': 'off', + 'react/jsx-no-comment-textnodes': 'warn', + 'react/jsx-no-constructed-context-values': 'warn', + 'react/jsx-no-duplicate-props': 'warn', + 'react/jsx-no-literals': 'off', + 'react/jsx-no-script-url': 'warn', + 'react/jsx-no-target-blank': ['warn', { forms: true, warnOnSpreadAttributes: true }], + 'react/jsx-no-undef': 'warn', + 'react/jsx-no-useless-fragment': 'warn', + 'react/jsx-pascal-case': 'warn', + 'react/jsx-props-no-spread-multi': 'warn', + 'react/jsx-props-no-spreading': 'off', + 'react/memo-dependencies': 'warn', + 'react/no-array-index-key': 'off', + 'react/no-children-prop': 'warn', + 'react/no-clone-element': 'warn', + 'react/no-danger': 'warn', + 'react/no-danger-with-children': 'warn', + 'react/no-deriving-state-in-effects': 'warn', + 'react/no-did-mount-set-state': 'warn', + 'react/no-did-update-set-state': 'warn', + 'react/no-direct-mutation-state': 'warn', + 'react/no-find-dom-node': 'warn', + 'react/no-is-mounted': 'warn', + 'react/no-multi-comp': 'off', + 'react/no-namespace': 'warn', + 'react/no-object-type-as-default-prop': 'warn', + 'react/no-react-children': 'warn', + 'react/no-redundant-should-component-update': 'warn', + 'react/no-render-return-value': 'warn', + 'react/no-set-state': 'off', + 'react/no-string-refs': 'warn', + 'react/no-this-in-sfc': 'warn', + 'react/no-unescaped-entities': 'warn', + 'react/no-unknown-property': 'off', + 'react/no-unsafe': ['warn', { checkAliases: true }], + 'react/no-unstable-nested-components': 'warn', + 'react/no-will-update-set-state': 'warn', + 'react/only-export-components': 'off', + 'react/prefer-es6-class': 'off', + 'react/prefer-function-component': 'warn', + 'react/preserve-manual-memoization': 'warn', + 'react/purity': 'warn', + 'react/react-in-jsx-scope': 'off', + 'react/refs': 'warn', + 'react/require-render-return': 'warn', + 'react/rule-suppression': 'warn', + 'react/rules-of-hooks': 'warn', + 'react/self-closing-comp': 'warn', + 'react/set-state-in-effect': 'warn', + 'react/set-state-in-render': 'warn', + 'react/state-in-constructor': 'off', + 'react/static-components': 'warn', + 'react/style-prop-object': 'warn', + 'react/syntax': 'warn', + 'react/todo': 'off', + 'react/unsupported-syntax': 'warn', + 'react/use-memo': 'warn', + 'react/void-dom-elements-no-children': 'warn', + 'react/void-use-memo': 'warn', + 'typescript/adjacent-overload-signatures': 'warn', + 'typescript/array-type': 'warn', + 'typescript/await-thenable': 'warn', + 'typescript/ban-ts-comment': ['warn', { 'ts-expect-error': false }], + 'typescript/ban-tslint-comment': 'off', + 'typescript/ban-types': 'off', + 'typescript/class-literal-property-style': 'off', + 'typescript/consistent-generic-constructors': 'warn', + 'typescript/consistent-indexed-object-style': 'warn', + 'typescript/consistent-return': 'off', + 'typescript/consistent-type-assertions': [ + 'warn', + { + arrayLiteralTypeAssertions: 'never', + objectLiteralTypeAssertions: 'never' + } + ], + 'typescript/consistent-type-definitions': 'warn', + 'typescript/consistent-type-exports': [ + 'warn', + { fixMixedExportsWithInlineTypeSpecifier: true } + ], + 'typescript/consistent-type-imports': ['warn', { fixStyle: 'inline-type-imports' }], + 'typescript/dot-notation': 'warn', + 'typescript/explicit-function-return-type': 'off', + 'typescript/explicit-member-accessibility': 'off', + 'typescript/explicit-module-boundary-types': 'off', + 'typescript/method-signature-style': 'warn', + 'typescript/no-array-delete': 'warn', + 'typescript/no-base-to-string': 'off', + 'typescript/no-confusing-non-null-assertion': 'off', + 'typescript/no-confusing-void-expression': ['warn', { ignoreArrowShorthand: true }], + 'typescript/no-deprecated': 'warn', + 'typescript/no-duplicate-enum-values': 'warn', + 'typescript/no-duplicate-type-constituents': 'warn', + 'typescript/no-dynamic-delete': 'off', + 'typescript/no-empty-interface': 'off', + 'typescript/no-empty-object-type': 'warn', + 'typescript/no-explicit-any': ['warn', { fixToUnknown: true }], + 'typescript/no-extra-non-null-assertion': 'warn', + 'typescript/no-extraneous-class': 'warn', + 'typescript/no-floating-promises': 'off', + 'typescript/no-for-in-array': 'warn', + 'typescript/no-implied-eval': 'warn', + 'typescript/no-import-type-side-effects': 'warn', + 'typescript/no-inferrable-types': 'warn', + 'typescript/no-invalid-void-type': 'warn', + 'typescript/no-meaningless-void-operator': 'warn', + 'typescript/no-misused-new': 'warn', + 'typescript/no-misused-promises': 'off', + 'typescript/no-misused-spread': 'warn', + 'typescript/no-mixed-enums': 'warn', + 'typescript/no-namespace': 'warn', + 'typescript/no-non-null-asserted-nullish-coalescing': 'warn', + 'typescript/no-non-null-asserted-optional-chain': 'warn', + 'typescript/no-non-null-assertion': 'off', + 'typescript/no-redundant-type-constituents': 'warn', + 'typescript/no-require-imports': 'warn', + 'typescript/no-restricted-types': 'off', + 'typescript/no-this-alias': 'warn', + 'typescript/no-unnecessary-boolean-literal-compare': 'warn', + 'typescript/no-unnecessary-condition': [ + 'warn', + { + allowConstantLoopConditions: 'only-allowed-literals', + checkTypePredicates: true + } + ], + 'typescript/no-unnecessary-parameter-property-assignment': 'warn', + 'typescript/no-unnecessary-qualifier': 'off', + 'typescript/no-unnecessary-template-expression': 'warn', + 'typescript/no-unnecessary-type-arguments': 'warn', + 'typescript/no-unnecessary-type-assertion': 'warn', + 'typescript/no-unnecessary-type-constraint': 'warn', + 'typescript/no-unnecessary-type-conversion': 'warn', + 'typescript/no-unnecessary-type-parameters': 'warn', + 'typescript/no-unsafe-argument': 'off', + 'typescript/no-unsafe-assignment': 'off', + 'typescript/no-unsafe-call': 'off', + 'typescript/no-unsafe-declaration-merging': 'warn', + 'typescript/no-unsafe-enum-comparison': 'warn', + 'typescript/no-unsafe-function-type': 'warn', + 'typescript/no-unsafe-member-access': 'off', + 'typescript/no-unsafe-return': 'off', + 'typescript/no-unsafe-type-assertion': 'off', + 'typescript/no-unsafe-unary-minus': 'warn', + 'typescript/no-useless-default-assignment': 'warn', + 'typescript/no-useless-empty-export': 'warn', + 'typescript/no-var-requires': 'off', + 'typescript/no-wrapper-object-types': 'warn', + 'typescript/non-nullable-type-assertion-style': 'warn', + 'typescript/only-throw-error': [ + 'warn', + { + allow: [ + { + from: 'package', + package: '@tanstack/router-core', + name: ['NotFoundError', 'Redirect'] + } + ] + } + ], + 'typescript/parameter-properties': 'warn', + 'typescript/prefer-as-const': 'warn', + 'typescript/prefer-enum-initializers': 'warn', + 'typescript/prefer-find': 'warn', + 'typescript/prefer-for-of': 'warn', + 'typescript/prefer-function-type': 'warn', + 'typescript/prefer-includes': 'warn', + 'typescript/prefer-literal-enum-member': 'warn', + 'typescript/prefer-namespace-keyword': 'warn', + 'typescript/prefer-nullish-coalescing': [ + 'warn', + { + ignoreConditionalTests: false, + ignorePrimitives: true + } + ], + 'typescript/prefer-optional-chain': 'warn', + 'typescript/prefer-promise-reject-errors': 'warn', + 'typescript/prefer-readonly': 'warn', + 'typescript/prefer-readonly-parameter-types': 'off', + 'typescript/prefer-reduce-type-parameter': 'warn', + 'typescript/prefer-regexp-exec': 'warn', + 'typescript/prefer-return-this-type': 'warn', + 'typescript/prefer-string-starts-ends-with': 'warn', + 'typescript/prefer-ts-expect-error': 'warn', + 'typescript/promise-function-async': 'off', + 'typescript/related-getter-setter-pairs': 'off', + 'typescript/require-array-sort-compare': 'warn', + 'typescript/require-await': 'warn', + 'typescript/restrict-plus-operands': [ + 'warn', + { + allowAny: false, + allowBoolean: false, + allowNullish: false, + allowNumberAndString: false, + allowRegExp: false + } + ], + 'typescript/restrict-template-expressions': 'off', + 'typescript/return-await': 'warn', + 'typescript/strict-boolean-expressions': 'off', + 'typescript/strict-void-return': 'off', + 'typescript/switch-exhaustiveness-check': 'warn', + 'typescript/triple-slash-reference': ['warn', { lib: 'never', types: 'never' }], + 'typescript/unbound-method': 'off', + 'typescript/unified-signatures': 'off', + 'typescript/use-unknown-in-catch-callback-variable': 'warn', + 'unicorn/catch-error-name': 'warn', + 'unicorn/consistent-assert': 'warn', + 'unicorn/consistent-date-clone': 'warn', + 'unicorn/consistent-empty-array-spread': 'warn', + 'unicorn/consistent-existence-index-check': 'warn', + 'unicorn/consistent-function-scoping': 'warn', + 'unicorn/consistent-template-literal-escape': 'warn', + 'unicorn/custom-error-definition': 'warn', + 'unicorn/empty-brace-spaces': 'off', + 'unicorn/error-message': 'warn', + 'unicorn/escape-case': 'warn', + 'unicorn/explicit-length-check': 'warn', + 'unicorn/explicit-timer-delay': 'warn', + 'unicorn/filename-case': ['warn', { cases: { camelCase: true, pascalCase: true } }], + 'unicorn/import-style': 'off', + 'unicorn/max-nested-calls': 'off', + 'unicorn/new-for-builtins': 'warn', + 'unicorn/no-abusive-eslint-disable': 'warn', + 'unicorn/no-accessor-recursion': 'warn', + 'unicorn/no-anonymous-default-export': 'warn', + 'unicorn/no-array-callback-reference': 'off', + 'unicorn/no-array-fill-with-reference-type': 'warn', + 'unicorn/no-array-for-each': 'warn', + 'unicorn/no-array-method-this-argument': 'warn', + 'unicorn/no-array-reduce': 'warn', + 'unicorn/no-array-reverse': 'warn', + 'unicorn/no-array-sort': 'warn', + 'unicorn/no-await-expression-member': 'warn', + 'unicorn/no-await-in-promise-methods': 'warn', + 'unicorn/no-confusing-array-with': 'off', + 'unicorn/no-console-spaces': 'warn', + 'unicorn/no-document-cookie': 'warn', + 'unicorn/no-empty-file': 'warn', + 'unicorn/no-hex-escape': 'warn', + 'unicorn/no-immediate-mutation': 'warn', + 'unicorn/no-instanceof-array': 'off', + 'unicorn/no-instanceof-builtins': 'warn', + 'unicorn/no-invalid-fetch-options': 'warn', + 'unicorn/no-invalid-remove-event-listener': 'warn', + 'unicorn/no-length-as-slice-end': 'warn', + 'unicorn/no-lonely-if': 'warn', + 'unicorn/no-magic-array-flat-depth': 'off', + 'unicorn/no-negated-condition': 'off', + 'unicorn/no-negation-in-equality-check': 'warn', + 'unicorn/no-nested-ternary': 'off', + 'unicorn/no-new-array': 'warn', + 'unicorn/no-new-buffer': 'warn', + 'unicorn/no-null': 'off', + 'unicorn/no-object-as-default-parameter': 'warn', + 'unicorn/no-process-exit': 'warn', + 'unicorn/no-single-promise-in-promise-methods': 'warn', + 'unicorn/no-static-only-class': 'warn', + 'unicorn/no-thenable': 'warn', + 'unicorn/no-this-assignment': 'warn', + 'unicorn/no-typeof-undefined': 'warn', + 'unicorn/no-unnecessary-array-flat-depth': 'warn', + 'unicorn/no-unnecessary-array-splice-count': 'warn', + 'unicorn/no-unnecessary-await': 'warn', + 'unicorn/no-unnecessary-slice-end': 'warn', + 'unicorn/no-unreadable-array-destructuring': 'warn', + 'unicorn/no-unreadable-iife': 'warn', + 'unicorn/no-useless-collection-argument': 'warn', + 'unicorn/no-useless-error-capture-stack-trace': 'warn', + 'unicorn/no-useless-fallback-in-spread': 'warn', + 'unicorn/no-useless-iterator-to-array': 'warn', + 'unicorn/no-useless-length-check': 'warn', + 'unicorn/no-useless-promise-resolve-reject': 'warn', + 'unicorn/no-useless-spread': 'warn', + 'unicorn/no-useless-switch-case': 'warn', + 'unicorn/no-useless-undefined': 'off', + 'unicorn/no-zero-fractions': 'warn', + 'unicorn/number-literal-case': 'off', + 'unicorn/numeric-separators-style': 'warn', + 'unicorn/prefer-add-event-listener': 'warn', + 'unicorn/prefer-array-find': 'warn', + 'unicorn/prefer-array-flat': 'warn', + 'unicorn/prefer-array-flat-map': 'warn', + 'unicorn/prefer-array-index-of': 'warn', + 'unicorn/prefer-array-some': 'warn', + 'unicorn/prefer-at': 'off', + 'unicorn/prefer-bigint-literals': 'warn', + 'unicorn/prefer-blob-reading-methods': 'warn', + 'unicorn/prefer-class-fields': 'warn', + 'unicorn/prefer-classlist-toggle': 'warn', + 'unicorn/prefer-code-point': 'warn', + 'unicorn/prefer-date-now': 'warn', + 'unicorn/prefer-default-parameters': 'warn', + 'unicorn/prefer-dom-node-append': 'warn', + 'unicorn/prefer-dom-node-dataset': 'warn', + 'unicorn/prefer-dom-node-remove': 'warn', + 'unicorn/prefer-dom-node-text-content': 'warn', + 'unicorn/prefer-event-target': 'warn', + 'unicorn/prefer-export-from': 'warn', + 'unicorn/prefer-global-this': 'warn', + 'unicorn/prefer-import-meta-properties': 'warn', + 'unicorn/prefer-includes': 'off', + 'unicorn/prefer-keyboard-event-key': 'off', + 'unicorn/prefer-logical-operator-over-ternary': 'warn', + 'unicorn/prefer-math-min-max': 'warn', + 'unicorn/prefer-math-trunc': 'warn', + 'unicorn/prefer-modern-dom-apis': 'warn', + 'unicorn/prefer-modern-math-apis': 'warn', + 'unicorn/prefer-module': 'warn', + 'unicorn/prefer-native-coercion-functions': 'warn', + 'unicorn/prefer-negative-index': 'warn', + 'unicorn/prefer-node-protocol': 'warn', + 'unicorn/prefer-number-coercion': 'off', + 'unicorn/prefer-number-properties': ['warn', { checkInfinity: true }], + 'unicorn/prefer-object-from-entries': 'warn', + 'unicorn/prefer-optional-catch-binding': 'warn', + 'unicorn/prefer-prototype-methods': 'warn', + 'unicorn/prefer-query-selector': 'off', + 'unicorn/prefer-reflect-apply': 'warn', + 'unicorn/prefer-regexp-test': 'warn', + 'unicorn/prefer-response-static-json': 'warn', + 'unicorn/prefer-set-has': 'warn', + 'unicorn/prefer-set-size': 'warn', + 'unicorn/prefer-single-call': 'warn', + 'unicorn/prefer-spread': 'warn', + 'unicorn/prefer-string-raw': 'warn', + 'unicorn/prefer-string-replace-all': 'warn', + 'unicorn/prefer-string-slice': 'warn', + 'unicorn/prefer-string-starts-ends-with': 'off', + 'unicorn/prefer-string-trim-start-end': 'warn', + 'unicorn/prefer-structured-clone': 'warn', + 'unicorn/prefer-ternary': 'off', + 'unicorn/prefer-top-level-await': 'warn', + 'unicorn/prefer-type-error': 'warn', + 'unicorn/relative-url-style': 'warn', + 'unicorn/require-array-join-separator': 'warn', + 'unicorn/require-module-attributes': 'warn', + 'unicorn/require-module-specifiers': 'warn', + 'unicorn/require-number-to-fixed-digits-argument': 'warn', + 'unicorn/require-post-message-target-origin': 'warn', + 'unicorn/switch-case-braces': ['warn', 'avoid'], + 'unicorn/switch-case-break-position': 'warn', + 'unicorn/text-encoding-identifier-case': 'warn', + 'unicorn/throw-new-error': 'warn' + }, + + overrides: [ + { + files: ['test/**/*'], + + rules: { + 'typescript/no-floating-promises': 'warn', + 'unicorn/consistent-function-scoping': 'off', + 'unicorn/prefer-ternary': 'off', + 'vitest/consistent-each-for': 'warn', + 'vitest/consistent-test-filename': 'off', + 'vitest/consistent-test-it': 'warn', + 'vitest/consistent-vitest-vi': 'warn', + 'vitest/expect-expect': 'off', + 'vitest/hoisted-apis-on-top': 'warn', + 'vitest/max-expects': 'off', + 'vitest/max-nested-describe': 'off', + 'vitest/no-alias-methods': 'warn', + 'vitest/no-commented-out-tests': 'warn', + 'vitest/no-conditional-expect': 'off', + 'vitest/no-conditional-in-test': 'off', + 'vitest/no-conditional-tests': 'warn', + 'vitest/no-disabled-tests': 'off', + 'vitest/no-duplicate-hooks': 'warn', + 'vitest/no-focused-tests': 'warn', + 'vitest/no-hooks': 'off', + 'vitest/no-identical-title': 'warn', + 'vitest/no-import-node-test': 'warn', + 'vitest/no-importing-vitest-globals': 'warn', + 'vitest/no-interpolation-in-snapshots': 'off', + 'vitest/no-large-snapshots': 'off', + 'vitest/no-mocks-import': 'warn', + 'vitest/no-restricted-matchers': 'off', + 'vitest/no-restricted-vi-methods': 'off', + 'vitest/no-standalone-expect': [ + 'warn', + { + additionalTestBlockFunctions: [ + 'beforeAll', + 'beforeEach', + 'afterAll', + 'afterEach', + 'aroundAll', + 'aroundEach' + ] + } + ], + 'vitest/no-test-prefixes': 'warn', + 'vitest/no-test-return-statement': 'warn', + 'vitest/no-unneeded-async-expect-function': 'warn', + 'vitest/padding-around-after-all-blocks': 'off', + 'vitest/padding-around-test-blocks': 'off', + 'vitest/prefer-called-exactly-once-with': 'warn', + 'vitest/prefer-called-once': 'warn', + 'vitest/prefer-called-times': 'off', + 'vitest/prefer-called-with': 'off', + 'vitest/prefer-comparison-matcher': 'warn', + 'vitest/prefer-describe-function-title': 'off', + 'vitest/prefer-each': 'warn', + 'vitest/prefer-equality-matcher': 'warn', + 'vitest/prefer-expect-assertions': 'off', + 'vitest/prefer-expect-resolves': 'warn', + 'vitest/prefer-expect-type-of': 'warn', + 'vitest/prefer-hooks-in-order': 'warn', + 'vitest/prefer-hooks-on-top': 'warn', + 'vitest/prefer-import-in-mock': 'warn', + 'vitest/prefer-importing-vitest-globals': 'off', + 'vitest/prefer-lowercase-title': 'off', + 'vitest/prefer-mock-promise-shorthand': 'warn', + 'vitest/prefer-mock-return-shorthand': 'warn', + 'vitest/prefer-snapshot-hint': 'off', + 'vitest/prefer-spy-on': 'warn', + 'vitest/prefer-strict-boolean-matchers': 'warn', + 'vitest/prefer-strict-equal': 'warn', + 'vitest/prefer-to-be': 'warn', + 'vitest/prefer-to-be-falsy': 'off', + 'vitest/prefer-to-be-object': 'warn', + 'vitest/prefer-to-be-truthy': 'off', + 'vitest/prefer-to-contain': 'warn', + 'vitest/prefer-to-have-been-called-times': 'warn', + 'vitest/prefer-to-have-length': 'warn', + 'vitest/prefer-todo': 'warn', + 'vitest/require-awaited-expect-poll': 'warn', + 'vitest/require-hook': 'off', + 'vitest/require-local-test-context-for-concurrent-snapshots': 'off', + 'vitest/require-mock-type-parameters': 'off', + 'vitest/require-test-timeout': 'off', + 'vitest/require-to-throw-message': 'warn', + 'vitest/require-top-level-describe': 'off', + 'vitest/valid-describe-callback': 'warn', + 'vitest/valid-expect': 'warn', + 'vitest/valid-expect-in-promise': 'warn', + 'vitest/valid-title': 'warn', + 'vitest/warn-todo': 'warn' + } + }, + + { + files: ['test/failOnConsole.ts'], + + rules: { + 'eslint/no-console': 'off' + } + }, + + { + files: ['**/*.d.ts'], + + rules: { + 'typescript/consistent-indexed-object-style': 'off', + 'unicorn/require-module-specifiers': 'off' + } + } + ] + }, + + fmt: { + ignorePatterns: ['/website/routeTree.gen.ts'], + singleQuote: true, + trailingComma: 'none', + sortImports: { + customGroups: [ + { + groupName: 'react', + elementNamePattern: ['react', 'react/**', 'react-dom', 'react-dom/**'] + }, + { + groupName: 'ecij', + elementNamePattern: ['ecij'] + }, + { + groupName: 'clsx', + elementNamePattern: ['clsx'] + }, + { + groupName: './src', + elementNamePattern: ['**/src', '**/src/**'] + }, + { + groupName: './renderers', + elementNamePattern: ['**/renderers', '**/renderers/**'] + }, + { + groupName: './components', + elementNamePattern: ['**/components', '**/components/**'] + }, + { + groupName: './hooks', + elementNamePattern: ['**/hooks', '**/hooks/**'] + }, + { + groupName: './utils', + elementNamePattern: ['**/utils', '**/utils/**'] + }, + { + groupName: './types', + elementNamePattern: ['**/types', '**/types/**'] + } + ], + groups: [ + 'side_effect_style', + 'side_effect', + { newlinesBetween: true }, + 'builtin', + 'react', + 'external', + 'ecij', + 'clsx', + { newlinesBetween: true }, + './src', + './renderers', + './components', + './hooks', + './utils', + './types', + 'index', + 'sibling', + 'parent', + 'unknown' + ], + newlinesBetween: false + } } -})); +});