From 0f2289f86c8ad4208a5037bdba35775e77123570 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Mon, 27 Jul 2026 20:39:53 +0100 Subject: [PATCH 01/22] Migrate from ESLint to oxlint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace ESLint with oxlint for JS/TS linting, keeping ESLint only for markdown (`@eslint/markdown` uses ESLint's language plugin API, which oxlint does not support). `.oxlintrc.json` was generated by `@oxlint/migrate --type-aware --with-nursery` and carries over 545 rules at their original `warn` severity. `@eslint-react` and `sonarjs` are loaded as `jsPlugins`; `typescript`, `react` and `vitest` use oxlint's native implementations, so `typescript-eslint`, `eslint-plugin-react-hooks` and `@vitest/eslint-plugin` are no longer needed. Rules that could not be migrated: - the 13 React Compiler rules (`react-hooks/purity`, `preserve-manual-memoization`, …) — oxlint only ships these as an experimental bundled `react/react-compiler` rule - `@eslint-react/no-implicit-key`, `no-leaked-conditional-rendering` and `no-unused-props` — oxlint's JS plugin API cannot supply parser services, so these throw on every file - `@typescript-eslint/naming-convention`, `prefer-destructuring`, `no-unused-private-class-members`, `require-atomic-updates`, `one-var` Three suppressions were added for behavioural differences rather than real defects: `sonarjs/no-redundant-optional` cannot see `exactOptionalPropertyTypes` without type information, and `vitest/no-conditional-expect` flags a helper that is not a test block. The existing directive in `globals.d.ts` moved down a line because oxlint reports the index signature where ESLint reported the interface. `@eslint-react/component-hook-factories` was dropped: it does not exist in that plugin and was silently ignored by ESLint because it was `off`. Co-Authored-By: Claude Opus 5 (1M context) --- .github/dependabot.yml | 6 +- .github/workflows/ci.yml | 7 +- .github/workflows/publish.yml | 7 +- .oxlintrc.json | 956 ++++++++++++++++++++++++++ .vscode/settings.json | 4 + AGENTS.md | 7 +- eslint.config.ts | 1018 +--------------------------- package-lock.json | 672 +++++++++++++----- package.json | 11 +- src/globals.d.ts | 2 +- src/types.ts | 2 + test/browser/scrollToCell.test.tsx | 2 + 12 files changed, 1504 insertions(+), 1190 deletions(-) create mode 100644 .oxlintrc.json diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6fd7e29382..b994543b90 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -19,12 +19,14 @@ updates: patterns: - 'tsdown' - '@tsdown/*' + oxlint: + patterns: + - 'oxlint' + - 'oxlint-tsgolint' vitest: patterns: - 'vitest' - '@vitest/*' - exclude-patterns: - - '@vitest/eslint-plugin' - package-ecosystem: 'github-actions' directory: '/' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3be5f75b59..3eb6a0a594 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,8 +23,11 @@ jobs: - name: Typecheck run: node --run typecheck - - name: ESLint - run: node --run eslint + - name: Oxlint + run: node --run lint + + - name: ESLint (markdown) + run: node --run lint:md - name: Oxfmt run: node --run format:check diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f840f2f395..9f74d42b6c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -33,8 +33,11 @@ jobs: - name: Typecheck run: node --run typecheck - - name: ESLint - run: node --run eslint + - name: Oxlint + run: node --run lint + + - name: ESLint (markdown) + run: node --run lint:md - name: Oxfmt run: node --run format:check diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 0000000000..bde778bd3c --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,956 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": [], + "categories": { + "correctness": "off" + }, + "options": { + "typeAware": true + }, + "env": { + "builtin": true + }, + "ignorePatterns": [ + ".agents", + ".cache", + ".claude", + ".nitro", + ".output", + ".tanstack", + "coverage", + "dist", + "lib" + ], + "overrides": [ + { + "files": ["**/*.{js,ts,tsx}"], + "rules": { + "array-callback-return": [ + "warn", + { + "checkForEach": true + } + ], + "constructor-super": "off", + "for-direction": "warn", + "getter-return": "warn", + "no-async-promise-executor": "warn", + "no-await-in-loop": "off", + "no-class-assign": "off", + "no-compare-neg-zero": "warn", + "no-cond-assign": "warn", + "no-const-assign": "off", + "no-constant-binary-expression": "warn", + "no-constant-condition": "warn", + "no-constructor-return": "warn", + "no-control-regex": "warn", + "no-debugger": "warn", + "no-dupe-class-members": "off", + "no-dupe-else-if": "warn", + "no-dupe-keys": "warn", + "no-duplicate-case": "warn", + "no-duplicate-imports": "off", + "no-empty-character-class": "warn", + "no-empty-pattern": "warn", + "no-ex-assign": "warn", + "no-fallthrough": [ + "warn", + { + "reportUnusedFallthroughComment": true + } + ], + "no-func-assign": "warn", + "no-import-assign": "warn", + "no-inner-declarations": "off", + "no-invalid-regexp": "warn", + "no-irregular-whitespace": "warn", + "no-loss-of-precision": "warn", + "no-misleading-character-class": "warn", + "no-new-native-nonconstructor": "warn", + "no-obj-calls": "warn", + "no-promise-executor-return": "warn", + "no-prototype-builtins": "warn", + "no-self-assign": [ + "warn", + { + "props": true + } + ], + "no-self-compare": "warn", + "no-setter-return": "warn", + "no-sparse-arrays": "warn", + "no-template-curly-in-string": "warn", + "no-this-before-super": "off", + "no-unassigned-vars": "warn", + "no-undef": "off", + "no-unexpected-multiline": "off", + "no-unmodified-loop-condition": "warn", + "no-unreachable": "warn", + "no-unreachable-loop": "warn", + "no-unsafe-finally": "warn", + "no-unsafe-negation": [ + "warn", + { + "enforceForOrderingRelations": true + } + ], + "no-unsafe-optional-chaining": [ + "warn", + { + "disallowArithmeticOperators": true + } + ], + "no-unused-private-class-members": "off", + "no-unused-vars": [ + "warn", + { + "enableAutofixRemoval": { + "imports": true + }, + "ignoreRestSiblings": true + } + ], + "no-use-before-define": "off", + "no-useless-backreference": "warn", + "use-isnan": [ + "warn", + { + "enforceForIndexOf": true + } + ], + "valid-typeof": [ + "warn", + { + "requireStringLiterals": true + } + ], + "accessor-pairs": "warn", + "arrow-body-style": "off", + "block-scoped-var": "warn", + "capitalized-comments": "off", + "class-methods-use-this": "warn", + "complexity": "off", + "curly": "off", + "default-case": "warn", + "default-case-last": "warn", + "default-param-last": "off", + "eqeqeq": [ + "warn", + "always", + { + "null": "ignore" + } + ], + "func-name-matching": "off", + "func-names": "off", + "func-style": "off", + "grouped-accessor-pairs": ["warn", "getBeforeSet"], + "guard-for-in": "off", + "id-denylist": "off", + "id-length": "off", + "id-match": "off", + "init-declarations": "off", + "logical-assignment-operators": [ + "warn", + "always", + { + "enforceForIfStatements": true + } + ], + "max-classes-per-file": "off", + "max-depth": "off", + "max-lines": "off", + "max-lines-per-function": "off", + "max-nested-callbacks": "off", + "max-params": "off", + "max-statements": "off", + "new-cap": "off", + "no-alert": "off", + "no-array-constructor": "warn", + "no-bitwise": "off", + "no-caller": "warn", + "no-case-declarations": "warn", + "no-console": "warn", + "no-continue": "off", + "no-delete-var": "warn", + "no-div-regex": "off", + "no-else-return": [ + "warn", + { + "allowElseIf": false + } + ], + "no-empty": [ + "warn", + { + "allowEmptyCatch": true + } + ], + "no-empty-function": "off", + "no-empty-static-block": "warn", + "no-eq-null": "off", + "no-eval": "warn", + "no-extend-native": "warn", + "no-extra-bind": "warn", + "no-extra-boolean-cast": [ + "warn", + { + "enforceForLogicalOperands": true + } + ], + "no-extra-label": "warn", + "no-global-assign": "warn", + "no-implicit-coercion": "off", + "no-implicit-globals": "off", + "no-implied-eval": "off", + "no-inline-comments": "off", + "no-iterator": "warn", + "no-label-var": "warn", + "no-labels": "warn", + "no-lone-blocks": "warn", + "no-lonely-if": "warn", + "no-loop-func": "off", + "no-magic-numbers": "off", + "no-multi-assign": "off", + "no-multi-str": "warn", + "no-negated-condition": "off", + "no-nested-ternary": "off", + "no-new": "warn", + "no-new-func": "warn", + "no-new-wrappers": "warn", + "no-nonoctal-decimal-escape": "warn", + "no-object-constructor": "warn", + "no-param-reassign": "off", + "no-plusplus": "off", + "no-proto": "warn", + "no-redeclare": "warn", + "no-regex-spaces": "warn", + "no-restricted-exports": "off", + "no-restricted-globals": [ + "warn", + { + "name": "Omit", + "message": "Use Omit from types instead." + } + ], + "no-restricted-imports": "off", + "no-restricted-properties": "off", + "no-return-assign": "off", + "no-script-url": "warn", + "no-sequences": [ + "warn", + { + "allowInParentheses": false + } + ], + "no-shadow": "off", + "no-shadow-restricted-names": "warn", + "no-ternary": "off", + "no-throw-literal": "off", + "no-undefined": "off", + "no-underscore-dangle": "off", + "no-unneeded-ternary": [ + "warn", + { + "defaultAssignment": false + } + ], + "no-unused-expressions": [ + "warn", + { + "enforceForJSX": true + } + ], + "no-unused-labels": "warn", + "no-useless-call": "warn", + "no-useless-catch": "warn", + "no-useless-computed-key": "warn", + "no-useless-concat": "warn", + "no-useless-constructor": "warn", + "no-useless-escape": "warn", + "no-useless-rename": "warn", + "no-useless-return": "warn", + "no-var": "warn", + "no-void": "warn", + "no-warning-comments": "off", + "no-with": "warn", + "object-shorthand": [ + "warn", + "always", + { + "avoidExplicitReturnArrows": true + } + ], + "operator-assignment": "warn", + "prefer-arrow-callback": [ + "warn", + { + "allowNamedFunctions": true + } + ], + "prefer-const": [ + "warn", + { + "destructuring": "all" + } + ], + "prefer-destructuring": "off", + "prefer-exponentiation-operator": "warn", + "prefer-named-capture-group": "off", + "prefer-numeric-literals": "warn", + "prefer-object-has-own": "warn", + "prefer-object-spread": "warn", + "prefer-promise-reject-errors": "off", + "prefer-regex-literals": [ + "warn", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "warn", + "prefer-spread": "warn", + "prefer-template": "warn", + "preserve-caught-error": "warn", + "radix": "warn", + "require-await": "off", + "require-unicode-regexp": "off", + "require-yield": "warn", + "sort-keys": "off", + "sort-vars": "off", + "symbol-description": "warn", + "vars-on-top": "off", + "yoda": "off", + "unicode-bom": "warn", + "@eslint-react/error-boundaries": "warn", + "@eslint-react/exhaustive-deps": "warn", + "@eslint-react/globals": "warn", + "@eslint-react/immutability": "warn", + "@eslint-react/no-access-state-in-setstate": "warn", + "@eslint-react/no-array-index-key": "off", + "@eslint-react/no-children-count": "warn", + "@eslint-react/no-children-for-each": "warn", + "@eslint-react/no-children-map": "warn", + "@eslint-react/no-children-only": "warn", + "@eslint-react/no-children-to-array": "warn", + "@eslint-react/no-class-component": "warn", + "@eslint-react/no-clone-element": "warn", + "@eslint-react/no-component-will-mount": "warn", + "@eslint-react/no-component-will-receive-props": "warn", + "@eslint-react/no-component-will-update": "warn", + "@eslint-react/no-context-provider": "warn", + "@eslint-react/no-create-ref": "warn", + "@eslint-react/no-direct-mutation-state": "warn", + "@eslint-react/no-duplicate-key": "warn", + "@eslint-react/no-forward-ref": "warn", + "@eslint-react/no-implicit-children": "off", + "@eslint-react/no-implicit-key": "off", + "@eslint-react/no-implicit-ref": "off", + "@eslint-react/no-leaked-conditional-rendering": "off", + "@eslint-react/no-missing-component-display-name": "warn", + "@eslint-react/no-missing-context-display-name": "warn", + "@eslint-react/no-missing-key": "warn", + "@eslint-react/no-misused-capture-owner-stack": "warn", + "@eslint-react/no-nested-component-definitions": "warn", + "@eslint-react/no-nested-lazy-component-declarations": "warn", + "@eslint-react/no-set-state-in-component-did-mount": "warn", + "@eslint-react/no-set-state-in-component-did-update": "warn", + "@eslint-react/no-set-state-in-component-will-update": "warn", + "@eslint-react/no-unnecessary-use-prefix": "warn", + "@eslint-react/no-unsafe-component-will-mount": "warn", + "@eslint-react/no-unsafe-component-will-receive-props": "warn", + "@eslint-react/no-unsafe-component-will-update": "warn", + "@eslint-react/no-unstable-context-value": "warn", + "@eslint-react/no-unstable-default-props": "warn", + "@eslint-react/no-unused-class-component-members": "warn", + "@eslint-react/no-unused-props": "off", + "@eslint-react/no-unused-state": "warn", + "@eslint-react/no-use-context": "warn", + "@eslint-react/purity": "warn", + "@eslint-react/refs": "warn", + "@eslint-react/rules-of-hooks": "warn", + "@eslint-react/set-state-in-effect": "off", + "@eslint-react/set-state-in-render": "warn", + "@eslint-react/static-components": "warn", + "@eslint-react/unsupported-syntax": "warn", + "@eslint-react/use-memo": "warn", + "@eslint-react/use-state": "warn", + "@eslint-react/jsx-no-children-prop": "warn", + "@eslint-react/jsx-no-children-prop-with-children": "warn", + "@eslint-react/jsx-no-comment-textnodes": "warn", + "@eslint-react/jsx-no-key-after-spread": "warn", + "@eslint-react/jsx-no-leaked-dollar": "warn", + "@eslint-react/jsx-no-leaked-semicolon": "warn", + "@eslint-react/jsx-no-namespace": "warn", + "@eslint-react/jsx-no-useless-fragment": [ + "warn", + { + "allowExpressions": false + } + ], + "@eslint-react/rsc-function-definition": "warn", + "@eslint-react/dom-no-dangerously-set-innerhtml": "warn", + "@eslint-react/dom-no-dangerously-set-innerhtml-with-children": "warn", + "@eslint-react/dom-no-find-dom-node": "warn", + "@eslint-react/dom-no-flush-sync": "off", + "@eslint-react/dom-no-hydrate": "warn", + "@eslint-react/dom-no-missing-button-type": "warn", + "@eslint-react/dom-no-missing-iframe-sandbox": "warn", + "@eslint-react/dom-no-render": "warn", + "@eslint-react/dom-no-render-return-value": "warn", + "@eslint-react/dom-no-script-url": "warn", + "@eslint-react/dom-no-string-style-prop": "warn", + "@eslint-react/dom-no-unknown-property": "warn", + "@eslint-react/dom-no-unsafe-iframe-sandbox": "warn", + "@eslint-react/dom-no-unsafe-target-blank": "warn", + "@eslint-react/dom-no-use-form-state": "warn", + "@eslint-react/dom-no-void-elements-with-children": "warn", + "@eslint-react/web-api-no-leaked-event-listener": "warn", + "@eslint-react/web-api-no-leaked-fetch": "warn", + "@eslint-react/web-api-no-leaked-intersection-observer": "warn", + "@eslint-react/web-api-no-leaked-interval": "warn", + "@eslint-react/web-api-no-leaked-resize-observer": "warn", + "@eslint-react/web-api-no-leaked-timeout": "warn", + "@eslint-react/naming-convention-context-name": "warn", + "@eslint-react/naming-convention-id-name": "warn", + "@eslint-react/naming-convention-ref-name": "warn", + "sonarjs/anchor-precedence": "warn", + "sonarjs/argument-type": "warn", + "sonarjs/arguments-order": "warn", + "sonarjs/arguments-usage": "warn", + "sonarjs/array-callback-without-return": "warn", + "sonarjs/array-constructor": "warn", + "sonarjs/arrow-function-convention": "off", + "sonarjs/assertions-in-tests": "warn", + "sonarjs/aws-apigateway-public-api": "off", + "sonarjs/aws-ec2-rds-dms-public": "off", + "sonarjs/aws-ec2-unencrypted-ebs-volume": "off", + "sonarjs/aws-efs-unencrypted": "off", + "sonarjs/aws-iam-all-privileges": "off", + "sonarjs/aws-iam-all-resources-accessible": "off", + "sonarjs/aws-iam-privilege-escalation": "off", + "sonarjs/aws-iam-public-access": "off", + "sonarjs/aws-opensearchservice-domain": "off", + "sonarjs/aws-rds-unencrypted-databases": "off", + "sonarjs/aws-restricted-ip-admin-access": "off", + "sonarjs/aws-s3-bucket-granted-access": "off", + "sonarjs/aws-s3-bucket-insecure-http": "off", + "sonarjs/aws-s3-bucket-public-access": "off", + "sonarjs/aws-s3-bucket-versioning": "off", + "sonarjs/aws-sagemaker-unencrypted-notebook": "off", + "sonarjs/aws-sns-unencrypted-topics": "off", + "sonarjs/aws-sqs-unencrypted-queue": "off", + "sonarjs/bitwise-operators": "warn", + "sonarjs/block-scoped-var": "warn", + "sonarjs/bool-param-default": "warn", + "sonarjs/call-argument-line": "warn", + "sonarjs/chai-determinate-assertion": "warn", + "sonarjs/class-name": "warn", + "sonarjs/class-prototype": "warn", + "sonarjs/code-eval": "warn", + "sonarjs/cognitive-complexity": "off", + "sonarjs/comma-or-logical-or-case": "warn", + "sonarjs/comment-regex": "warn", + "sonarjs/concise-regex": "warn", + "sonarjs/confidential-information-logging": "warn", + "sonarjs/constructor-for-side-effects": "warn", + "sonarjs/content-length": "warn", + "sonarjs/content-security-policy": "warn", + "sonarjs/cookie-no-httponly": "warn", + "sonarjs/cors": "warn", + "sonarjs/csrf": "warn", + "sonarjs/cyclomatic-complexity": "off", + "sonarjs/declarations-in-global-scope": "off", + "sonarjs/deprecation": "off", + "sonarjs/destructuring-assignment-syntax": "warn", + "sonarjs/different-types-comparison": "warn", + "sonarjs/disabled-auto-escaping": "warn", + "sonarjs/disabled-resource-integrity": "warn", + "sonarjs/disabled-timeout": "warn", + "sonarjs/dompurify-unsafe-config": "warn", + "sonarjs/duplicates-in-character-class": "warn", + "sonarjs/dynamically-constructed-templates": "warn", + "sonarjs/elseif-without-else": "off", + "sonarjs/empty-string-repetition": "warn", + "sonarjs/encryption-secure-mode": "warn", + "sonarjs/existing-groups": "warn", + "sonarjs/expression-complexity": "off", + "sonarjs/file-header": "off", + "sonarjs/file-name-differ-from-class": "warn", + "sonarjs/file-permissions": "warn", + "sonarjs/file-uploads": "warn", + "sonarjs/fixme-tag": "warn", + "sonarjs/for-in": "warn", + "sonarjs/for-loop-increment-sign": "warn", + "sonarjs/frame-ancestors": "warn", + "sonarjs/function-inside-loop": "warn", + "sonarjs/function-name": "off", + "sonarjs/function-return-type": "off", + "sonarjs/future-reserved-words": "warn", + "sonarjs/generator-without-yield": "warn", + "sonarjs/hardcoded-secret-signatures": "warn", + "sonarjs/hashing": "warn", + "sonarjs/hidden-files": "warn", + "sonarjs/in-operator-type-error": "warn", + "sonarjs/inconsistent-function-call": "warn", + "sonarjs/index-of-compare-to-positive-number": "warn", + "sonarjs/insecure-cookie": "warn", + "sonarjs/insecure-jwt-token": "warn", + "sonarjs/inverted-assertion-arguments": "warn", + "sonarjs/jsx-no-leaked-render": "warn", + "sonarjs/label-position": "warn", + "sonarjs/link-with-target-blank": "warn", + "sonarjs/max-lines": "off", + "sonarjs/max-lines-per-function": "off", + "sonarjs/max-switch-cases": "off", + "sonarjs/max-union-size": "off", + "sonarjs/misplaced-loop-counter": "warn", + "sonarjs/nested-control-flow": "off", + "sonarjs/new-operator-misuse": "warn", + "sonarjs/no-all-duplicated-branches": "warn", + "sonarjs/no-alphabetical-sort": "warn", + "sonarjs/no-angular-bypass-sanitization": "warn", + "sonarjs/no-array-delete": "warn", + "sonarjs/no-associative-arrays": "warn", + "sonarjs/no-async-constructor": "warn", + "sonarjs/no-built-in-override": "warn", + "sonarjs/no-case-label-in-switch": "warn", + "sonarjs/no-clear-text-protocols": "warn", + "sonarjs/no-code-after-done": "warn", + "sonarjs/no-collapsible-if": "warn", + "sonarjs/no-collection-size-mischeck": "warn", + "sonarjs/no-commented-code": "warn", + "sonarjs/no-control-regex": "warn", + "sonarjs/no-dead-store": "warn", + "sonarjs/no-delete-var": "warn", + "sonarjs/no-duplicate-in-composite": "warn", + "sonarjs/no-duplicate-string": "off", + "sonarjs/no-duplicated-branches": "warn", + "sonarjs/no-element-overwrite": "warn", + "sonarjs/no-empty-after-reluctant": "warn", + "sonarjs/no-empty-alternatives": "warn", + "sonarjs/no-empty-character-class": "warn", + "sonarjs/no-empty-collection": "warn", + "sonarjs/no-empty-group": "warn", + "sonarjs/no-empty-test-file": "warn", + "sonarjs/no-equals-in-for-termination": "warn", + "sonarjs/no-exclusive-tests": "warn", + "sonarjs/no-extra-arguments": "off", + "sonarjs/no-fallthrough": "warn", + "sonarjs/no-for-in-iterable": "warn", + "sonarjs/no-function-declaration-in-block": "warn", + "sonarjs/no-global-this": "warn", + "sonarjs/no-globals-shadowing": "warn", + "sonarjs/no-gratuitous-expressions": "warn", + "sonarjs/no-hardcoded-ip": "warn", + "sonarjs/no-hardcoded-passwords": "warn", + "sonarjs/no-hardcoded-secrets": "warn", + "sonarjs/no-hook-setter-in-body": "warn", + "sonarjs/no-identical-conditions": "warn", + "sonarjs/no-identical-expressions": "warn", + "sonarjs/no-identical-functions": "warn", + "sonarjs/no-ignored-exceptions": "warn", + "sonarjs/no-ignored-return": "warn", + "sonarjs/no-implicit-dependencies": "off", + "sonarjs/no-implicit-global": "warn", + "sonarjs/no-in-misuse": "warn", + "sonarjs/no-incomplete-assertions": "warn", + "sonarjs/no-inconsistent-returns": "off", + "sonarjs/no-incorrect-string-concat": "warn", + "sonarjs/no-internal-api-use": "warn", + "sonarjs/no-intrusive-permissions": "warn", + "sonarjs/no-invalid-regexp": "warn", + "sonarjs/no-invariant-returns": "warn", + "sonarjs/no-inverted-boolean-check": "warn", + "sonarjs/no-ip-forward": "warn", + "sonarjs/no-labels": "warn", + "sonarjs/no-literal-call": "warn", + "sonarjs/no-mime-sniff": "warn", + "sonarjs/no-misleading-array-reverse": "warn", + "sonarjs/no-misleading-character-class": "warn", + "sonarjs/no-mixed-content": "warn", + "sonarjs/no-nested-assignment": "warn", + "sonarjs/no-nested-conditional": "off", + "sonarjs/no-nested-functions": "off", + "sonarjs/no-nested-incdec": "warn", + "sonarjs/no-nested-switch": "warn", + "sonarjs/no-nested-template-literals": "warn", + "sonarjs/no-os-command-from-path": "warn", + "sonarjs/no-parameter-reassignment": "warn", + "sonarjs/no-primitive-wrappers": "warn", + "sonarjs/no-redundant-assignments": "warn", + "sonarjs/no-redundant-boolean": "warn", + "sonarjs/no-redundant-jump": "warn", + "sonarjs/no-redundant-optional": "warn", + "sonarjs/no-reference-error": "off", + "sonarjs/no-referrer-policy": "warn", + "sonarjs/no-regex-spaces": "warn", + "sonarjs/no-require-or-define": "warn", + "sonarjs/no-return-type-any": "warn", + "sonarjs/no-same-argument-assert": "warn", + "sonarjs/no-same-line-conditional": "warn", + "sonarjs/no-selector-parameter": "off", + "sonarjs/no-session-cookies-on-static-assets": "warn", + "sonarjs/no-skipped-tests": "warn", + "sonarjs/no-small-switch": "warn", + "sonarjs/no-sonar-comments": "warn", + "sonarjs/no-table-as-layout": "warn", + "sonarjs/no-try-promise": "warn", + "sonarjs/no-undefined-argument": "warn", + "sonarjs/no-undefined-assignment": "off", + "sonarjs/no-unenclosed-multiline-block": "warn", + "sonarjs/no-uniq-key": "warn", + "sonarjs/no-unthrown-error": "warn", + "sonarjs/no-unused-collection": "warn", + "sonarjs/no-unused-function-argument": "warn", + "sonarjs/no-unused-vars": "warn", + "sonarjs/no-use-of-empty-return-value": "warn", + "sonarjs/no-useless-catch": "warn", + "sonarjs/no-useless-increment": "warn", + "sonarjs/no-useless-intersection": "warn", + "sonarjs/no-useless-react-setstate": "warn", + "sonarjs/no-variable-usage-before-declaration": "warn", + "sonarjs/no-weak-cipher": "warn", + "sonarjs/no-weak-keys": "warn", + "sonarjs/no-wildcard-import": "off", + "sonarjs/non-existent-operator": "warn", + "sonarjs/non-number-in-arithmetic-expression": "warn", + "sonarjs/null-dereference": "warn", + "sonarjs/object-alt-content": "warn", + "sonarjs/operation-returning-nan": "warn", + "sonarjs/post-message": "warn", + "sonarjs/prefer-default-last": "warn", + "sonarjs/prefer-immediate-return": "warn", + "sonarjs/prefer-object-literal": "warn", + "sonarjs/prefer-promise-shorthand": "warn", + "sonarjs/prefer-read-only-props": "off", + "sonarjs/prefer-regexp-exec": "warn", + "sonarjs/prefer-single-boolean-return": "warn", + "sonarjs/prefer-type-guard": "warn", + "sonarjs/prefer-while": "warn", + "sonarjs/production-debug": "warn", + "sonarjs/pseudo-random": "off", + "sonarjs/public-static-readonly": "warn", + "sonarjs/publicly-writable-directories": "warn", + "sonarjs/reduce-initial-value": "warn", + "sonarjs/redundant-type-aliases": "off", + "sonarjs/regex-complexity": "warn", + "sonarjs/review-blockchain-mnemonic": "warn", + "sonarjs/session-regeneration": "warn", + "sonarjs/shorthand-property-grouping": "off", + "sonarjs/single-char-in-character-classes": "warn", + "sonarjs/single-character-alternation": "warn", + "sonarjs/slow-regex": "warn", + "sonarjs/sql-queries": "warn", + "sonarjs/stable-tests": "warn", + "sonarjs/stateful-regex": "warn", + "sonarjs/strict-transport-security": "warn", + "sonarjs/strings-comparison": "warn", + "sonarjs/table-header": "warn", + "sonarjs/table-header-reference": "warn", + "sonarjs/test-check-exception": "warn", + "sonarjs/todo-tag": "off", + "sonarjs/too-many-break-or-continue-in-loop": "off", + "sonarjs/unicode-aware-regex": "warn", + "sonarjs/unused-import": "warn", + "sonarjs/unused-named-groups": "warn", + "sonarjs/unverified-certificate": "warn", + "sonarjs/unverified-hostname": "warn", + "sonarjs/updated-const-var": "warn", + "sonarjs/updated-loop-counter": "off", + "sonarjs/use-type-alias": "warn", + "sonarjs/values-not-convertible-to-numbers": "warn", + "sonarjs/variable-name": "warn", + "sonarjs/void-use": "warn", + "sonarjs/weak-ssl": "warn", + "sonarjs/x-powered-by": "warn", + "sonarjs/xml-parser-xxe": "warn", + "react/rules-of-hooks": "warn", + "react/exhaustive-deps": "warn", + "typescript/consistent-return": "off", + "typescript/dot-notation": "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/class-literal-property-style": "off", + "typescript/consistent-generic-constructors": "warn", + "typescript/consistent-indexed-object-style": "warn", + "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/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, + "ignoreVoidReturningFunctions": 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-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-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/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", + { + "path": "never", + "types": "never", + "lib": "never" + } + ], + "typescript/unbound-method": "off", + "typescript/unified-signatures": "off", + "typescript/use-unknown-in-catch-callback-variable": "warn" + }, + "jsPlugins": ["@eslint-react/eslint-plugin", "eslint-plugin-sonarjs"], + "plugins": ["typescript", "react"] + }, + { + "files": ["test/**/*"], + "rules": { + "@eslint-react/no-create-ref": "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": "warn", + "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", + { + "alwaysAwait": true + } + ], + "vitest/valid-expect-in-promise": "warn", + "vitest/valid-title": "warn", + "vitest/warn-todo": "warn", + "typescript/no-floating-promises": "warn" + }, + "jsPlugins": ["@eslint-react/eslint-plugin"], + "plugins": ["typescript", "vitest"] + }, + { + "files": ["test/failOnConsole.ts"], + "rules": { + "no-console": "off" + } + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 4a59117848..89ea30999a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,7 +10,11 @@ "eslint.options": { "flags": ["unstable_native_nodejs_ts_config"] }, + // ESLint is only used for markdown; JS/TS is linted by the oxc extension + "eslint.validate": ["markdown"], "eslint.problems.shortenToSingleLine": true, + "oxc.typeAware": true, + "oxc.unusedDisableDirectives": "warn", "files.readonlyInclude": { "**/routeTree.gen.ts": true }, diff --git a/AGENTS.md b/AGENTS.md index 008aa423b8..a76be47e82 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,8 +6,9 @@ npm ci # setup node --run build # library → lib/ node --run typecheck # tsc --build -node --run eslint # eslint --max-warnings 0 -node --run eslint:fix # eslint --fix +node --run lint # oxlint --max-warnings 0 --type-aware +node --run lint:fix # oxlint --fix +node --run lint:md # eslint --max-warnings 0 (markdown only) node --run format # oxfmt node --run test # vitest (browser + node) node --run test -- # single test, e.g. test/browser/rowHeight.test.ts @@ -59,4 +60,4 @@ website/ # demo site (Vite + TanStack Router) ## Validation -Run before submitting changes: `node --run typecheck`, `node --run eslint`, `node --run format`, `node --run test`. +Run before submitting changes: `node --run typecheck`, `node --run lint`, `node --run format`, `node --run test`. diff --git a/eslint.config.ts b/eslint.config.ts index 2e47a7ffae..36b148fea7 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -1,13 +1,22 @@ -import eslintReact from '@eslint-react/eslint-plugin'; import markdown from '@eslint/markdown'; -import vitest from '@vitest/eslint-plugin'; -import reactHooks from 'eslint-plugin-react-hooks'; -import sonarjs from 'eslint-plugin-sonarjs'; import { defineConfig, globalIgnores } from 'eslint/config'; -import tseslint from 'typescript-eslint'; +// ESLint is only kept for markdown linting. Everything else has moved to oxlint (`.oxlintrc.json`). +// `@eslint/markdown` is built on ESLint's language plugin API, which oxlint does not support. export default defineConfig([ - globalIgnores(['.cache', '.claude', '.nitro', '.output', '.tanstack', 'coverage', 'dist', 'lib']), + globalIgnores([ + '.agents', + '.cache', + '.claude', + '.nitro', + '.output', + '.tanstack', + 'coverage', + 'dist', + 'lib', + // linted by oxlint + '**/*.{js,ts,tsx}' + ]), { linterOptions: { @@ -15,1003 +24,6 @@ export default defineConfig([ } }, - { - name: 'common', - files: ['**/*.{js,ts,tsx}'], - - plugins: { - // @ts-expect-error - 'react-hooks': reactHooks, - '@eslint-react': eslintReact, - sonarjs, - '@typescript-eslint': tseslint.plugin - }, - - languageOptions: { - parser: tseslint.parser, - - parserOptions: { - ecmaVersion: 'latest', - jsxPragma: null, - projectService: true, - warnOnUnsupportedTypeScriptVersion: false - } - }, - - rules: { - // Possible Problems - // https://eslint.org/docs/latest/rules/#possible-problems - 'array-callback-return': [1, { checkForEach: true }], - 'constructor-super': 0, // covered by TS - 'for-direction': 1, - 'getter-return': 1, - 'no-async-promise-executor': 1, - 'no-await-in-loop': 0, - 'no-class-assign': 0, - 'no-compare-neg-zero': 1, - 'no-cond-assign': 1, - 'no-const-assign': 0, - 'no-constant-binary-expression': 1, - 'no-constant-condition': 1, - 'no-constructor-return': 1, - 'no-control-regex': 1, - 'no-debugger': 1, - 'no-dupe-args': 1, - 'no-dupe-class-members': 0, // replaced by @typescript-eslint/no-dupe-class-members - 'no-dupe-else-if': 1, - 'no-dupe-keys': 1, - 'no-duplicate-case': 1, - 'no-duplicate-imports': 0, - 'no-empty-character-class': 1, - 'no-empty-pattern': 1, - 'no-ex-assign': 1, - 'no-fallthrough': [1, { reportUnusedFallthroughComment: true }], - 'no-func-assign': 1, - 'no-import-assign': 1, - 'no-inner-declarations': 0, - 'no-invalid-regexp': 1, - 'no-irregular-whitespace': 1, - 'no-loss-of-precision': 1, - 'no-misleading-character-class': 1, - 'no-new-native-nonconstructor': 1, - 'no-obj-calls': 1, - 'no-promise-executor-return': 1, - 'no-prototype-builtins': 1, - 'no-self-assign': [1, { props: true }], - 'no-self-compare': 1, - 'no-setter-return': 1, - 'no-sparse-arrays': 1, - 'no-template-curly-in-string': 1, - 'no-this-before-super': 0, - 'no-unassigned-vars': 1, - 'no-undef': 0, - 'no-unexpected-multiline': 0, - 'no-unmodified-loop-condition': 1, - 'no-unreachable': 1, - 'no-unreachable-loop': 1, - 'no-unsafe-finally': 1, - 'no-unsafe-negation': [1, { enforceForOrderingRelations: true }], - 'no-unsafe-optional-chaining': [1, { disallowArithmeticOperators: true }], - 'no-unused-private-class-members': 0, // replaced by @typescript-eslint/no-unused-private-class-members - 'no-unused-vars': 0, // replaced by @typescript-eslint/no-unused-vars - 'no-use-before-define': 0, // replaced by @typescript-eslint/no-use-before-define - 'no-useless-backreference': 1, - 'require-atomic-updates': 1, - 'use-isnan': [1, { enforceForIndexOf: true }], - 'valid-typeof': [1, { requireStringLiterals: true }], - - // Suggestions - // https://eslint.org/docs/latest/rules/#suggestions - 'accessor-pairs': 1, - 'arrow-body-style': 0, - 'block-scoped-var': 1, - camelcase: 0, - 'capitalized-comments': 0, - 'class-methods-use-this': 0, // replaced by @typescript-eslint/class-methods-use-this - complexity: 0, - 'consistent-return': 0, // replaced by @typescript-eslint/consistent-return - 'consistent-this': 0, - curly: 0, - 'default-case': 1, - 'default-case-last': 1, - 'default-param-last': 0, // replaced by @typescript-eslint/default-param-last - 'dot-notation': 0, // replaced by @typescript-eslint/dot-notation - eqeqeq: [1, 'always', { null: 'ignore' }], - 'func-name-matching': 0, - 'func-names': 0, - 'func-style': 0, - 'grouped-accessor-pairs': [1, 'getBeforeSet'], - 'guard-for-in': 0, - 'id-denylist': 0, - 'id-length': 0, - 'id-match': 0, - 'init-declarations': 0, // replaced by @typescript-eslint/init-declarations - 'logical-assignment-operators': [1, 'always', { enforceForIfStatements: true }], - 'max-classes-per-file': 0, - 'max-depth': 0, - 'max-lines': 0, - 'max-lines-per-function': 0, - 'max-nested-callbacks': 0, - 'max-params': 0, // replaced by @typescript-eslint/max-params - 'max-statements': 0, - 'multiline-comment-style': 0, - 'new-cap': 0, - 'no-alert': 0, - 'no-array-constructor': 0, // replaced by @typescript-eslint/no-array-constructor - 'no-bitwise': 0, - 'no-caller': 1, - 'no-case-declarations': 1, - 'no-console': 1, - 'no-continue': 0, - 'no-delete-var': 1, - 'no-div-regex': 0, - 'no-else-return': [1, { allowElseIf: false }], - 'no-empty': [1, { allowEmptyCatch: true }], - 'no-empty-function': 0, // replaced by @typescript-eslint/no-empty-function - 'no-empty-static-block': 1, - 'no-eq-null': 0, - 'no-eval': 1, - 'no-extend-native': 1, - 'no-extra-bind': 1, - 'no-extra-boolean-cast': [1, { enforceForLogicalOperands: true }], - 'no-extra-label': 1, - 'no-global-assign': 1, - 'no-implicit-coercion': 0, - 'no-implicit-globals': 0, - 'no-implied-eval': 0, // replaced by @typescript-eslint/no-implied-eval - 'no-inline-comments': 0, - 'no-invalid-this': 0, // replaced by @typescript-eslint/no-invalid-this - 'no-iterator': 1, - 'no-label-var': 1, - 'no-labels': 1, - 'no-lone-blocks': 1, - 'no-lonely-if': 1, - 'no-loop-func': 0, // replaced by @typescript-eslint/no-loop-func - 'no-magic-numbers': 0, // replaced by @typescript-eslint/no-magic-numbers - 'no-multi-assign': 0, - 'no-multi-str': 1, - 'no-negated-condition': 0, - 'no-nested-ternary': 0, - 'no-new': 1, - 'no-new-func': 1, - 'no-new-wrappers': 1, - 'no-nonoctal-decimal-escape': 1, - 'no-object-constructor': 1, - 'no-octal': 1, - 'no-octal-escape': 1, - 'no-param-reassign': 0, - 'no-plusplus': 0, - 'no-proto': 1, - 'no-redeclare': 0, // replaced by @typescript-eslint/no-redeclare - 'no-regex-spaces': 1, - 'no-restricted-exports': 0, - 'no-restricted-globals': [ - 1, - { - name: 'Omit', - message: 'Use Omit from types instead.' - } - ], - 'no-restricted-imports': 0, // replaced by @typescript-eslint/no-restricted-imports - 'no-restricted-properties': 0, - 'no-restricted-syntax': 0, - 'no-return-assign': 0, - 'no-return-await': 0, // replaced by @typescript-eslint/return-await - 'no-script-url': 1, - 'no-sequences': [1, { allowInParentheses: false }], - 'no-shadow': 0, // replaced by @typescript-eslint/no-shadow - 'no-shadow-restricted-names': 1, - 'no-ternary': 0, - 'no-throw-literal': 0, // replaced by @typescript-eslint/only-throw-error - 'no-undef-init': 1, - 'no-undefined': 0, - 'no-underscore-dangle': 0, - 'no-unneeded-ternary': [1, { defaultAssignment: false }], - 'no-unused-expressions': 0, // replaced by @typescript-eslint/no-unused-expressions - 'no-unused-labels': 1, - 'no-useless-call': 1, - 'no-useless-catch': 1, - 'no-useless-computed-key': 1, - 'no-useless-concat': 1, - 'no-useless-constructor': 0, // replaced by @typescript-eslint/no-useless-constructor - 'no-useless-escape': 1, - 'no-useless-rename': 1, - 'no-useless-return': 1, - 'no-var': 1, - 'no-void': 1, - 'no-warning-comments': 0, - 'no-with': 1, - 'object-shorthand': [1, 'always', { avoidExplicitReturnArrows: true }], - 'one-var': [1, 'never'], - 'operator-assignment': 1, - 'prefer-arrow-callback': [1, { allowNamedFunctions: true }], - 'prefer-const': [1, { destructuring: 'all' }], - 'prefer-destructuring': 0, // replaced by @typescript-eslint/prefer-destructuring - 'prefer-exponentiation-operator': 1, - 'prefer-named-capture-group': 0, - 'prefer-numeric-literals': 1, - 'prefer-object-has-own': 1, - 'prefer-object-spread': 1, - 'prefer-promise-reject-errors': 0, // replaced by @typescript-eslint/prefer-promise-reject-errors - 'prefer-regex-literals': [1, { disallowRedundantWrapping: true }], - 'prefer-rest-params': 1, - 'prefer-spread': 1, - 'prefer-template': 1, - 'preserve-caught-error': 1, - radix: 1, - 'require-await': 0, // replaced by @typescript-eslint/require-await - 'require-unicode-regexp': 0, - 'require-yield': 1, - 'sort-imports': 0, - 'sort-keys': 0, - 'sort-vars': 0, - strict: 1, - 'symbol-description': 1, - 'vars-on-top': 0, - yoda: 0, - - // Layout & Formatting - // https://eslint.org/docs/latest/rules/#layout--formatting - 'unicode-bom': 1, - - // React Hooks - // https://github.com/facebook/react/tree/main/packages/eslint-plugin-react-hooks - // https://react.dev/reference/eslint-plugin-react-hooks - 'react-hooks/rules-of-hooks': 1, - 'react-hooks/exhaustive-deps': 1, - 'react-hooks/config': 1, - 'react-hooks/error-boundaries': 1, - 'react-hooks/gating': 1, - 'react-hooks/globals': 1, - 'react-hooks/immutability': 0, - 'react-hooks/incompatible-library': 1, - 'react-hooks/preserve-manual-memoization': 1, - 'react-hooks/purity': 1, - 'react-hooks/refs': 1, - 'react-hooks/set-state-in-effect': 1, - 'react-hooks/set-state-in-render': 1, - 'react-hooks/static-components': 1, - 'react-hooks/unsupported-syntax': 1, - 'react-hooks/use-memo': 1, - - // ESLint React - // https://eslint-react.xyz/docs/rules - /* -// copy all the rules from the rules table for easy pasting -copy( - Iterator.from( - document - // select all non-debug rule links - .querySelectorAll('tr a:not([href*="rules/debug"])') - ) - // map link to rule declaration - .map((a) => `'@eslint-react/${a.pathname.slice(a.pathname.lastIndexOf('/') + 1)}': 1,`) - .toArray() - .join('\n') -); - */ - '@eslint-react/error-boundaries': 1, - '@eslint-react/exhaustive-deps': 1, - '@eslint-react/globals': 1, - '@eslint-react/immutability': 1, - '@eslint-react/no-access-state-in-setstate': 1, - '@eslint-react/no-array-index-key': 0, - '@eslint-react/no-children-count': 1, - '@eslint-react/no-children-for-each': 1, - '@eslint-react/no-children-map': 1, - '@eslint-react/no-children-only': 1, - '@eslint-react/no-children-to-array': 1, - '@eslint-react/no-class-component': 1, - '@eslint-react/no-clone-element': 1, - '@eslint-react/no-component-will-mount': 1, - '@eslint-react/no-component-will-receive-props': 1, - '@eslint-react/no-component-will-update': 1, - '@eslint-react/no-context-provider': 1, - '@eslint-react/no-create-ref': 1, - '@eslint-react/no-direct-mutation-state': 1, - '@eslint-react/no-duplicate-key': 1, - '@eslint-react/no-forward-ref': 1, - '@eslint-react/no-implicit-children': 0, - '@eslint-react/no-implicit-key': 1, - '@eslint-react/no-implicit-ref': 0, - '@eslint-react/no-leaked-conditional-rendering': 1, - '@eslint-react/no-missing-component-display-name': 1, - '@eslint-react/no-missing-context-display-name': 1, - '@eslint-react/no-missing-key': 1, - '@eslint-react/no-misused-capture-owner-stack': 1, - '@eslint-react/no-nested-component-definitions': 1, - '@eslint-react/no-nested-lazy-component-declarations': 1, - '@eslint-react/no-set-state-in-component-did-mount': 1, - '@eslint-react/no-set-state-in-component-did-update': 1, - '@eslint-react/no-set-state-in-component-will-update': 1, - '@eslint-react/no-unnecessary-use-prefix': 1, - '@eslint-react/no-unsafe-component-will-mount': 1, - '@eslint-react/no-unsafe-component-will-receive-props': 1, - '@eslint-react/no-unsafe-component-will-update': 1, - '@eslint-react/no-unstable-context-value': 1, - '@eslint-react/no-unstable-default-props': 1, - '@eslint-react/no-unused-class-component-members': 1, - '@eslint-react/no-unused-props': 1, - '@eslint-react/no-unused-state': 1, - '@eslint-react/no-use-context': 1, - '@eslint-react/purity': 1, - '@eslint-react/refs': 1, - '@eslint-react/rules-of-hooks': 1, - '@eslint-react/set-state-in-effect': 0, - '@eslint-react/set-state-in-render': 1, - '@eslint-react/static-components': 1, - '@eslint-react/unsupported-syntax': 1, - '@eslint-react/use-memo': 1, - '@eslint-react/use-state': 1, - '@eslint-react/jsx-no-children-prop': 1, - '@eslint-react/jsx-no-children-prop-with-children': 1, - '@eslint-react/jsx-no-comment-textnodes': 1, - '@eslint-react/jsx-no-key-after-spread': 1, - '@eslint-react/jsx-no-leaked-dollar': 1, - '@eslint-react/jsx-no-leaked-semicolon': 1, - '@eslint-react/jsx-no-namespace': 1, - '@eslint-react/jsx-no-useless-fragment': [1, { allowExpressions: false }], - '@eslint-react/rsc-function-definition': 1, - '@eslint-react/dom-no-dangerously-set-innerhtml': 1, - '@eslint-react/dom-no-dangerously-set-innerhtml-with-children': 1, - '@eslint-react/dom-no-find-dom-node': 1, - '@eslint-react/dom-no-flush-sync': 0, - '@eslint-react/dom-no-hydrate': 1, - '@eslint-react/dom-no-missing-button-type': 1, - '@eslint-react/dom-no-missing-iframe-sandbox': 1, - '@eslint-react/dom-no-render': 1, - '@eslint-react/dom-no-render-return-value': 1, - '@eslint-react/dom-no-script-url': 1, - '@eslint-react/dom-no-string-style-prop': 1, - '@eslint-react/dom-no-unknown-property': 1, - '@eslint-react/dom-no-unsafe-iframe-sandbox': 1, - '@eslint-react/dom-no-unsafe-target-blank': 1, - '@eslint-react/dom-no-use-form-state': 1, - '@eslint-react/dom-no-void-elements-with-children': 1, - '@eslint-react/web-api-no-leaked-event-listener': 1, - '@eslint-react/web-api-no-leaked-fetch': 1, - '@eslint-react/web-api-no-leaked-intersection-observer': 1, - '@eslint-react/web-api-no-leaked-interval': 1, - '@eslint-react/web-api-no-leaked-resize-observer': 1, - '@eslint-react/web-api-no-leaked-timeout': 1, - '@eslint-react/naming-convention-context-name': 1, - '@eslint-react/naming-convention-id-name': 1, - '@eslint-react/naming-convention-ref-name': 1, - - // SonarJS rules - // https://github.com/SonarSource/SonarJS/blob/master/packages/analysis/src/jsts/rules/README.md#rules - /* -// copy all the rules from the rules table for easy pasting -copy( - Iterator.from( - document - // select rules table - .querySelector('.markdown-heading:has(> a[href="#rules"]) ~ markdown-accessiblity-table') - // select all rows with a rule - .querySelectorAll('tr:has(a)') - ) - // filter out deprecated rules - .filter((row) => row.lastElementChild.textContent === '') - // map row to rule declaration - .map((row) => `'sonarjs/${row.firstElementChild.textContent}': 1,`) - .toArray() - .join('\n') -); - */ - 'sonarjs/anchor-precedence': 1, - 'sonarjs/argument-type': 1, - 'sonarjs/arguments-order': 1, - 'sonarjs/arguments-usage': 1, - 'sonarjs/array-callback-without-return': 1, - 'sonarjs/array-constructor': 1, - 'sonarjs/arrow-function-convention': 0, - 'sonarjs/assertions-in-tests': 1, - 'sonarjs/aws-apigateway-public-api': 0, - 'sonarjs/aws-ec2-rds-dms-public': 0, - 'sonarjs/aws-ec2-unencrypted-ebs-volume': 0, - 'sonarjs/aws-efs-unencrypted': 0, - 'sonarjs/aws-iam-all-privileges': 0, - 'sonarjs/aws-iam-all-resources-accessible': 0, - 'sonarjs/aws-iam-privilege-escalation': 0, - 'sonarjs/aws-iam-public-access': 0, - 'sonarjs/aws-opensearchservice-domain': 0, - 'sonarjs/aws-rds-unencrypted-databases': 0, - 'sonarjs/aws-restricted-ip-admin-access': 0, - 'sonarjs/aws-s3-bucket-granted-access': 0, - 'sonarjs/aws-s3-bucket-insecure-http': 0, - 'sonarjs/aws-s3-bucket-public-access': 0, - 'sonarjs/aws-s3-bucket-versioning': 0, - 'sonarjs/aws-sagemaker-unencrypted-notebook': 0, - 'sonarjs/aws-sns-unencrypted-topics': 0, - 'sonarjs/aws-sqs-unencrypted-queue': 0, - 'sonarjs/bitwise-operators': 1, - 'sonarjs/block-scoped-var': 1, - 'sonarjs/bool-param-default': 1, - 'sonarjs/call-argument-line': 1, - 'sonarjs/chai-determinate-assertion': 1, - 'sonarjs/class-name': 1, - 'sonarjs/class-prototype': 1, - 'sonarjs/code-eval': 1, - 'sonarjs/cognitive-complexity': 0, - 'sonarjs/comma-or-logical-or-case': 1, - 'sonarjs/comment-regex': 1, - 'sonarjs/concise-regex': 1, - 'sonarjs/confidential-information-logging': 1, - 'sonarjs/constructor-for-side-effects': 1, - 'sonarjs/content-length': 1, - 'sonarjs/content-security-policy': 1, - 'sonarjs/cookie-no-httponly': 1, - 'sonarjs/cors': 1, - 'sonarjs/csrf': 1, - 'sonarjs/cyclomatic-complexity': 0, - 'sonarjs/declarations-in-global-scope': 0, - 'sonarjs/deprecation': 0, - 'sonarjs/destructuring-assignment-syntax': 1, - 'sonarjs/different-types-comparison': 1, - 'sonarjs/disabled-auto-escaping': 1, - 'sonarjs/disabled-resource-integrity': 1, - 'sonarjs/disabled-timeout': 1, - 'sonarjs/dompurify-unsafe-config': 1, - 'sonarjs/duplicates-in-character-class': 1, - 'sonarjs/dynamically-constructed-templates': 1, - 'sonarjs/elseif-without-else': 0, - 'sonarjs/empty-string-repetition': 1, - 'sonarjs/encryption-secure-mode': 1, - 'sonarjs/existing-groups': 1, - 'sonarjs/expression-complexity': 0, - 'sonarjs/file-header': 0, - 'sonarjs/file-name-differ-from-class': 1, - 'sonarjs/file-permissions': 1, - 'sonarjs/file-uploads': 1, - 'sonarjs/fixme-tag': 1, - 'sonarjs/for-in': 1, - 'sonarjs/for-loop-increment-sign': 1, - 'sonarjs/frame-ancestors': 1, - 'sonarjs/function-inside-loop': 1, - 'sonarjs/function-name': 0, - 'sonarjs/function-return-type': 0, - 'sonarjs/future-reserved-words': 1, - 'sonarjs/generator-without-yield': 1, - 'sonarjs/hardcoded-secret-signatures': 1, - 'sonarjs/hashing': 1, - 'sonarjs/hidden-files': 1, - 'sonarjs/in-operator-type-error': 1, - 'sonarjs/inconsistent-function-call': 1, - 'sonarjs/index-of-compare-to-positive-number': 1, - 'sonarjs/insecure-cookie': 1, - 'sonarjs/insecure-jwt-token': 1, - 'sonarjs/inverted-assertion-arguments': 1, - 'sonarjs/jsx-no-leaked-render': 1, - 'sonarjs/label-position': 1, - 'sonarjs/link-with-target-blank': 1, - 'sonarjs/max-lines': 0, - 'sonarjs/max-lines-per-function': 0, - 'sonarjs/max-switch-cases': 0, - 'sonarjs/max-union-size': 0, - 'sonarjs/misplaced-loop-counter': 1, - 'sonarjs/nested-control-flow': 0, - 'sonarjs/new-operator-misuse': 1, - 'sonarjs/no-all-duplicated-branches': 1, - 'sonarjs/no-alphabetical-sort': 1, - 'sonarjs/no-angular-bypass-sanitization': 1, - 'sonarjs/no-array-delete': 1, - 'sonarjs/no-associative-arrays': 1, - 'sonarjs/no-async-constructor': 1, - 'sonarjs/no-built-in-override': 1, - 'sonarjs/no-case-label-in-switch': 1, - 'sonarjs/no-clear-text-protocols': 1, - 'sonarjs/no-code-after-done': 1, - 'sonarjs/no-collapsible-if': 1, - 'sonarjs/no-collection-size-mischeck': 1, - 'sonarjs/no-commented-code': 1, - 'sonarjs/no-control-regex': 1, - 'sonarjs/no-dead-store': 1, - 'sonarjs/no-delete-var': 1, - 'sonarjs/no-duplicate-in-composite': 1, - 'sonarjs/no-duplicate-string': 0, - 'sonarjs/no-duplicated-branches': 1, - 'sonarjs/no-element-overwrite': 1, - 'sonarjs/no-empty-after-reluctant': 1, - 'sonarjs/no-empty-alternatives': 1, - 'sonarjs/no-empty-character-class': 1, - 'sonarjs/no-empty-collection': 1, - 'sonarjs/no-empty-group': 1, - 'sonarjs/no-empty-test-file': 1, - 'sonarjs/no-equals-in-for-termination': 1, - 'sonarjs/no-exclusive-tests': 1, - 'sonarjs/no-extra-arguments': 0, - 'sonarjs/no-fallthrough': 1, - 'sonarjs/no-for-in-iterable': 1, - 'sonarjs/no-function-declaration-in-block': 1, - 'sonarjs/no-global-this': 1, - 'sonarjs/no-globals-shadowing': 1, - 'sonarjs/no-gratuitous-expressions': 1, - 'sonarjs/no-hardcoded-ip': 1, - 'sonarjs/no-hardcoded-passwords': 1, - 'sonarjs/no-hardcoded-secrets': 1, - 'sonarjs/no-hook-setter-in-body': 1, - 'sonarjs/no-identical-conditions': 1, - 'sonarjs/no-identical-expressions': 1, - 'sonarjs/no-identical-functions': 1, - 'sonarjs/no-ignored-exceptions': 1, - 'sonarjs/no-ignored-return': 1, - 'sonarjs/no-implicit-dependencies': 0, - 'sonarjs/no-implicit-global': 1, - 'sonarjs/no-in-misuse': 1, - 'sonarjs/no-incomplete-assertions': 1, - 'sonarjs/no-inconsistent-returns': 0, - 'sonarjs/no-incorrect-string-concat': 1, - 'sonarjs/no-internal-api-use': 1, - 'sonarjs/no-intrusive-permissions': 1, - 'sonarjs/no-invalid-regexp': 1, - 'sonarjs/no-invariant-returns': 1, - 'sonarjs/no-inverted-boolean-check': 1, - 'sonarjs/no-ip-forward': 1, - 'sonarjs/no-labels': 1, - 'sonarjs/no-literal-call': 1, - 'sonarjs/no-mime-sniff': 1, - 'sonarjs/no-misleading-array-reverse': 1, - 'sonarjs/no-misleading-character-class': 1, - 'sonarjs/no-mixed-content': 1, - 'sonarjs/no-nested-assignment': 1, - 'sonarjs/no-nested-conditional': 0, - 'sonarjs/no-nested-functions': 0, - 'sonarjs/no-nested-incdec': 1, - 'sonarjs/no-nested-switch': 1, - 'sonarjs/no-nested-template-literals': 1, - 'sonarjs/no-os-command-from-path': 1, - 'sonarjs/no-parameter-reassignment': 1, - 'sonarjs/no-primitive-wrappers': 1, - 'sonarjs/no-redundant-assignments': 1, - 'sonarjs/no-redundant-boolean': 1, - 'sonarjs/no-redundant-jump': 1, - 'sonarjs/no-redundant-optional': 1, - 'sonarjs/no-reference-error': 0, - 'sonarjs/no-referrer-policy': 1, - 'sonarjs/no-regex-spaces': 1, - 'sonarjs/no-require-or-define': 1, - 'sonarjs/no-return-type-any': 1, - 'sonarjs/no-same-argument-assert': 1, - 'sonarjs/no-same-line-conditional': 1, - 'sonarjs/no-selector-parameter': 0, - 'sonarjs/no-session-cookies-on-static-assets': 1, - 'sonarjs/no-skipped-tests': 1, - 'sonarjs/no-small-switch': 1, - 'sonarjs/no-sonar-comments': 1, - 'sonarjs/no-table-as-layout': 1, - 'sonarjs/no-try-promise': 1, - 'sonarjs/no-undefined-argument': 1, - 'sonarjs/no-undefined-assignment': 0, - 'sonarjs/no-unenclosed-multiline-block': 1, - 'sonarjs/no-uniq-key': 1, - 'sonarjs/no-unthrown-error': 1, - 'sonarjs/no-unused-collection': 1, - 'sonarjs/no-unused-function-argument': 1, - 'sonarjs/no-unused-vars': 1, - 'sonarjs/no-use-of-empty-return-value': 1, - 'sonarjs/no-useless-catch': 1, - 'sonarjs/no-useless-increment': 1, - 'sonarjs/no-useless-intersection': 1, - 'sonarjs/no-useless-react-setstate': 1, - 'sonarjs/no-variable-usage-before-declaration': 1, - 'sonarjs/no-weak-cipher': 1, - 'sonarjs/no-weak-keys': 1, - 'sonarjs/no-wildcard-import': 0, - 'sonarjs/non-existent-operator': 1, - 'sonarjs/non-number-in-arithmetic-expression': 1, - 'sonarjs/null-dereference': 1, - 'sonarjs/object-alt-content': 1, - 'sonarjs/operation-returning-nan': 1, - 'sonarjs/post-message': 1, - 'sonarjs/prefer-default-last': 1, - 'sonarjs/prefer-immediate-return': 1, - 'sonarjs/prefer-object-literal': 1, - 'sonarjs/prefer-promise-shorthand': 1, - 'sonarjs/prefer-read-only-props': 0, - 'sonarjs/prefer-regexp-exec': 1, - 'sonarjs/prefer-single-boolean-return': 1, - 'sonarjs/prefer-type-guard': 1, - 'sonarjs/prefer-while': 1, - 'sonarjs/production-debug': 1, - 'sonarjs/pseudo-random': 0, - 'sonarjs/public-static-readonly': 1, - 'sonarjs/publicly-writable-directories': 1, - 'sonarjs/reduce-initial-value': 1, - 'sonarjs/redundant-type-aliases': 0, - 'sonarjs/regex-complexity': 1, - 'sonarjs/review-blockchain-mnemonic': 1, - 'sonarjs/session-regeneration': 1, - 'sonarjs/shorthand-property-grouping': 0, - 'sonarjs/single-char-in-character-classes': 1, - 'sonarjs/single-character-alternation': 1, - 'sonarjs/slow-regex': 1, - 'sonarjs/sql-queries': 1, - 'sonarjs/stable-tests': 1, - 'sonarjs/stateful-regex': 1, - 'sonarjs/strict-transport-security': 1, - 'sonarjs/strings-comparison': 1, - 'sonarjs/table-header': 1, - 'sonarjs/table-header-reference': 1, - 'sonarjs/test-check-exception': 1, - 'sonarjs/todo-tag': 0, - 'sonarjs/too-many-break-or-continue-in-loop': 0, - 'sonarjs/unicode-aware-regex': 1, - 'sonarjs/unused-import': 1, - 'sonarjs/unused-named-groups': 1, - 'sonarjs/unverified-certificate': 1, - 'sonarjs/unverified-hostname': 1, - 'sonarjs/updated-const-var': 1, - 'sonarjs/updated-loop-counter': 0, - 'sonarjs/use-type-alias': 1, - 'sonarjs/values-not-convertible-to-numbers': 1, - 'sonarjs/variable-name': 1, - 'sonarjs/void-use': 1, - 'sonarjs/weak-ssl': 1, - 'sonarjs/x-powered-by': 1, - 'sonarjs/xml-parser-xxe': 1, - - // @typescript-eslint/eslint-plugin rules - // https://typescript-eslint.io/rules/ - /* -// copy all the rules from the rules table for easy pasting -copy( - Iterator.from( - document - // select all rows with a rule - .querySelectorAll('tr:has(a)') - ) - // filter out deprecated rules - .filter((row) => row.lastElementChild.textContent === '') - // map row to rule declaration - .map((row) => `'${row.querySelector('a').textContent}': 1,`) - .toArray() - .join('\n') -); - */ - '@typescript-eslint/adjacent-overload-signatures': 1, - '@typescript-eslint/array-type': 1, - '@typescript-eslint/await-thenable': 1, - '@typescript-eslint/ban-ts-comment': [1, { 'ts-expect-error': false }], - '@typescript-eslint/ban-tslint-comment': 0, - '@typescript-eslint/class-literal-property-style': 0, - '@typescript-eslint/class-methods-use-this': 1, - '@typescript-eslint/consistent-generic-constructors': 1, - '@typescript-eslint/consistent-indexed-object-style': 1, - '@typescript-eslint/consistent-return': 0, - '@typescript-eslint/consistent-type-assertions': [ - 1, - { - arrayLiteralTypeAssertions: 'never', - objectLiteralTypeAssertions: 'never' - } - ], - '@typescript-eslint/consistent-type-definitions': 1, - '@typescript-eslint/consistent-type-exports': [ - 1, - { fixMixedExportsWithInlineTypeSpecifier: true } - ], - '@typescript-eslint/consistent-type-imports': [1, { fixStyle: 'inline-type-imports' }], - '@typescript-eslint/default-param-last': 0, - '@typescript-eslint/dot-notation': 1, - '@typescript-eslint/explicit-function-return-type': 0, - '@typescript-eslint/explicit-member-accessibility': 0, - '@typescript-eslint/explicit-module-boundary-types': 0, - '@typescript-eslint/init-declarations': 0, - '@typescript-eslint/max-params': 0, - '@typescript-eslint/member-ordering': 0, - '@typescript-eslint/method-signature-style': 1, - '@typescript-eslint/naming-convention': [ - 1, - { - selector: ['class', 'interface'], - format: ['PascalCase'] - } - ], - '@typescript-eslint/no-array-constructor': 1, - '@typescript-eslint/no-array-delete': 1, - '@typescript-eslint/no-base-to-string': 0, - '@typescript-eslint/no-confusing-non-null-assertion': 0, - '@typescript-eslint/no-confusing-void-expression': [ - 1, - { - ignoreArrowShorthand: true, - ignoreVoidReturningFunctions: true - } - ], - '@typescript-eslint/no-deprecated': 1, - '@typescript-eslint/no-dupe-class-members': 0, - '@typescript-eslint/no-duplicate-enum-values': 1, - '@typescript-eslint/no-duplicate-type-constituents': 1, - '@typescript-eslint/no-dynamic-delete': 0, - '@typescript-eslint/no-empty-function': 0, - '@typescript-eslint/no-empty-object-type': 1, - '@typescript-eslint/no-explicit-any': [1, { fixToUnknown: true }], - '@typescript-eslint/no-extra-non-null-assertion': 1, - '@typescript-eslint/no-extraneous-class': 1, - '@typescript-eslint/no-floating-promises': 0, - '@typescript-eslint/no-for-in-array': 1, - '@typescript-eslint/no-implied-eval': 1, - '@typescript-eslint/no-import-type-side-effects': 1, - '@typescript-eslint/no-inferrable-types': 1, - '@typescript-eslint/no-invalid-this': 0, - '@typescript-eslint/no-invalid-void-type': 1, - '@typescript-eslint/no-loop-func': 0, - '@typescript-eslint/no-magic-numbers': 0, - '@typescript-eslint/no-meaningless-void-operator': 1, - '@typescript-eslint/no-misused-new': 1, - '@typescript-eslint/no-misused-promises': 0, - '@typescript-eslint/no-misused-spread': 1, - '@typescript-eslint/no-mixed-enums': 1, - '@typescript-eslint/no-namespace': 1, - '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 1, - '@typescript-eslint/no-non-null-asserted-optional-chain': 1, - '@typescript-eslint/no-non-null-assertion': 0, - '@typescript-eslint/no-redeclare': 1, - '@typescript-eslint/no-redundant-type-constituents': 1, - '@typescript-eslint/no-require-imports': 1, - '@typescript-eslint/no-restricted-imports': 0, - '@typescript-eslint/no-restricted-types': 0, - '@typescript-eslint/no-shadow': 0, - '@typescript-eslint/no-this-alias': 1, - '@typescript-eslint/no-unnecessary-boolean-literal-compare': 1, - '@typescript-eslint/no-unnecessary-condition': [ - 1, - { - allowConstantLoopConditions: 'only-allowed-literals', - checkTypePredicates: true - } - ], - '@typescript-eslint/no-unnecessary-parameter-property-assignment': 1, - '@typescript-eslint/no-unnecessary-qualifier': 0, - '@typescript-eslint/no-unnecessary-template-expression': 1, - '@typescript-eslint/no-unnecessary-type-arguments': 1, - '@typescript-eslint/no-unnecessary-type-assertion': 1, - '@typescript-eslint/no-unnecessary-type-constraint': 1, - '@typescript-eslint/no-unnecessary-type-conversion': 1, - '@typescript-eslint/no-unnecessary-type-parameters': 1, - '@typescript-eslint/no-unsafe-argument': 0, - '@typescript-eslint/no-unsafe-assignment': 0, - '@typescript-eslint/no-unsafe-call': 0, - '@typescript-eslint/no-unsafe-declaration-merging': 1, - '@typescript-eslint/no-unsafe-enum-comparison': 1, - '@typescript-eslint/no-unsafe-function-type': 1, - '@typescript-eslint/no-unsafe-member-access': 0, - '@typescript-eslint/no-unsafe-return': 0, - '@typescript-eslint/no-unsafe-type-assertion': 0, - '@typescript-eslint/no-unsafe-unary-minus': 1, - '@typescript-eslint/no-unused-expressions': [1, { enforceForJSX: true }], - '@typescript-eslint/no-unused-private-class-members': 1, - '@typescript-eslint/no-unused-vars': [ - 1, - { - enableAutofixRemoval: { imports: true }, - ignoreRestSiblings: true - } - ], - '@typescript-eslint/no-use-before-define': 0, - '@typescript-eslint/no-useless-constructor': 1, - '@typescript-eslint/no-useless-default-assignment': 1, - '@typescript-eslint/no-useless-empty-export': 1, - '@typescript-eslint/no-wrapper-object-types': 1, - '@typescript-eslint/non-nullable-type-assertion-style': 1, - '@typescript-eslint/only-throw-error': [ - 1, - { - allow: [ - { - from: 'package', - package: '@tanstack/router-core', - name: ['NotFoundError', 'Redirect'] - } - ] - } - ], - '@typescript-eslint/parameter-properties': 1, - '@typescript-eslint/prefer-as-const': 1, - '@typescript-eslint/prefer-destructuring': [ - 1, - { - VariableDeclarator: { - array: false, - object: true - }, - AssignmentExpression: { - array: false, - object: false - } - } - ], - '@typescript-eslint/prefer-enum-initializers': 1, - '@typescript-eslint/prefer-find': 1, - '@typescript-eslint/prefer-for-of': 1, - '@typescript-eslint/prefer-function-type': 1, - '@typescript-eslint/prefer-includes': 1, - '@typescript-eslint/prefer-literal-enum-member': 1, - '@typescript-eslint/prefer-namespace-keyword': 1, - '@typescript-eslint/prefer-nullish-coalescing': [ - 1, - { - ignoreConditionalTests: false, - ignorePrimitives: true - } - ], - '@typescript-eslint/prefer-optional-chain': 1, - '@typescript-eslint/prefer-promise-reject-errors': 1, - '@typescript-eslint/prefer-readonly': 1, - '@typescript-eslint/prefer-readonly-parameter-types': 0, - '@typescript-eslint/prefer-reduce-type-parameter': 1, - '@typescript-eslint/prefer-regexp-exec': 1, - '@typescript-eslint/prefer-return-this-type': 1, - '@typescript-eslint/prefer-string-starts-ends-with': 1, - '@typescript-eslint/promise-function-async': 0, - '@typescript-eslint/related-getter-setter-pairs': 0, - '@typescript-eslint/require-array-sort-compare': 1, - '@typescript-eslint/require-await': 1, - '@typescript-eslint/restrict-plus-operands': [ - 1, - { - allowAny: false, - allowBoolean: false, - allowNullish: false, - allowNumberAndString: false, - allowRegExp: false - } - ], - '@typescript-eslint/restrict-template-expressions': 0, - '@typescript-eslint/return-await': 1, - '@typescript-eslint/strict-boolean-expressions': 0, - '@typescript-eslint/strict-void-return': 0, - '@typescript-eslint/switch-exhaustiveness-check': 1, - '@typescript-eslint/triple-slash-reference': [ - 1, - { path: 'never', types: 'never', lib: 'never' } - ], - '@typescript-eslint/unbound-method': 0, // replaced by vitest/unbound-method - '@typescript-eslint/unified-signatures': 0, - '@typescript-eslint/use-unknown-in-catch-callback-variable': 1 - } - }, - - { - name: 'test', - - files: ['test/**/*'], - - plugins: { - vitest - }, - - rules: { - '@typescript-eslint/no-floating-promises': 1, - - '@eslint-react/component-hook-factories': 0, - '@eslint-react/no-create-ref': 0, - - // https://github.com/vitest-dev/eslint-plugin-vitest#rules - /* -// copy all the rules from the rules table for easy pasting -copy( - Iterator.from( - document - // select rules table - .querySelector('.markdown-heading:has(> a[href="#rules"]) ~ markdown-accessiblity-table') - // select all rows with a rule - .querySelectorAll('tr:has(a)') - ) - // filter out deprecated rules - .filter((row) => row.lastElementChild.textContent === '') - // map row to rule declaration - .map((row) => `'vitest/${row.firstElementChild.textContent}': 1,`) - .toArray() - .join('\n') -); - */ - 'vitest/consistent-each-for': 1, - 'vitest/consistent-test-filename': 0, - 'vitest/consistent-test-it': 1, - 'vitest/consistent-vitest-vi': 1, - 'vitest/expect-expect': 0, - 'vitest/hoisted-apis-on-top': 1, - 'vitest/max-expects': 0, - 'vitest/max-nested-describe': 0, - 'vitest/no-alias-methods': 1, - 'vitest/no-commented-out-tests': 1, - 'vitest/no-conditional-expect': 1, - 'vitest/no-conditional-in-test': 0, - 'vitest/no-conditional-tests': 1, - 'vitest/no-disabled-tests': 0, - 'vitest/no-duplicate-hooks': 1, - 'vitest/no-focused-tests': [1, { fixable: false }], - 'vitest/no-hooks': 0, - 'vitest/no-identical-title': 1, - 'vitest/no-import-node-test': 1, - 'vitest/no-importing-vitest-globals': 1, - 'vitest/no-interpolation-in-snapshots': 0, - 'vitest/no-large-snapshots': 0, - 'vitest/no-mocks-import': 1, - 'vitest/no-restricted-matchers': 0, - 'vitest/no-restricted-vi-methods': 0, - 'vitest/no-standalone-expect': [ - 1, - { - additionalTestBlockFunctions: [ - 'beforeAll', - 'beforeEach', - 'afterAll', - 'afterEach', - 'aroundAll', - 'aroundEach' - ] - } - ], - 'vitest/no-test-prefixes': 1, - 'vitest/no-test-return-statement': 1, - 'vitest/no-unneeded-async-expect-function': 1, - 'vitest/padding-around-after-all-blocks': 0, - 'vitest/padding-around-after-each-blocks': 0, - 'vitest/padding-around-all': 0, - 'vitest/padding-around-before-all-blocks': 0, - 'vitest/padding-around-before-each-blocks': 0, - 'vitest/padding-around-describe-blocks': 0, - 'vitest/padding-around-expect-groups': 0, - 'vitest/padding-around-test-blocks': 0, - 'vitest/prefer-called-exactly-once-with': 1, - 'vitest/prefer-called-once': 1, - 'vitest/prefer-called-times': 0, - 'vitest/prefer-called-with': 0, - 'vitest/prefer-comparison-matcher': 1, - 'vitest/prefer-describe-function-title': 0, - 'vitest/prefer-each': 1, - 'vitest/prefer-equality-matcher': 1, - 'vitest/prefer-expect-assertions': 0, - 'vitest/prefer-expect-resolves': 1, - 'vitest/prefer-expect-type-of': 1, - 'vitest/prefer-hooks-in-order': 1, - 'vitest/prefer-hooks-on-top': 1, - 'vitest/prefer-import-in-mock': 1, - 'vitest/prefer-importing-vitest-globals': 0, - 'vitest/prefer-lowercase-title': 0, - 'vitest/prefer-mock-promise-shorthand': 1, - 'vitest/prefer-mock-return-shorthand': 1, - 'vitest/prefer-snapshot-hint': 0, - 'vitest/prefer-spy-on': 1, - 'vitest/prefer-strict-boolean-matchers': 1, - 'vitest/prefer-strict-equal': 1, - 'vitest/prefer-to-be': 1, - 'vitest/prefer-to-be-falsy': 0, - 'vitest/prefer-to-be-object': 1, - 'vitest/prefer-to-be-truthy': 0, - 'vitest/prefer-to-contain': 1, - 'vitest/prefer-to-have-been-called-times': 1, - 'vitest/prefer-to-have-length': 1, - 'vitest/prefer-todo': 1, - 'vitest/prefer-vi-mocked': 1, - 'vitest/require-awaited-expect-poll': 1, - 'vitest/require-hook': 0, - 'vitest/require-local-test-context-for-concurrent-snapshots': 0, - 'vitest/require-mock-type-parameters': 0, - 'vitest/require-test-timeout': 0, - 'vitest/require-to-throw-message': 1, - 'vitest/require-top-level-describe': 0, - 'vitest/unbound-method': 0, - 'vitest/valid-describe-callback': 1, - 'vitest/valid-expect': [1, { alwaysAwait: true }], - 'vitest/valid-expect-in-promise': 1, - 'vitest/valid-title': 1, - 'vitest/warn-todo': 1 - } - }, - - { - name: 'tools', - - files: ['test/failOnConsole.ts'], - - rules: { - 'no-console': 0 - } - }, - { name: 'markdown', files: ['**/*.md'], diff --git a/package-lock.json b/package-lock.json index 3cbccf9510..12ae67f571 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,21 +22,20 @@ "@vitejs/plugin-react": "^6.0.3", "@vitest/browser-playwright": "^4.1.5", "@vitest/coverage-istanbul": "^4.1.5", - "@vitest/eslint-plugin": "^1.6.16", "clsx": "^2.1.1", "ecij": "^0.4.1", "eslint": "^10.2.1", - "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-sonarjs": "^4.0.3", "jspdf": "^4.2.0", "jspdf-autotable": "^5.0.7", "oxfmt": "0.59.0", + "oxlint": "^1.76.0", + "oxlint-tsgolint": "^7.0.2001", "playwright": "~1.61.0", "react": "^19.2.7", "react-dom": "^19.2.7", "tsdown": "^0.22.7", "typescript": "npm:@typescript/typescript6@^6.0.2", - "typescript-eslint": "^8.59.0", "vite": "^8.1.0", "vitest": "^4.1.5", "vitest-browser-react": "^2.2.0" @@ -1125,6 +1124,437 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@oxlint-tsgolint/darwin-arm64": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-arm64/-/darwin-arm64-7.0.2001.tgz", + "integrity": "sha512-CUJEdbSZ54+Xy9OXqOhWLTKZKV0BBiV7C2i/ygyVmXtkUNXx5YCzN8DpSSshTAKktoL7S+tnQ/ftFG/i7X896w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint-tsgolint/darwin-x64": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-x64/-/darwin-x64-7.0.2001.tgz", + "integrity": "sha512-pXfBb5BqONCcgrXQNUZWXgiYmRSWJzd97S8i41VVOh6ut0tyo+cJ5FKFpczDHxiVNfj/3e7c9B4MtztNdpIVCw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint-tsgolint/linux-arm64": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-arm64/-/linux-arm64-7.0.2001.tgz", + "integrity": "sha512-roP7zujb/QDPzDwEKsFFpzNHHy91/Y7oX9vQXk78ekyZtcQj1QXDIMH33gjDdHBfRl4K9pZ36xhRgrP4Zr+R8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint-tsgolint/linux-x64": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-x64/-/linux-x64-7.0.2001.tgz", + "integrity": "sha512-UDezNqdECVmngu2TPnjaS1YoAmcTaBoI5lV9vk3VahBxoi+I5r9k3iJTT7qZoYWOXTD/7T7bNcwRgrocR6BscQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint-tsgolint/win32-arm64": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-arm64/-/win32-arm64-7.0.2001.tgz", + "integrity": "sha512-uJZhqB6pdXLuN+AD1F5082byyQti/NPmJA77GtcFlmT2HzRelqbNls3SaIqxpjdFgvSBF9g0yOKGBkGFg7kX8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint-tsgolint/win32-x64": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-x64/-/win32-x64-7.0.2001.tgz", + "integrity": "sha512-FkDRm8hx9OwzGQqyWG1tO5QrTLRApff9DzSgpz9QZau37BR8d1VYKOxMLGf6shPZntJFoTwIIJYT68VndYDCog==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint/binding-android-arm-eabi": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.76.0.tgz", + "integrity": "sha512-ZHIE5Zt9AsPDcY4nOlofXt0YfneEeo+QrKMPcPzLf2Z6Q8VtV2W73d7SFJ920WUwyik783u/doKCs3KXdwG+7w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-android-arm64": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.76.0.tgz", + "integrity": "sha512-shm/ngQilHK6bs+ElJWa4oHfNj5vL1Gl/iVEJldTQjpr0/67oSgr0KUpbmcnLig5Fo0v/l6j2567A7TOL89ONA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-arm64": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.76.0.tgz", + "integrity": "sha512-rvJmrAPKSQ9aWJ6wIS6CK2tJjwzfW0ApQH9qokq6sfDvmHwoyIHxHFMq7z7i7GiV6fdE6s8qvBqWKPTu8RmT6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-x64": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.76.0.tgz", + "integrity": "sha512-U/zYdb7VYKGY6pA9Vd2rYl9O/HlCylcOlb5PGPvVLtg+oLGsk6H3XGKEMHKyqD3nmmtmlmwb/8SwU2vfSAtvMw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-freebsd-x64": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.76.0.tgz", + "integrity": "sha512-WvKG9CAriuo0XNiFzpXjDngUZcRGFNpaK2kLyMUsnJlShxkT96u+BpJQ3KqdQwGOrvI14L6V8bAwXwAYNNY6Jg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-gnueabihf": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.76.0.tgz", + "integrity": "sha512-qJ5+RH99TqFRq3UCDxkW0zJJu9c+OAHFY72vGlxZLEpuO+MpKo3POgqb8sYipL9KYm8XY6ofb0HsOuvY6hQNqQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-musleabihf": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.76.0.tgz", + "integrity": "sha512-PvPCVptkgVARsucgIqFQQcSmJ6xc6GtnVB5bRBekRahTc9eObMtjHfMjy5M+C2tHt5UCMttWM9RuSk/H9NqYeg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-gnu": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.76.0.tgz", + "integrity": "sha512-3KeFDx8Bu4HPAXbuHZOr/oHvN+QT+JQhMw/NYPz7Z071xLSsG27Jfh9PIQVEY7hk1I+jr43ExqRIeJ6VKk2yLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-musl": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.76.0.tgz", + "integrity": "sha512-oPFkkKTgl0K/EIg9fQ8oA3IGcI05/Mq1en04iFa41mmNPT+6KEiByVazTOZZJiHMBBrbsns1YJ2e1Scqwzesjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-ppc64-gnu": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.76.0.tgz", + "integrity": "sha512-gN7yZ0eqflA5Fhf1wvHxGUltIV3FsvmB1zhNMDEK9vSHhc7E6qg9CuPeBgPZab66Tjzq6w6kHAtNEvnTHf4cyw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-gnu": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.76.0.tgz", + "integrity": "sha512-S/HqMbn22mQrjtErUxEoS/a55u8kIeXvreIxiJu5G7Le3UecEd6SQZxrDIpuhtgaFnsY/nVra3ytP+pRljDilA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-musl": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.76.0.tgz", + "integrity": "sha512-ZIga3097VJZolGZk6SrIAUokIGfRkxRlhiHDUznZptGBfwrhD7pNfD1rzEzsCwvk/1DX0A1bLz+liuNh5QKIVQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-s390x-gnu": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.76.0.tgz", + "integrity": "sha512-ZGiiA7pFzMJSyMWYZTVlPgbTsx+Vl8ihLGMIujPwaslUF7kIPPWAbVmAlTc+9lWDV+DCiB8Ikixu+lSHeOIIWQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-gnu": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.76.0.tgz", + "integrity": "sha512-JLiy5WuvEBFTT6ErIFV35SLzi0R7Iri6MKU6dZbTxfIx8pndbbPs3Mj780nMipBFcPkti+okAPOJ9POKkHFEgg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-musl": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.76.0.tgz", + "integrity": "sha512-z7lgKQtbo/I1NIe8G5NHLesxJDv0tRSUWTpXKb9Pm3E9nKFKfO4IOSDtFroKgXtOYb0jQbcdH+0wzTyMXVes+A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-openharmony-arm64": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.76.0.tgz", + "integrity": "sha512-JOjKymIpb9QcYfEhZsN6h4V9Ivd474W38cNIBRv6bg2TbIvogbMTH0Mg6YWW9TiRDqfcX+/Hyfsbo5vcSE5guQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-arm64-msvc": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.76.0.tgz", + "integrity": "sha512-pqDWZiwcmByWUEm1NFUBNiT6aentCcaoMWJv0HbXEmuYermJ4sg8ppVrshubYP2MZ6SHccJJcpr6x469PuDFIw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-ia32-msvc": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.76.0.tgz", + "integrity": "sha512-Ba0O659kgMv6pwO3z9PdO+K3aMxQRaw9HnG+e6AtOfgwcKFvYilciQYBoUBmxfQvOCKZe1SwjMkuB542NkuDMQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-x64-msvc": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.76.0.tgz", + "integrity": "sha512-5qcirPHO8nKfkoowEVWtpAoVTcYDy6g0UT0NGic450Qv8J2NrOqg4uQ8QppRP4MDTC7Xx47lbZnmadTH03CGGA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.29", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", @@ -1830,70 +2260,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz", - "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.65.0", - "@typescript-eslint/type-utils": "8.65.0", - "@typescript-eslint/utils": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.65.0", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz", - "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.65.0", - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, "node_modules/@typescript-eslint/project-service": { "version": "8.65.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz", @@ -2575,37 +2941,6 @@ "vitest": "4.1.10" } }, - "node_modules/@vitest/eslint-plugin": { - "version": "1.6.23", - "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.6.23.tgz", - "integrity": "sha512-CbrXxQpIUMbeyylGlxaxTgnWYM44et4Nx58swl7+vrTyC9Ttx+hQoy8BGCregbbZ08K5qFhRHeoad1VvERUbkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "^8.58.0", - "@typescript-eslint/utils": "^8.58.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "*", - "eslint": ">=8.57.0", - "typescript": ">=5.0.0", - "vitest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, "node_modules/@vitest/expect": { "version": "4.1.10", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz", @@ -3677,26 +4012,6 @@ "typescript": "*" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", - "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.24.4", - "@babel/parser": "^7.24.4", - "hermes-parser": "^0.25.1", - "zod": "^3.25.0 || ^4.0.0", - "zod-validation-error": "^3.5.0 || ^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" - } - }, "node_modules/eslint-plugin-react-jsx": { "version": "5.18.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-jsx/-/eslint-plugin-react-jsx-5.18.0.tgz", @@ -4208,23 +4523,6 @@ "node": ">=8" } }, - "node_modules/hermes-estree": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", - "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", - "dev": true, - "license": "MIT" - }, - "node_modules/hermes-parser": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", - "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "hermes-estree": "0.25.1" - } - }, "node_modules/hookable": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz", @@ -5939,6 +6237,73 @@ } } }, + "node_modules/oxlint": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.76.0.tgz", + "integrity": "sha512-6QoFioEU4fNdiUx/2Eo6TRd6NG7H7njnRCz8rhB66cZmMHDTqcm1Rjvl8Wry+ZTQMBAmyb4Mlf62Mk5X+eHSOw==", + "dev": true, + "license": "MIT", + "bin": { + "oxlint": "bin/oxlint" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxlint/binding-android-arm-eabi": "1.76.0", + "@oxlint/binding-android-arm64": "1.76.0", + "@oxlint/binding-darwin-arm64": "1.76.0", + "@oxlint/binding-darwin-x64": "1.76.0", + "@oxlint/binding-freebsd-x64": "1.76.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.76.0", + "@oxlint/binding-linux-arm-musleabihf": "1.76.0", + "@oxlint/binding-linux-arm64-gnu": "1.76.0", + "@oxlint/binding-linux-arm64-musl": "1.76.0", + "@oxlint/binding-linux-ppc64-gnu": "1.76.0", + "@oxlint/binding-linux-riscv64-gnu": "1.76.0", + "@oxlint/binding-linux-riscv64-musl": "1.76.0", + "@oxlint/binding-linux-s390x-gnu": "1.76.0", + "@oxlint/binding-linux-x64-gnu": "1.76.0", + "@oxlint/binding-linux-x64-musl": "1.76.0", + "@oxlint/binding-openharmony-arm64": "1.76.0", + "@oxlint/binding-win32-arm64-msvc": "1.76.0", + "@oxlint/binding-win32-ia32-msvc": "1.76.0", + "@oxlint/binding-win32-x64-msvc": "1.76.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=7.0.2001", + "vite-plus": "*" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + }, + "vite-plus": { + "optional": true + } + } + }, + "node_modules/oxlint-tsgolint": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/oxlint-tsgolint/-/oxlint-tsgolint-7.0.2001.tgz", + "integrity": "sha512-KjK/XLcXr1DSyonKhsuFqJRiuKqcyG9j3LJ8nkOsrLzGvodBPqzHOKauy10asLMDI0sUpvb+1sxlzff3udZvfg==", + "dev": true, + "license": "MIT", + "bin": { + "tsgolint": "bin/tsgolint.js" + }, + "optionalDependencies": { + "@oxlint-tsgolint/darwin-arm64": "7.0.2001", + "@oxlint-tsgolint/darwin-x64": "7.0.2001", + "@oxlint-tsgolint/linux-arm64": "7.0.2001", + "@oxlint-tsgolint/linux-x64": "7.0.2001", + "@oxlint-tsgolint/win32-arm64": "7.0.2001", + "@oxlint-tsgolint/win32-x64": "7.0.2001" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -6805,30 +7170,6 @@ "tsc6": "bin/tsc6" } }, - "node_modules/typescript-eslint": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.65.0.tgz", - "integrity": "sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.65.0", - "@typescript-eslint/parser": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0", - "@typescript-eslint/utils": "8.65.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, "node_modules/unconfig-core": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/unconfig-core/-/unconfig-core-7.5.0.tgz", @@ -7371,19 +7712,6 @@ "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/zod-validation-error": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", - "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "zod": "^3.25.0 || ^4.0.0" - } - }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", diff --git a/package.json b/package.json index be0a15d7ec..c2f850aefd 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,10 @@ "test:ci:update": "vitest run --project visual --update", "format": "oxfmt", "format:check": "oxfmt --check", - "eslint": "eslint --max-warnings 0 --cache --cache-location .cache/eslint --cache-strategy content --flag unstable_native_nodejs_ts_config", - "eslint:fix": "node --run eslint -- --fix", + "lint": "oxlint --max-warnings 0 --type-aware --report-unused-disable-directives", + "lint:fix": "node --run lint -- --fix", + "lint:md": "eslint --max-warnings 0 --cache --cache-location .cache/eslint --cache-strategy content --flag unstable_native_nodejs_ts_config", + "lint:md:fix": "node --run lint:md -- --fix", "typecheck": "tsc --build" }, "devDependencies": { @@ -60,21 +62,20 @@ "@vitejs/plugin-react": "^6.0.3", "@vitest/browser-playwright": "^4.1.5", "@vitest/coverage-istanbul": "^4.1.5", - "@vitest/eslint-plugin": "^1.6.16", "clsx": "^2.1.1", "ecij": "^0.4.1", "eslint": "^10.2.1", - "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-sonarjs": "^4.0.3", "jspdf": "^4.2.0", "jspdf-autotable": "^5.0.7", "oxfmt": "0.59.0", + "oxlint": "^1.76.0", + "oxlint-tsgolint": "^7.0.2001", "playwright": "~1.61.0", "react": "^19.2.7", "react-dom": "^19.2.7", "tsdown": "^0.22.7", "typescript": "npm:@typescript/typescript6@^6.0.2", - "typescript-eslint": "^8.59.0", "vite": "^8.1.0", "vitest": "^4.1.5", "vitest-browser-react": "^2.2.0" diff --git a/src/globals.d.ts b/src/globals.d.ts index b8e33ced84..50b3a3a08f 100644 --- a/src/globals.d.ts +++ b/src/globals.d.ts @@ -1,6 +1,6 @@ declare module 'react' { - // eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style interface CSSProperties { + // eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style [key: `--${string}`]: string | number | undefined; } } diff --git a/src/types.ts b/src/types.ts index fed440f9f3..8c8066b747 100644 --- a/src/types.ts +++ b/src/types.ts @@ -358,6 +358,8 @@ export interface RenderCheckboxProps extends Pick< React.ComponentProps<'input'>, 'aria-label' | 'aria-labelledby' | 'checked' | 'tabIndex' | 'disabled' > { + // `| undefined` is required by `exactOptionalPropertyTypes`, which oxlint's JS plugins cannot see + // eslint-disable-next-line sonarjs/no-redundant-optional indeterminate?: boolean | undefined; onChange: (checked: boolean, shift: boolean) => void; } diff --git a/test/browser/scrollToCell.test.tsx b/test/browser/scrollToCell.test.tsx index f983e7d92e..44c7e8aba8 100644 --- a/test/browser/scrollToCell.test.tsx +++ b/test/browser/scrollToCell.test.tsx @@ -118,6 +118,8 @@ function validateCellVisibility(name: string, isVisible: boolean) { const cell = page.getCell({ name }); if (isVisible) { + // this helper is not a test block, but oxlint's implementation flags it anyway + // eslint-disable-next-line vitest/no-conditional-expect return expect.element(cell).toBeVisible(); } From d4e722d29ebde4ed218adaf13e40684fb28ec19b Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Mon, 27 Jul 2026 20:42:00 +0100 Subject: [PATCH 02/22] remove references to .agents --- .oxlintrc.json | 1 - eslint.config.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index bde778bd3c..715433de23 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -11,7 +11,6 @@ "builtin": true }, "ignorePatterns": [ - ".agents", ".cache", ".claude", ".nitro", diff --git a/eslint.config.ts b/eslint.config.ts index 36b148fea7..0a0804925e 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -5,7 +5,6 @@ import { defineConfig, globalIgnores } from 'eslint/config'; // `@eslint/markdown` is built on ESLint's language plugin API, which oxlint does not support. export default defineConfig([ globalIgnores([ - '.agents', '.cache', '.claude', '.nitro', From 0f8be58275ac2cec966984aade198e5bb3f504f3 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Fri, 21 Aug 2026 18:50:57 +0100 Subject: [PATCH 03/22] yaml tweaks --- .github/workflows/ci.yml | 10 ++++++---- .github/workflows/publish.yml | 13 ++++++------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1b98487eac..82f7e05673 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,13 +26,15 @@ jobs: - name: Oxlint run: node --run lint - - name: ESLint (markdown) - run: node --run lint:md + - name: Lint + run: | + node --run lint + node --run lint:md - - name: Oxfmt + - name: Format run: node --run format:check - - name: Bundle + - name: Build lib run: node --run build - name: Build website diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f440b48bc5..356069eb46 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -33,16 +33,15 @@ jobs: - name: Typecheck run: node --run typecheck - - name: Oxlint - run: node --run lint - - - name: ESLint (markdown) - run: node --run lint:md + - name: Lint + run: | + node --run lint + node --run lint:md - - name: Oxfmt + - name: Format run: node --run format:check - - name: Bundle + - name: Build lib run: node --run build - name: Build website From c1ccf4f91b529c09e273a4ddaabbd57a9605f440 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Fri, 21 Aug 2026 19:00:39 +0100 Subject: [PATCH 04/22] fix double lint --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 82f7e05673..f1b25bdd3b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,9 +23,6 @@ jobs: - name: Typecheck run: node --run typecheck - - name: Oxlint - run: node --run lint - - name: Lint run: | node --run lint From b7aee5363ca5fe3b346bec7a2f4a6f88ff2937b6 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Fri, 21 Aug 2026 19:43:04 +0100 Subject: [PATCH 05/22] settings tweaks --- .oxlintrc.json | 11 +- .vscode/settings.json | 2 - package-lock.json | 160 ++++++++++++------------- package.json | 6 +- src/Columns.tsx | 2 +- src/DataGridDefaultRenderersContext.ts | 2 +- src/GroupRow.tsx | 6 +- src/globals.d.ts | 2 +- src/hooks/useGridDimensions.ts | 1 - src/hooks/useLatestFunc.ts | 2 +- src/hooks/useRowSelection.ts | 2 +- src/types.ts | 2 +- src/utils/keyboardUtils.ts | 1 - test/browser/column/grouping.test.ts | 4 +- test/browser/rowSelection.test.tsx | 4 +- test/browser/scrollToCell.test.tsx | 2 +- website/renderers/renderCoordinates.ts | 2 +- 17 files changed, 107 insertions(+), 104 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index 715433de23..be9b1888db 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -5,7 +5,13 @@ "correctness": "off" }, "options": { - "typeAware": true + "denyWarnings": true, + "reportUnusedDisableDirectives": "warn", + "respectEslintDisableDirectives": false, + // TODO + "typeAware": false, + // TODO + "typeCheck": false }, "env": { "builtin": true @@ -18,7 +24,8 @@ ".tanstack", "coverage", "dist", - "lib" + "lib", + "website/routeTree.gen.ts" ], "overrides": [ { diff --git a/.vscode/settings.json b/.vscode/settings.json index 89ea30999a..25dcc55943 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,8 +13,6 @@ // ESLint is only used for markdown; JS/TS is linted by the oxc extension "eslint.validate": ["markdown"], "eslint.problems.shortenToSingleLine": true, - "oxc.typeAware": true, - "oxc.unusedDisableDirectives": "warn", "files.readonlyInclude": { "**/routeTree.gen.ts": true }, diff --git a/package-lock.json b/package-lock.json index a0fd125c3f..2f725f79d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "jspdf": "^4.2.0", "jspdf-autotable": "^5.0.7", "oxfmt": "0.63.0", - "oxlint": "^1.76.0", + "oxlint": "^1.79.0", "oxlint-tsgolint": "^7.0.2001", "playwright": "~1.62.1", "react": "^19.2.7", @@ -1156,9 +1156,9 @@ ] }, "node_modules/@oxlint/binding-android-arm-eabi": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.76.0.tgz", - "integrity": "sha512-ZHIE5Zt9AsPDcY4nOlofXt0YfneEeo+QrKMPcPzLf2Z6Q8VtV2W73d7SFJ920WUwyik783u/doKCs3KXdwG+7w==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.79.0.tgz", + "integrity": "sha512-TebFaaMklO/RXzTv7PucaCq9l3X6D1gA+C8H6K4njtjFOV+zWE9MKLpulcJZN9bzytbUbQIY0mZuz12nQ5Kv4Q==", "cpu": [ "arm" ], @@ -1173,9 +1173,9 @@ } }, "node_modules/@oxlint/binding-android-arm64": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.76.0.tgz", - "integrity": "sha512-shm/ngQilHK6bs+ElJWa4oHfNj5vL1Gl/iVEJldTQjpr0/67oSgr0KUpbmcnLig5Fo0v/l6j2567A7TOL89ONA==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.79.0.tgz", + "integrity": "sha512-KqqnOtAVgNsPPF0YSodkFZA1O80jcKoCZCTu3bgsszxA+MrMP9TLzfXitKjEj1FmrPprKDMdRDMmY3weESO9sg==", "cpu": [ "arm64" ], @@ -1190,9 +1190,9 @@ } }, "node_modules/@oxlint/binding-darwin-arm64": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.76.0.tgz", - "integrity": "sha512-rvJmrAPKSQ9aWJ6wIS6CK2tJjwzfW0ApQH9qokq6sfDvmHwoyIHxHFMq7z7i7GiV6fdE6s8qvBqWKPTu8RmT6Q==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.79.0.tgz", + "integrity": "sha512-BVC2nsMzqQzRDPc5RhixkZ+m1p7iH4bxRRvqkbwDXX0PlQKm1BPy8J8cRjnAFafOq2QzI+BfO3vE8w2GZ3CBag==", "cpu": [ "arm64" ], @@ -1207,9 +1207,9 @@ } }, "node_modules/@oxlint/binding-darwin-x64": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.76.0.tgz", - "integrity": "sha512-U/zYdb7VYKGY6pA9Vd2rYl9O/HlCylcOlb5PGPvVLtg+oLGsk6H3XGKEMHKyqD3nmmtmlmwb/8SwU2vfSAtvMw==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.79.0.tgz", + "integrity": "sha512-p6Lm+snmhGuLKL1+CpCV8L6ijkE/qJzK2H2jG9+eKJT0n31RbY4FLsdhexekgP3bLpw4Kgde+9DZuDZQ4yIInA==", "cpu": [ "x64" ], @@ -1224,9 +1224,9 @@ } }, "node_modules/@oxlint/binding-freebsd-x64": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.76.0.tgz", - "integrity": "sha512-WvKG9CAriuo0XNiFzpXjDngUZcRGFNpaK2kLyMUsnJlShxkT96u+BpJQ3KqdQwGOrvI14L6V8bAwXwAYNNY6Jg==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.79.0.tgz", + "integrity": "sha512-qDMm0dXZnoHyRqSL4N4xUq82T4sqK5cbKSjvd/dF/YbMUXc2R1wEPf+vmA5S0qUmi0nwXfNbjXBtZaIqzQLIMg==", "cpu": [ "x64" ], @@ -1241,9 +1241,9 @@ } }, "node_modules/@oxlint/binding-linux-arm-gnueabihf": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.76.0.tgz", - "integrity": "sha512-qJ5+RH99TqFRq3UCDxkW0zJJu9c+OAHFY72vGlxZLEpuO+MpKo3POgqb8sYipL9KYm8XY6ofb0HsOuvY6hQNqQ==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.79.0.tgz", + "integrity": "sha512-2od7s0nuKPzqyUZAWk9KkCyGg7eI9dwFPZg+20lB15fKFkVZ0c9ZFxqPfiBAyDTlTkh9stPI0t+JlPCqMbItVA==", "cpu": [ "arm" ], @@ -1258,9 +1258,9 @@ } }, "node_modules/@oxlint/binding-linux-arm-musleabihf": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.76.0.tgz", - "integrity": "sha512-PvPCVptkgVARsucgIqFQQcSmJ6xc6GtnVB5bRBekRahTc9eObMtjHfMjy5M+C2tHt5UCMttWM9RuSk/H9NqYeg==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.79.0.tgz", + "integrity": "sha512-ZOQUjkzDnvlhSE3+tWC3YXx94MMl+sYMlwH+u1+YGApGHOJP/YAc8ZBRFOXZ6eOBmxtXAWuS/fBcdZr8qqNO1A==", "cpu": [ "arm" ], @@ -1275,9 +1275,9 @@ } }, "node_modules/@oxlint/binding-linux-arm64-gnu": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.76.0.tgz", - "integrity": "sha512-3KeFDx8Bu4HPAXbuHZOr/oHvN+QT+JQhMw/NYPz7Z071xLSsG27Jfh9PIQVEY7hk1I+jr43ExqRIeJ6VKk2yLw==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.79.0.tgz", + "integrity": "sha512-lu158FR4nGqGeRS3BQvtG85wRgU/Fy4MD5Cxp1hzJXizGiLo6u2742wJSCDKh8cFcZntvX7fcxlq4mMmfryH1g==", "cpu": [ "arm64" ], @@ -1295,9 +1295,9 @@ } }, "node_modules/@oxlint/binding-linux-arm64-musl": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.76.0.tgz", - "integrity": "sha512-oPFkkKTgl0K/EIg9fQ8oA3IGcI05/Mq1en04iFa41mmNPT+6KEiByVazTOZZJiHMBBrbsns1YJ2e1Scqwzesjw==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.79.0.tgz", + "integrity": "sha512-mbpKQeE2aflTjddaHK7MP8KP/OFbUM++lt5M635ENM8IyIdK0jm2t9pb+2v9mVVIvhF6TqA4l7F79Pll1mi+uw==", "cpu": [ "arm64" ], @@ -1315,9 +1315,9 @@ } }, "node_modules/@oxlint/binding-linux-ppc64-gnu": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.76.0.tgz", - "integrity": "sha512-gN7yZ0eqflA5Fhf1wvHxGUltIV3FsvmB1zhNMDEK9vSHhc7E6qg9CuPeBgPZab66Tjzq6w6kHAtNEvnTHf4cyw==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.79.0.tgz", + "integrity": "sha512-WpGNua7gaxaHnpSDeog2ji8IDHn/QLPl9LPzwkR/FvVv58vT5BcXjRXnU+wbu3N75cpeha8CdC7ho/U2OIsB4g==", "cpu": [ "ppc64" ], @@ -1335,9 +1335,9 @@ } }, "node_modules/@oxlint/binding-linux-riscv64-gnu": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.76.0.tgz", - "integrity": "sha512-S/HqMbn22mQrjtErUxEoS/a55u8kIeXvreIxiJu5G7Le3UecEd6SQZxrDIpuhtgaFnsY/nVra3ytP+pRljDilA==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.79.0.tgz", + "integrity": "sha512-tK1E93A5LVzISg4ngpKJnfTs7EqtIUceGI7MQ4GyDjJiLi8wPCkEyKlj2xkyKWZ1yzkDJyLHTBJ5/iFWRdnJvg==", "cpu": [ "riscv64" ], @@ -1355,9 +1355,9 @@ } }, "node_modules/@oxlint/binding-linux-riscv64-musl": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.76.0.tgz", - "integrity": "sha512-ZIga3097VJZolGZk6SrIAUokIGfRkxRlhiHDUznZptGBfwrhD7pNfD1rzEzsCwvk/1DX0A1bLz+liuNh5QKIVQ==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.79.0.tgz", + "integrity": "sha512-qhQvUIrngXivA2A9pQ+xPCychztn/5qUv7yS3gDwXv3w7Rag+eTeeXWmRyx+t7XsW5x6LuY/8AsTq36UgFIblg==", "cpu": [ "riscv64" ], @@ -1375,9 +1375,9 @@ } }, "node_modules/@oxlint/binding-linux-s390x-gnu": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.76.0.tgz", - "integrity": "sha512-ZGiiA7pFzMJSyMWYZTVlPgbTsx+Vl8ihLGMIujPwaslUF7kIPPWAbVmAlTc+9lWDV+DCiB8Ikixu+lSHeOIIWQ==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.79.0.tgz", + "integrity": "sha512-sv6AaVgU/eE6u+6WFiQVDcPPwTxP6IJMSB9k701W2r/r6Tx465e8vPvVyRxquNH4Vy6KwRNu90mVbxXJN8+5gg==", "cpu": [ "s390x" ], @@ -1395,9 +1395,9 @@ } }, "node_modules/@oxlint/binding-linux-x64-gnu": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.76.0.tgz", - "integrity": "sha512-JLiy5WuvEBFTT6ErIFV35SLzi0R7Iri6MKU6dZbTxfIx8pndbbPs3Mj780nMipBFcPkti+okAPOJ9POKkHFEgg==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.79.0.tgz", + "integrity": "sha512-iFZL02deziHslb3jEX9KdqlAkYoo4fGyotchKDzdfK1f5mxlIBeiQeHhvK3iFpuEJSB4ma/qeFn9oxPiwnhUPQ==", "cpu": [ "x64" ], @@ -1415,9 +1415,9 @@ } }, "node_modules/@oxlint/binding-linux-x64-musl": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.76.0.tgz", - "integrity": "sha512-z7lgKQtbo/I1NIe8G5NHLesxJDv0tRSUWTpXKb9Pm3E9nKFKfO4IOSDtFroKgXtOYb0jQbcdH+0wzTyMXVes+A==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.79.0.tgz", + "integrity": "sha512-3DtZR2raqObnh7wXZoFYFd0Fw7skBvcb3f7A+/lkEiDuh8hrE6vv9b/62Qxao1a9/OeHLw/FcXlXzgsW9wTRFg==", "cpu": [ "x64" ], @@ -1435,9 +1435,9 @@ } }, "node_modules/@oxlint/binding-openharmony-arm64": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.76.0.tgz", - "integrity": "sha512-JOjKymIpb9QcYfEhZsN6h4V9Ivd474W38cNIBRv6bg2TbIvogbMTH0Mg6YWW9TiRDqfcX+/Hyfsbo5vcSE5guQ==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.79.0.tgz", + "integrity": "sha512-Oatt4GuA1WJkqzk2ozx4HrWROOi7opV3AKDw/U8qDIqeTqzsjn5K2x3REJMNjU3/KU/Bkq96Zi3CknaiDTaC/Q==", "cpu": [ "arm64" ], @@ -1452,9 +1452,9 @@ } }, "node_modules/@oxlint/binding-win32-arm64-msvc": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.76.0.tgz", - "integrity": "sha512-pqDWZiwcmByWUEm1NFUBNiT6aentCcaoMWJv0HbXEmuYermJ4sg8ppVrshubYP2MZ6SHccJJcpr6x469PuDFIw==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.79.0.tgz", + "integrity": "sha512-NAgZr9Qp8nIA9rpo0JEvwiabTF/2UVqBNnupBG9X4kxXcQoScJUTi+qHhvabb9s/thgj5wQ4XcIaJvb+ZMgoKw==", "cpu": [ "arm64" ], @@ -1469,9 +1469,9 @@ } }, "node_modules/@oxlint/binding-win32-ia32-msvc": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.76.0.tgz", - "integrity": "sha512-Ba0O659kgMv6pwO3z9PdO+K3aMxQRaw9HnG+e6AtOfgwcKFvYilciQYBoUBmxfQvOCKZe1SwjMkuB542NkuDMQ==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.79.0.tgz", + "integrity": "sha512-+KyXjIvcpaXmWW/j9NNY5yWjrIVxaX18VyIheQy3jwc2GSYgpCr7MGI/HxIGQ/shAL5IWEKbhsqoMpAO5Stiog==", "cpu": [ "ia32" ], @@ -1486,9 +1486,9 @@ } }, "node_modules/@oxlint/binding-win32-x64-msvc": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.76.0.tgz", - "integrity": "sha512-5qcirPHO8nKfkoowEVWtpAoVTcYDy6g0UT0NGic450Qv8J2NrOqg4uQ8QppRP4MDTC7Xx47lbZnmadTH03CGGA==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.79.0.tgz", + "integrity": "sha512-mEelcCMMBS57sIXh2veGMNy+pQwuGtcMxHxGIZWQ5Ba9pJ5jCCUFOZB9E2JhBaxGsURe+WGe0zJp4RVre52gpQ==", "cpu": [ "x64" ], @@ -6217,9 +6217,9 @@ } }, "node_modules/oxlint": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.76.0.tgz", - "integrity": "sha512-6QoFioEU4fNdiUx/2Eo6TRd6NG7H7njnRCz8rhB66cZmMHDTqcm1Rjvl8Wry+ZTQMBAmyb4Mlf62Mk5X+eHSOw==", + "version": "1.79.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.79.0.tgz", + "integrity": "sha512-hVJ9hq9m2unPS+Of4eJJgCPdIeCC+3DHEUX3tkmrPJr3OK2hz7PhXwgC+ZP71ZcYu8cCDEtQrqLxWNvxBppBVg==", "dev": true, "license": "MIT", "bin": { @@ -6232,25 +6232,25 @@ "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxlint/binding-android-arm-eabi": "1.76.0", - "@oxlint/binding-android-arm64": "1.76.0", - "@oxlint/binding-darwin-arm64": "1.76.0", - "@oxlint/binding-darwin-x64": "1.76.0", - "@oxlint/binding-freebsd-x64": "1.76.0", - "@oxlint/binding-linux-arm-gnueabihf": "1.76.0", - "@oxlint/binding-linux-arm-musleabihf": "1.76.0", - "@oxlint/binding-linux-arm64-gnu": "1.76.0", - "@oxlint/binding-linux-arm64-musl": "1.76.0", - "@oxlint/binding-linux-ppc64-gnu": "1.76.0", - "@oxlint/binding-linux-riscv64-gnu": "1.76.0", - "@oxlint/binding-linux-riscv64-musl": "1.76.0", - "@oxlint/binding-linux-s390x-gnu": "1.76.0", - "@oxlint/binding-linux-x64-gnu": "1.76.0", - "@oxlint/binding-linux-x64-musl": "1.76.0", - "@oxlint/binding-openharmony-arm64": "1.76.0", - "@oxlint/binding-win32-arm64-msvc": "1.76.0", - "@oxlint/binding-win32-ia32-msvc": "1.76.0", - "@oxlint/binding-win32-x64-msvc": "1.76.0" + "@oxlint/binding-android-arm-eabi": "1.79.0", + "@oxlint/binding-android-arm64": "1.79.0", + "@oxlint/binding-darwin-arm64": "1.79.0", + "@oxlint/binding-darwin-x64": "1.79.0", + "@oxlint/binding-freebsd-x64": "1.79.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.79.0", + "@oxlint/binding-linux-arm-musleabihf": "1.79.0", + "@oxlint/binding-linux-arm64-gnu": "1.79.0", + "@oxlint/binding-linux-arm64-musl": "1.79.0", + "@oxlint/binding-linux-ppc64-gnu": "1.79.0", + "@oxlint/binding-linux-riscv64-gnu": "1.79.0", + "@oxlint/binding-linux-riscv64-musl": "1.79.0", + "@oxlint/binding-linux-s390x-gnu": "1.79.0", + "@oxlint/binding-linux-x64-gnu": "1.79.0", + "@oxlint/binding-linux-x64-musl": "1.79.0", + "@oxlint/binding-openharmony-arm64": "1.79.0", + "@oxlint/binding-win32-arm64-msvc": "1.79.0", + "@oxlint/binding-win32-ia32-msvc": "1.79.0", + "@oxlint/binding-win32-x64-msvc": "1.79.0" }, "peerDependencies": { "oxlint-tsgolint": ">=7.0.2001", diff --git a/package.json b/package.json index 4fc7410873..3921ce3d4a 100644 --- a/package.json +++ b/package.json @@ -43,8 +43,8 @@ "test:ci:update": "vitest run --project visual --update", "format": "oxfmt", "format:check": "oxfmt --check", - "lint": "oxlint --max-warnings 0 --type-aware --report-unused-disable-directives", - "lint:fix": "node --run lint -- --fix", + "lint": "oxlint", + "lint:fix": "oxlint --fix", "lint:md": "eslint --max-warnings 0 --cache --cache-location .cache/eslint --cache-strategy content --flag unstable_native_nodejs_ts_config", "lint:md:fix": "node --run lint:md -- --fix", "typecheck": "tsc --build" @@ -70,7 +70,7 @@ "jspdf": "^4.2.0", "jspdf-autotable": "^5.0.7", "oxfmt": "0.63.0", - "oxlint": "^1.76.0", + "oxlint": "^1.79.0", "oxlint-tsgolint": "^7.0.2001", "playwright": "~1.62.1", "react": "^19.2.7", diff --git a/src/Columns.tsx b/src/Columns.tsx index 163b3280d7..e7fc2ca8cf 100644 --- a/src/Columns.tsx +++ b/src/Columns.tsx @@ -51,7 +51,7 @@ function SelectGroupFormatter({ row, tabIndex }: RenderGroupCellProps) ); } -// eslint-disable-next-line @typescript-eslint/no-explicit-any +// oxlint-disable-next-line typescript/no-explicit-any export const SelectColumn: Column = { key: SELECT_COLUMN_KEY, name: '', diff --git a/src/DataGridDefaultRenderersContext.ts b/src/DataGridDefaultRenderersContext.ts index 06aca65cd6..ea493e84e6 100644 --- a/src/DataGridDefaultRenderersContext.ts +++ b/src/DataGridDefaultRenderersContext.ts @@ -2,7 +2,7 @@ import { createContext, use } from 'react'; import type { Maybe, Renderers } from './types'; -// eslint-disable-next-line @typescript-eslint/no-explicit-any +// oxlint-disable-next-line typescript/no-explicit-any export const DataGridDefaultRenderersContext = createContext>>(undefined); DataGridDefaultRenderersContext.displayName = 'DataGridDefaultRenderersContext'; diff --git a/src/GroupRow.tsx b/src/GroupRow.tsx index 967e139f11..7d7fad70fc 100644 --- a/src/GroupRow.tsx +++ b/src/GroupRow.tsx @@ -82,7 +82,7 @@ function GroupedRow({ .map(([column, isCellActive], index) => { // Select is always the first column if (index === 0 && column.key === SELECT_COLUMN_KEY) { - // eslint-disable-next-line @eslint-react/immutability + // oxlint-disable-next-line @eslint-react/immutability idx += 1; } @@ -93,9 +93,9 @@ function GroupedRow({ groupKey={row.groupKey} childRows={row.childRows} isExpanded={row.isExpanded} - // eslint-disable-next-line @eslint-react/immutability + // oxlint-disable-next-line @eslint-react/immutability isCellActive={isCellActive} - // eslint-disable-next-line @eslint-react/immutability + // oxlint-disable-next-line @eslint-react/immutability column={column} row={row} groupColumnIndex={idx} diff --git a/src/globals.d.ts b/src/globals.d.ts index 50b3a3a08f..eca7d89088 100644 --- a/src/globals.d.ts +++ b/src/globals.d.ts @@ -1,6 +1,6 @@ declare module 'react' { interface CSSProperties { - // eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style + // oxlint-disable-next-line typescript/consistent-indexed-object-style [key: `--${string}`]: string | number | undefined; } } diff --git a/src/hooks/useGridDimensions.ts b/src/hooks/useGridDimensions.ts index b1d1da173e..620b7adfdc 100644 --- a/src/hooks/useGridDimensions.ts +++ b/src/hooks/useGridDimensions.ts @@ -13,7 +13,6 @@ const subscribers = new Map, () => void>(); // don't break in Node.js (SSR), jsdom, and environments that don't support ResizeObserver const resizeObserver = - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition globalThis.ResizeObserver == null ? null : new ResizeObserver(resizeObserverCallback); function resizeObserverCallback(entries: ResizeObserverEntry[]) { diff --git a/src/hooks/useLatestFunc.ts b/src/hooks/useLatestFunc.ts index 634694f3bb..1397202a01 100644 --- a/src/hooks/useLatestFunc.ts +++ b/src/hooks/useLatestFunc.ts @@ -3,7 +3,7 @@ import { useCallback, useLayoutEffect, useRef } from 'react'; import type { Maybe } from '../types'; // https://reactjs.org/docs/hooks-faq.html#what-can-i-do-if-my-effect-dependencies-change-too-often -// eslint-disable-next-line @typescript-eslint/no-explicit-any +// oxlint-disable-next-line typescript/no-explicit-any export function useLatestFunc any>>(fn: T): T { const ref = useRef(fn); diff --git a/src/hooks/useRowSelection.ts b/src/hooks/useRowSelection.ts index ea6c019697..64f02778bc 100644 --- a/src/hooks/useRowSelection.ts +++ b/src/hooks/useRowSelection.ts @@ -11,7 +11,7 @@ export const RowSelectionContext = createContext) => void) | undefined >(undefined); RowSelectionChangeContext.displayName = 'RowSelectionChangeContext'; diff --git a/src/types.ts b/src/types.ts index 8c8066b747..7b08f8c215 100644 --- a/src/types.ts +++ b/src/types.ts @@ -359,7 +359,7 @@ export interface RenderCheckboxProps extends Pick< 'aria-label' | 'aria-labelledby' | 'checked' | 'tabIndex' | 'disabled' > { // `| undefined` is required by `exactOptionalPropertyTypes`, which oxlint's JS plugins cannot see - // eslint-disable-next-line sonarjs/no-redundant-optional + // oxlint-disable-next-line sonarjs/no-redundant-optional indeterminate?: boolean | undefined; onChange: (checked: boolean, shift: boolean) => void; } diff --git a/src/utils/keyboardUtils.ts b/src/utils/keyboardUtils.ts index 056051293c..b984231e9a 100644 --- a/src/utils/keyboardUtils.ts +++ b/src/utils/keyboardUtils.ts @@ -62,7 +62,6 @@ export function isDefaultCellInput( event: React.KeyboardEvent, isUserHandlingPaste: boolean ): boolean { - // eslint-disable-next-line @typescript-eslint/no-deprecated if (isCtrlKeyHeldDown(event) && (event.keyCode !== vKey || isUserHandlingPaste)) return false; return !nonInputKeys.has(event.key); } diff --git a/test/browser/column/grouping.test.ts b/test/browser/column/grouping.test.ts index e86b552666..f19cb45150 100644 --- a/test/browser/column/grouping.test.ts +++ b/test/browser/column/grouping.test.ts @@ -241,10 +241,10 @@ test('grouping', async () => { await expect.element(cell).toHaveTextContent(item.text); await expect.element(cell).toHaveAttribute('aria-colindex', item.colIndex); if (item.colSpan == null) { - // eslint-disable-next-line vitest/no-conditional-expect + // oxlint-disable-next-line vitest/no-conditional-expect await expect.element(cell).not.toHaveAttribute('aria-colspan'); } else { - // eslint-disable-next-line vitest/no-conditional-expect + // oxlint-disable-next-line vitest/no-conditional-expect await expect.element(cell).toHaveAttribute('aria-colspan', item.colSpan); } await expect.element(cell).toHaveAttribute('aria-rowspan', item.rowSpan); diff --git a/test/browser/rowSelection.test.tsx b/test/browser/rowSelection.test.tsx index 8d45f3c312..25c09cb637 100644 --- a/test/browser/rowSelection.test.tsx +++ b/test/browser/rowSelection.test.tsx @@ -202,7 +202,7 @@ test('extra keys are preserved when updating the selectedRows Set', async () => function onSelectedRowsChange(selectedRows: Set) { setSelectedRows(selectedRows); - // eslint-disable-next-line @eslint-react/immutability + // oxlint-disable-next-line @eslint-react/immutability set = selectedRows; } @@ -212,7 +212,7 @@ test('extra keys are preserved when updating the selectedRows Set', async () => columns={columns} rows={defaultRows} selectedRows={selectedRows} - // eslint-disable-next-line @eslint-react/immutability + // oxlint-disable-next-line @eslint-react/immutability onSelectedRowsChange={onSelectedRowsChange} /> ); diff --git a/test/browser/scrollToCell.test.tsx b/test/browser/scrollToCell.test.tsx index 44c7e8aba8..15ea0cafee 100644 --- a/test/browser/scrollToCell.test.tsx +++ b/test/browser/scrollToCell.test.tsx @@ -119,7 +119,7 @@ function validateCellVisibility(name: string, isVisible: boolean) { if (isVisible) { // this helper is not a test block, but oxlint's implementation flags it anyway - // eslint-disable-next-line vitest/no-conditional-expect + // oxlint-disable-next-line vitest/no-conditional-expect return expect.element(cell).toBeVisible(); } diff --git a/website/renderers/renderCoordinates.ts b/website/renderers/renderCoordinates.ts index 3761a3a710..577a1417b5 100644 --- a/website/renderers/renderCoordinates.ts +++ b/website/renderers/renderCoordinates.ts @@ -1,6 +1,6 @@ import type { RenderCellProps } from '../../src'; -// eslint-disable-next-line @typescript-eslint/no-explicit-any +// oxlint-disable-next-line typescript/no-explicit-any export function renderCoordinates(props: RenderCellProps) { return `${props.column.key}×${props.row}`; } From b9b6d4f1a2e46ea214f1a44a7337f707f4a3e1a2 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Fri, 21 Aug 2026 19:50:01 +0100 Subject: [PATCH 06/22] tweak eslint usage --- .vscode/settings.json | 3 --- AGENTS.md | 2 +- package.json | 5 ++--- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 25dcc55943..6b25533823 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,9 +7,6 @@ }, "editor.defaultFormatter": "oxc.oxc-vscode", "js/ts.experimental.useTsgo": true, - "eslint.options": { - "flags": ["unstable_native_nodejs_ts_config"] - }, // ESLint is only used for markdown; JS/TS is linted by the oxc extension "eslint.validate": ["markdown"], "eslint.problems.shortenToSingleLine": true, diff --git a/AGENTS.md b/AGENTS.md index a76be47e82..f32fb285c9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -7,8 +7,8 @@ npm ci # setup node --run build # library → lib/ node --run typecheck # tsc --build node --run lint # oxlint --max-warnings 0 --type-aware -node --run lint:fix # oxlint --fix 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 diff --git a/package.json b/package.json index 3921ce3d4a..a32c9bd774 100644 --- a/package.json +++ b/package.json @@ -44,9 +44,8 @@ "format": "oxfmt", "format:check": "oxfmt --check", "lint": "oxlint", - "lint:fix": "oxlint --fix", - "lint:md": "eslint --max-warnings 0 --cache --cache-location .cache/eslint --cache-strategy content --flag unstable_native_nodejs_ts_config", - "lint:md:fix": "node --run lint:md -- --fix", + "lint:md": "eslint --max-warnings 0", + "lint:fix": "oxlint --fix && eslint --fix", "typecheck": "tsc --build" }, "devDependencies": { From a75da2df9d3b933301460ed3a499fb2caba763f9 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Fri, 21 Aug 2026 21:17:12 +0100 Subject: [PATCH 07/22] disallow br --- README.md | 2 +- eslint.config.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7ad7807480..9e967be8df 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ import 'react-data-grid/lib/styles.css'; `react-data-grid` is published as ECMAScript modules for evergreen browsers, bundlers, and server-side rendering. -> **Important**
+> **Important** > Vite 8+ by default uses `lightningcss` to minify css which has a [bug minifying light-dark syntax](https://github.com/parcel-bundler/lightningcss/issues/873). You can tweak the `cssMinify` or `cssTarget` [settings](https://main.vite.dev/config/build-options) as a workaround. ```ts diff --git a/eslint.config.ts b/eslint.config.ts index 0a0804925e..16396555da 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -58,7 +58,7 @@ copy( 'markdown/no-empty-definitions': 1, 'markdown/no-empty-images': 1, 'markdown/no-empty-links': 1, - 'markdown/no-html': [1, { allowed: ['br', 'kbd'] }], + 'markdown/no-html': [1, { allowed: ['kbd'] }], 'markdown/no-invalid-label-refs': 1, 'markdown/no-missing-atx-heading-space': 1, 'markdown/no-missing-label-refs': 1, From 0530500442b38d519f3380f02ba6a0a6a2d6b722 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Fri, 21 Aug 2026 21:25:27 +0100 Subject: [PATCH 08/22] add CLAUDE.md symlink --- CLAUDE.md | 1 + 1 file changed, 1 insertion(+) create mode 120000 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 120000 index 0000000000..47dc3e3d86 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file From f8b60ad9300952e182a0cf8c4bddd17ff548c756 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Fri, 21 Aug 2026 21:52:48 +0100 Subject: [PATCH 09/22] re-enable typeAware --- .oxlintrc.json | 3 +-- .vscode/settings.json | 4 ++++ AGENTS.md | 2 +- src/hooks/useGridDimensions.ts | 1 + src/utils/keyboardUtils.ts | 1 + 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index be9b1888db..135b7ed980 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -8,8 +8,7 @@ "denyWarnings": true, "reportUnusedDisableDirectives": "warn", "respectEslintDisableDirectives": false, - // TODO - "typeAware": false, + "typeAware": true, // TODO "typeCheck": false }, diff --git a/.vscode/settings.json b/.vscode/settings.json index 6b25533823..ef152ac97d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,6 +10,10 @@ // ESLint is only used for markdown; JS/TS is linted by the oxc extension "eslint.validate": ["markdown"], "eslint.problems.shortenToSingleLine": true, + "oxc.path.tsgolint": "node_modules/.bin/tsgolint.cmd", + "terminal.integrated.env.windows": { + "OXLINT_TSGOLINT_PATH": "node_modules/.bin/tsgolint.cmd" + }, "files.readonlyInclude": { "**/routeTree.gen.ts": true }, diff --git a/AGENTS.md b/AGENTS.md index f32fb285c9..36b56005ef 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,7 +6,7 @@ npm ci # setup node --run build # library → lib/ node --run typecheck # tsc --build -node --run lint # oxlint --max-warnings 0 --type-aware +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 diff --git a/src/hooks/useGridDimensions.ts b/src/hooks/useGridDimensions.ts index 620b7adfdc..7a384898f0 100644 --- a/src/hooks/useGridDimensions.ts +++ b/src/hooks/useGridDimensions.ts @@ -13,6 +13,7 @@ const subscribers = new Map, () => void>(); // don't break in Node.js (SSR), jsdom, and environments that don't support ResizeObserver const resizeObserver = + // oxlint-disable-next-line typescript/no-unnecessary-condition globalThis.ResizeObserver == null ? null : new ResizeObserver(resizeObserverCallback); function resizeObserverCallback(entries: ResizeObserverEntry[]) { diff --git a/src/utils/keyboardUtils.ts b/src/utils/keyboardUtils.ts index b984231e9a..28e64872cf 100644 --- a/src/utils/keyboardUtils.ts +++ b/src/utils/keyboardUtils.ts @@ -62,6 +62,7 @@ export function isDefaultCellInput( event: React.KeyboardEvent, isUserHandlingPaste: boolean ): boolean { + // oxlint-disable-next-line typescript/no-deprecated if (isCtrlKeyHeldDown(event) && (event.keyCode !== vKey || isUserHandlingPaste)) return false; return !nonInputKeys.has(event.key); } From a912743b4199489ecea2f34085a489b755abda0d Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Fri, 21 Aug 2026 22:01:51 +0100 Subject: [PATCH 10/22] enable typeCheck --- .github/workflows/ci.yml | 3 --- .github/workflows/publish.yml | 3 --- .oxlintrc.json | 3 +-- AGENTS.md | 3 +-- 4 files changed, 2 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f1b25bdd3b..5ad37218d9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,9 +20,6 @@ jobs: - name: Install dependencies run: npm ci - - name: Typecheck - run: node --run typecheck - - name: Lint run: | node --run lint diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 356069eb46..df7403efd0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -30,9 +30,6 @@ jobs: - name: Install dependencies run: npm ci - - name: Typecheck - run: node --run typecheck - - name: Lint run: | node --run lint diff --git a/.oxlintrc.json b/.oxlintrc.json index 135b7ed980..a1dac85b59 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -9,8 +9,7 @@ "reportUnusedDisableDirectives": "warn", "respectEslintDisableDirectives": false, "typeAware": true, - // TODO - "typeCheck": false + "typeCheck": true }, "env": { "builtin": true diff --git a/AGENTS.md b/AGENTS.md index 36b56005ef..ac8c5d6180 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,7 +5,6 @@ ```shell npm ci # setup node --run build # library → lib/ -node --run typecheck # tsc --build node --run lint # oxlint node --run lint:md # eslint --max-warnings 0 (markdown only) node --run lint:fix # oxlint --fix && eslint --fix @@ -60,4 +59,4 @@ website/ # demo site (Vite + TanStack Router) ## Validation -Run before submitting changes: `node --run typecheck`, `node --run lint`, `node --run format`, `node --run test`. +Run before submitting changes: `node --run lint`, `node --run format`, `node --run test`. From bb65dd0b439a4620b1458b451a79889493b5838e Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Fri, 21 Aug 2026 22:33:27 +0100 Subject: [PATCH 11/22] symlink -> file --- CLAUDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index 47dc3e3d86..43c994c2d3 120000 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1 +1 @@ -AGENTS.md \ No newline at end of file +@AGENTS.md From 9e4aacf6c00da4da5b09fd17705a09b42bfe50c3 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Fri, 21 Aug 2026 22:44:14 +0100 Subject: [PATCH 12/22] nude sonarjs --- .oxlintrc.json | 253 +---------------------------- eslint.config.ts | 2 - package-lock.json | 157 ------------------ package.json | 1 - src/types.ts | 2 - test/browser/scrollToCell.test.tsx | 1 - 6 files changed, 1 insertion(+), 415 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index a1dac85b59..b2a456b2e7 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -417,257 +417,6 @@ "@eslint-react/naming-convention-context-name": "warn", "@eslint-react/naming-convention-id-name": "warn", "@eslint-react/naming-convention-ref-name": "warn", - "sonarjs/anchor-precedence": "warn", - "sonarjs/argument-type": "warn", - "sonarjs/arguments-order": "warn", - "sonarjs/arguments-usage": "warn", - "sonarjs/array-callback-without-return": "warn", - "sonarjs/array-constructor": "warn", - "sonarjs/arrow-function-convention": "off", - "sonarjs/assertions-in-tests": "warn", - "sonarjs/aws-apigateway-public-api": "off", - "sonarjs/aws-ec2-rds-dms-public": "off", - "sonarjs/aws-ec2-unencrypted-ebs-volume": "off", - "sonarjs/aws-efs-unencrypted": "off", - "sonarjs/aws-iam-all-privileges": "off", - "sonarjs/aws-iam-all-resources-accessible": "off", - "sonarjs/aws-iam-privilege-escalation": "off", - "sonarjs/aws-iam-public-access": "off", - "sonarjs/aws-opensearchservice-domain": "off", - "sonarjs/aws-rds-unencrypted-databases": "off", - "sonarjs/aws-restricted-ip-admin-access": "off", - "sonarjs/aws-s3-bucket-granted-access": "off", - "sonarjs/aws-s3-bucket-insecure-http": "off", - "sonarjs/aws-s3-bucket-public-access": "off", - "sonarjs/aws-s3-bucket-versioning": "off", - "sonarjs/aws-sagemaker-unencrypted-notebook": "off", - "sonarjs/aws-sns-unencrypted-topics": "off", - "sonarjs/aws-sqs-unencrypted-queue": "off", - "sonarjs/bitwise-operators": "warn", - "sonarjs/block-scoped-var": "warn", - "sonarjs/bool-param-default": "warn", - "sonarjs/call-argument-line": "warn", - "sonarjs/chai-determinate-assertion": "warn", - "sonarjs/class-name": "warn", - "sonarjs/class-prototype": "warn", - "sonarjs/code-eval": "warn", - "sonarjs/cognitive-complexity": "off", - "sonarjs/comma-or-logical-or-case": "warn", - "sonarjs/comment-regex": "warn", - "sonarjs/concise-regex": "warn", - "sonarjs/confidential-information-logging": "warn", - "sonarjs/constructor-for-side-effects": "warn", - "sonarjs/content-length": "warn", - "sonarjs/content-security-policy": "warn", - "sonarjs/cookie-no-httponly": "warn", - "sonarjs/cors": "warn", - "sonarjs/csrf": "warn", - "sonarjs/cyclomatic-complexity": "off", - "sonarjs/declarations-in-global-scope": "off", - "sonarjs/deprecation": "off", - "sonarjs/destructuring-assignment-syntax": "warn", - "sonarjs/different-types-comparison": "warn", - "sonarjs/disabled-auto-escaping": "warn", - "sonarjs/disabled-resource-integrity": "warn", - "sonarjs/disabled-timeout": "warn", - "sonarjs/dompurify-unsafe-config": "warn", - "sonarjs/duplicates-in-character-class": "warn", - "sonarjs/dynamically-constructed-templates": "warn", - "sonarjs/elseif-without-else": "off", - "sonarjs/empty-string-repetition": "warn", - "sonarjs/encryption-secure-mode": "warn", - "sonarjs/existing-groups": "warn", - "sonarjs/expression-complexity": "off", - "sonarjs/file-header": "off", - "sonarjs/file-name-differ-from-class": "warn", - "sonarjs/file-permissions": "warn", - "sonarjs/file-uploads": "warn", - "sonarjs/fixme-tag": "warn", - "sonarjs/for-in": "warn", - "sonarjs/for-loop-increment-sign": "warn", - "sonarjs/frame-ancestors": "warn", - "sonarjs/function-inside-loop": "warn", - "sonarjs/function-name": "off", - "sonarjs/function-return-type": "off", - "sonarjs/future-reserved-words": "warn", - "sonarjs/generator-without-yield": "warn", - "sonarjs/hardcoded-secret-signatures": "warn", - "sonarjs/hashing": "warn", - "sonarjs/hidden-files": "warn", - "sonarjs/in-operator-type-error": "warn", - "sonarjs/inconsistent-function-call": "warn", - "sonarjs/index-of-compare-to-positive-number": "warn", - "sonarjs/insecure-cookie": "warn", - "sonarjs/insecure-jwt-token": "warn", - "sonarjs/inverted-assertion-arguments": "warn", - "sonarjs/jsx-no-leaked-render": "warn", - "sonarjs/label-position": "warn", - "sonarjs/link-with-target-blank": "warn", - "sonarjs/max-lines": "off", - "sonarjs/max-lines-per-function": "off", - "sonarjs/max-switch-cases": "off", - "sonarjs/max-union-size": "off", - "sonarjs/misplaced-loop-counter": "warn", - "sonarjs/nested-control-flow": "off", - "sonarjs/new-operator-misuse": "warn", - "sonarjs/no-all-duplicated-branches": "warn", - "sonarjs/no-alphabetical-sort": "warn", - "sonarjs/no-angular-bypass-sanitization": "warn", - "sonarjs/no-array-delete": "warn", - "sonarjs/no-associative-arrays": "warn", - "sonarjs/no-async-constructor": "warn", - "sonarjs/no-built-in-override": "warn", - "sonarjs/no-case-label-in-switch": "warn", - "sonarjs/no-clear-text-protocols": "warn", - "sonarjs/no-code-after-done": "warn", - "sonarjs/no-collapsible-if": "warn", - "sonarjs/no-collection-size-mischeck": "warn", - "sonarjs/no-commented-code": "warn", - "sonarjs/no-control-regex": "warn", - "sonarjs/no-dead-store": "warn", - "sonarjs/no-delete-var": "warn", - "sonarjs/no-duplicate-in-composite": "warn", - "sonarjs/no-duplicate-string": "off", - "sonarjs/no-duplicated-branches": "warn", - "sonarjs/no-element-overwrite": "warn", - "sonarjs/no-empty-after-reluctant": "warn", - "sonarjs/no-empty-alternatives": "warn", - "sonarjs/no-empty-character-class": "warn", - "sonarjs/no-empty-collection": "warn", - "sonarjs/no-empty-group": "warn", - "sonarjs/no-empty-test-file": "warn", - "sonarjs/no-equals-in-for-termination": "warn", - "sonarjs/no-exclusive-tests": "warn", - "sonarjs/no-extra-arguments": "off", - "sonarjs/no-fallthrough": "warn", - "sonarjs/no-for-in-iterable": "warn", - "sonarjs/no-function-declaration-in-block": "warn", - "sonarjs/no-global-this": "warn", - "sonarjs/no-globals-shadowing": "warn", - "sonarjs/no-gratuitous-expressions": "warn", - "sonarjs/no-hardcoded-ip": "warn", - "sonarjs/no-hardcoded-passwords": "warn", - "sonarjs/no-hardcoded-secrets": "warn", - "sonarjs/no-hook-setter-in-body": "warn", - "sonarjs/no-identical-conditions": "warn", - "sonarjs/no-identical-expressions": "warn", - "sonarjs/no-identical-functions": "warn", - "sonarjs/no-ignored-exceptions": "warn", - "sonarjs/no-ignored-return": "warn", - "sonarjs/no-implicit-dependencies": "off", - "sonarjs/no-implicit-global": "warn", - "sonarjs/no-in-misuse": "warn", - "sonarjs/no-incomplete-assertions": "warn", - "sonarjs/no-inconsistent-returns": "off", - "sonarjs/no-incorrect-string-concat": "warn", - "sonarjs/no-internal-api-use": "warn", - "sonarjs/no-intrusive-permissions": "warn", - "sonarjs/no-invalid-regexp": "warn", - "sonarjs/no-invariant-returns": "warn", - "sonarjs/no-inverted-boolean-check": "warn", - "sonarjs/no-ip-forward": "warn", - "sonarjs/no-labels": "warn", - "sonarjs/no-literal-call": "warn", - "sonarjs/no-mime-sniff": "warn", - "sonarjs/no-misleading-array-reverse": "warn", - "sonarjs/no-misleading-character-class": "warn", - "sonarjs/no-mixed-content": "warn", - "sonarjs/no-nested-assignment": "warn", - "sonarjs/no-nested-conditional": "off", - "sonarjs/no-nested-functions": "off", - "sonarjs/no-nested-incdec": "warn", - "sonarjs/no-nested-switch": "warn", - "sonarjs/no-nested-template-literals": "warn", - "sonarjs/no-os-command-from-path": "warn", - "sonarjs/no-parameter-reassignment": "warn", - "sonarjs/no-primitive-wrappers": "warn", - "sonarjs/no-redundant-assignments": "warn", - "sonarjs/no-redundant-boolean": "warn", - "sonarjs/no-redundant-jump": "warn", - "sonarjs/no-redundant-optional": "warn", - "sonarjs/no-reference-error": "off", - "sonarjs/no-referrer-policy": "warn", - "sonarjs/no-regex-spaces": "warn", - "sonarjs/no-require-or-define": "warn", - "sonarjs/no-return-type-any": "warn", - "sonarjs/no-same-argument-assert": "warn", - "sonarjs/no-same-line-conditional": "warn", - "sonarjs/no-selector-parameter": "off", - "sonarjs/no-session-cookies-on-static-assets": "warn", - "sonarjs/no-skipped-tests": "warn", - "sonarjs/no-small-switch": "warn", - "sonarjs/no-sonar-comments": "warn", - "sonarjs/no-table-as-layout": "warn", - "sonarjs/no-try-promise": "warn", - "sonarjs/no-undefined-argument": "warn", - "sonarjs/no-undefined-assignment": "off", - "sonarjs/no-unenclosed-multiline-block": "warn", - "sonarjs/no-uniq-key": "warn", - "sonarjs/no-unthrown-error": "warn", - "sonarjs/no-unused-collection": "warn", - "sonarjs/no-unused-function-argument": "warn", - "sonarjs/no-unused-vars": "warn", - "sonarjs/no-use-of-empty-return-value": "warn", - "sonarjs/no-useless-catch": "warn", - "sonarjs/no-useless-increment": "warn", - "sonarjs/no-useless-intersection": "warn", - "sonarjs/no-useless-react-setstate": "warn", - "sonarjs/no-variable-usage-before-declaration": "warn", - "sonarjs/no-weak-cipher": "warn", - "sonarjs/no-weak-keys": "warn", - "sonarjs/no-wildcard-import": "off", - "sonarjs/non-existent-operator": "warn", - "sonarjs/non-number-in-arithmetic-expression": "warn", - "sonarjs/null-dereference": "warn", - "sonarjs/object-alt-content": "warn", - "sonarjs/operation-returning-nan": "warn", - "sonarjs/post-message": "warn", - "sonarjs/prefer-default-last": "warn", - "sonarjs/prefer-immediate-return": "warn", - "sonarjs/prefer-object-literal": "warn", - "sonarjs/prefer-promise-shorthand": "warn", - "sonarjs/prefer-read-only-props": "off", - "sonarjs/prefer-regexp-exec": "warn", - "sonarjs/prefer-single-boolean-return": "warn", - "sonarjs/prefer-type-guard": "warn", - "sonarjs/prefer-while": "warn", - "sonarjs/production-debug": "warn", - "sonarjs/pseudo-random": "off", - "sonarjs/public-static-readonly": "warn", - "sonarjs/publicly-writable-directories": "warn", - "sonarjs/reduce-initial-value": "warn", - "sonarjs/redundant-type-aliases": "off", - "sonarjs/regex-complexity": "warn", - "sonarjs/review-blockchain-mnemonic": "warn", - "sonarjs/session-regeneration": "warn", - "sonarjs/shorthand-property-grouping": "off", - "sonarjs/single-char-in-character-classes": "warn", - "sonarjs/single-character-alternation": "warn", - "sonarjs/slow-regex": "warn", - "sonarjs/sql-queries": "warn", - "sonarjs/stable-tests": "warn", - "sonarjs/stateful-regex": "warn", - "sonarjs/strict-transport-security": "warn", - "sonarjs/strings-comparison": "warn", - "sonarjs/table-header": "warn", - "sonarjs/table-header-reference": "warn", - "sonarjs/test-check-exception": "warn", - "sonarjs/todo-tag": "off", - "sonarjs/too-many-break-or-continue-in-loop": "off", - "sonarjs/unicode-aware-regex": "warn", - "sonarjs/unused-import": "warn", - "sonarjs/unused-named-groups": "warn", - "sonarjs/unverified-certificate": "warn", - "sonarjs/unverified-hostname": "warn", - "sonarjs/updated-const-var": "warn", - "sonarjs/updated-loop-counter": "off", - "sonarjs/use-type-alias": "warn", - "sonarjs/values-not-convertible-to-numbers": "warn", - "sonarjs/variable-name": "warn", - "sonarjs/void-use": "warn", - "sonarjs/weak-ssl": "warn", - "sonarjs/x-powered-by": "warn", - "sonarjs/xml-parser-xxe": "warn", "react/rules-of-hooks": "warn", "react/exhaustive-deps": "warn", "typescript/consistent-return": "off", @@ -848,7 +597,7 @@ "typescript/unified-signatures": "off", "typescript/use-unknown-in-catch-callback-variable": "warn" }, - "jsPlugins": ["@eslint-react/eslint-plugin", "eslint-plugin-sonarjs"], + "jsPlugins": ["@eslint-react/eslint-plugin"], "plugins": ["typescript", "react"] }, { diff --git a/eslint.config.ts b/eslint.config.ts index 16396555da..a5b113dc3a 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -1,8 +1,6 @@ import markdown from '@eslint/markdown'; import { defineConfig, globalIgnores } from 'eslint/config'; -// ESLint is only kept for markdown linting. Everything else has moved to oxlint (`.oxlintrc.json`). -// `@eslint/markdown` is built on ESLint's language plugin API, which oxlint does not support. export default defineConfig([ globalIgnores([ '.cache', diff --git a/package-lock.json b/package-lock.json index 2f725f79d2..124284a5b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,6 @@ "clsx": "^2.1.1", "ecij": "^0.4.1", "eslint": "^10.2.1", - "eslint-plugin-sonarjs": "^4.0.3", "jspdf": "^4.2.0", "jspdf-autotable": "^5.0.7", "oxfmt": "0.63.0", @@ -3511,29 +3510,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/cac": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cac/-/cac-7.0.0.tgz", @@ -4105,44 +4081,6 @@ "typescript": "*" } }, - "node_modules/eslint-plugin-sonarjs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-4.2.0.tgz", - "integrity": "sha512-bqADfuNtTL7VK6RU29eoiFTtaaBKIpVPuX3bOl+rBpWSBa0zIBVZlqZNZQjfP6s4iXkAJokv5IsD8OsACkwApg==", - "dev": true, - "license": "LGPL-3.0-only", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "builtin-modules": "^3.3.0", - "bytes": "^3.1.2", - "functional-red-black-tree": "^1.0.1", - "globals": "^17.7.0", - "jsx-ast-utils-x": "^0.1.0", - "lodash.merge": "^4.6.2", - "minimatch": "^10.2.5", - "scslre": "^0.3.0", - "semver": "^7.8.5", - "ts-api-utils": "^2.5.0", - "typescript": ">=5 <6.1.0", - "yaml": "^2.9.0" - }, - "peerDependencies": { - "eslint": "^8.0.0 || ^9.0.0 || ^10.0.0" - } - }, - "node_modules/eslint-plugin-sonarjs/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/eslint-scope": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", @@ -4427,13 +4365,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true, - "license": "MIT" - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4467,19 +4398,6 @@ "dev": true, "license": "ISC" }, - "node_modules/globals": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.7.0.tgz", - "integrity": "sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4730,16 +4648,6 @@ "jspdf": "^2 || ^3 || ^4" } }, - "node_modules/jsx-ast-utils-x": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils-x/-/jsx-ast-utils-x-0.1.0.tgz", - "integrity": "sha512-eQQBjBnsVtGacsG9uJNB8qOr3yA8rga4wAaGG1qRcBzSIvfhERLrWxMAM1hp5fcS6Abo8M4+bUBTekYR0qTPQw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/katex": { "version": "0.16.46", "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.46.tgz", @@ -5083,13 +4991,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -6607,19 +6508,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/refa": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/refa/-/refa-0.12.1.tgz", - "integrity": "sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.8.0" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -6628,20 +6516,6 @@ "license": "MIT", "optional": true }, - "node_modules/regexp-ast-analysis": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz", - "integrity": "sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.8.0", - "refa": "^0.12.1" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -6745,21 +6619,6 @@ "dev": true, "license": "MIT" }, - "node_modules/scslre": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.3.0.tgz", - "integrity": "sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.8.0", - "refa": "^0.12.0", - "regexp-ast-analysis": "^0.7.0" - }, - "engines": { - "node": "^14.0.0 || >=16.0.0" - } - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -7584,22 +7443,6 @@ "dev": true, "license": "ISC" }, - "node_modules/yaml": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", - "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index a32c9bd774..cc952f3723 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,6 @@ "clsx": "^2.1.1", "ecij": "^0.4.1", "eslint": "^10.2.1", - "eslint-plugin-sonarjs": "^4.0.3", "jspdf": "^4.2.0", "jspdf-autotable": "^5.0.7", "oxfmt": "0.63.0", diff --git a/src/types.ts b/src/types.ts index 7b08f8c215..fed440f9f3 100644 --- a/src/types.ts +++ b/src/types.ts @@ -358,8 +358,6 @@ export interface RenderCheckboxProps extends Pick< React.ComponentProps<'input'>, 'aria-label' | 'aria-labelledby' | 'checked' | 'tabIndex' | 'disabled' > { - // `| undefined` is required by `exactOptionalPropertyTypes`, which oxlint's JS plugins cannot see - // oxlint-disable-next-line sonarjs/no-redundant-optional indeterminate?: boolean | undefined; onChange: (checked: boolean, shift: boolean) => void; } diff --git a/test/browser/scrollToCell.test.tsx b/test/browser/scrollToCell.test.tsx index 15ea0cafee..5e02ac7ceb 100644 --- a/test/browser/scrollToCell.test.tsx +++ b/test/browser/scrollToCell.test.tsx @@ -118,7 +118,6 @@ function validateCellVisibility(name: string, isVisible: boolean) { const cell = page.getCell({ name }); if (isVisible) { - // this helper is not a test block, but oxlint's implementation flags it anyway // oxlint-disable-next-line vitest/no-conditional-expect return expect.element(cell).toBeVisible(); } From cacbfef9bb61a3349dffc70c2b0b0593d76b57fa Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Fri, 21 Aug 2026 23:02:03 +0100 Subject: [PATCH 13/22] tweak settings --- .oxlintrc.json | 1160 ++++++++++++++++++++++++------------------------ 1 file changed, 582 insertions(+), 578 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index b2a456b2e7..45a1aca3af 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -1,9 +1,14 @@ { "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": [], + + "plugins": ["typescript", "react", "vitest"], + + "jsPlugins": ["@eslint-react/eslint-plugin"], + "categories": { "correctness": "off" }, + "options": { "denyWarnings": true, "reportUnusedDisableDirectives": "warn", @@ -11,9 +16,11 @@ "typeAware": true, "typeCheck": true }, + "env": { "builtin": true }, + "ignorePatterns": [ ".cache", ".claude", @@ -25,583 +32,581 @@ "lib", "website/routeTree.gen.ts" ], + + "rules": { + "array-callback-return": [ + "warn", + { + "checkForEach": true + } + ], + "constructor-super": "off", + "for-direction": "warn", + "getter-return": "warn", + "no-async-promise-executor": "warn", + "no-await-in-loop": "off", + "no-class-assign": "off", + "no-compare-neg-zero": "warn", + "no-cond-assign": "warn", + "no-const-assign": "off", + "no-constant-binary-expression": "warn", + "no-constant-condition": "warn", + "no-constructor-return": "warn", + "no-control-regex": "warn", + "no-debugger": "warn", + "no-dupe-class-members": "off", + "no-dupe-else-if": "warn", + "no-dupe-keys": "warn", + "no-duplicate-case": "warn", + "no-duplicate-imports": "off", + "no-empty-character-class": "warn", + "no-empty-pattern": "warn", + "no-ex-assign": "warn", + "no-fallthrough": [ + "warn", + { + "reportUnusedFallthroughComment": true + } + ], + "no-func-assign": "warn", + "no-import-assign": "warn", + "no-inner-declarations": "off", + "no-invalid-regexp": "warn", + "no-irregular-whitespace": "warn", + "no-loss-of-precision": "warn", + "no-misleading-character-class": "warn", + "no-new-native-nonconstructor": "warn", + "no-obj-calls": "warn", + "no-promise-executor-return": "warn", + "no-prototype-builtins": "warn", + "no-self-assign": [ + "warn", + { + "props": true + } + ], + "no-self-compare": "warn", + "no-setter-return": "warn", + "no-sparse-arrays": "warn", + "no-template-curly-in-string": "warn", + "no-this-before-super": "off", + "no-unassigned-vars": "warn", + "no-undef": "off", + "no-unexpected-multiline": "off", + "no-unmodified-loop-condition": "warn", + "no-unreachable": "warn", + "no-unreachable-loop": "warn", + "no-unsafe-finally": "warn", + "no-unsafe-negation": [ + "warn", + { + "enforceForOrderingRelations": true + } + ], + "no-unsafe-optional-chaining": [ + "warn", + { + "disallowArithmeticOperators": true + } + ], + "no-unused-private-class-members": "off", + "no-unused-vars": [ + "warn", + { + "enableAutofixRemoval": { + "imports": true + }, + "ignoreRestSiblings": true + } + ], + "no-use-before-define": "off", + "no-useless-backreference": "warn", + "use-isnan": [ + "warn", + { + "enforceForIndexOf": true + } + ], + "valid-typeof": [ + "warn", + { + "requireStringLiterals": true + } + ], + "accessor-pairs": "warn", + "arrow-body-style": "off", + "block-scoped-var": "warn", + "capitalized-comments": "off", + "class-methods-use-this": "warn", + "complexity": "off", + "curly": "off", + "default-case": "warn", + "default-case-last": "warn", + "default-param-last": "off", + "eqeqeq": [ + "warn", + "always", + { + "null": "ignore" + } + ], + "func-name-matching": "off", + "func-names": "off", + "func-style": "off", + "grouped-accessor-pairs": ["warn", "getBeforeSet"], + "guard-for-in": "off", + "id-denylist": "off", + "id-length": "off", + "id-match": "off", + "init-declarations": "off", + "logical-assignment-operators": [ + "warn", + "always", + { + "enforceForIfStatements": true + } + ], + "max-classes-per-file": "off", + "max-depth": "off", + "max-lines": "off", + "max-lines-per-function": "off", + "max-nested-callbacks": "off", + "max-params": "off", + "max-statements": "off", + "new-cap": "off", + "no-alert": "off", + "no-array-constructor": "warn", + "no-bitwise": "off", + "no-caller": "warn", + "no-case-declarations": "warn", + "no-console": "warn", + "no-continue": "off", + "no-delete-var": "warn", + "no-div-regex": "off", + "no-else-return": [ + "warn", + { + "allowElseIf": false + } + ], + "no-empty": [ + "warn", + { + "allowEmptyCatch": true + } + ], + "no-empty-function": "off", + "no-empty-static-block": "warn", + "no-eq-null": "off", + "no-eval": "warn", + "no-extend-native": "warn", + "no-extra-bind": "warn", + "no-extra-boolean-cast": [ + "warn", + { + "enforceForLogicalOperands": true + } + ], + "no-extra-label": "warn", + "no-global-assign": "warn", + "no-implicit-coercion": "off", + "no-implicit-globals": "off", + "no-implied-eval": "off", + "no-inline-comments": "off", + "no-iterator": "warn", + "no-label-var": "warn", + "no-labels": "warn", + "no-lone-blocks": "warn", + "no-lonely-if": "warn", + "no-loop-func": "off", + "no-magic-numbers": "off", + "no-multi-assign": "off", + "no-multi-str": "warn", + "no-negated-condition": "off", + "no-nested-ternary": "off", + "no-new": "warn", + "no-new-func": "warn", + "no-new-wrappers": "warn", + "no-nonoctal-decimal-escape": "warn", + "no-object-constructor": "warn", + "no-param-reassign": "off", + "no-plusplus": "off", + "no-proto": "warn", + "no-redeclare": "warn", + "no-regex-spaces": "warn", + "no-restricted-exports": "off", + "no-restricted-globals": [ + "warn", + { + "name": "Omit", + "message": "Use Omit from types instead." + } + ], + "no-restricted-imports": "off", + "no-restricted-properties": "off", + "no-return-assign": "off", + "no-script-url": "warn", + "no-sequences": [ + "warn", + { + "allowInParentheses": false + } + ], + "no-shadow": "off", + "no-shadow-restricted-names": "warn", + "no-ternary": "off", + "no-throw-literal": "off", + "no-undefined": "off", + "no-underscore-dangle": "off", + "no-unneeded-ternary": [ + "warn", + { + "defaultAssignment": false + } + ], + "no-unused-expressions": [ + "warn", + { + "enforceForJSX": true + } + ], + "no-unused-labels": "warn", + "no-useless-call": "warn", + "no-useless-catch": "warn", + "no-useless-computed-key": "warn", + "no-useless-concat": "warn", + "no-useless-constructor": "warn", + "no-useless-escape": "warn", + "no-useless-rename": "warn", + "no-useless-return": "warn", + "no-var": "warn", + "no-void": "warn", + "no-warning-comments": "off", + "no-with": "warn", + "object-shorthand": [ + "warn", + "always", + { + "avoidExplicitReturnArrows": true + } + ], + "operator-assignment": "warn", + "prefer-arrow-callback": [ + "warn", + { + "allowNamedFunctions": true + } + ], + "prefer-const": [ + "warn", + { + "destructuring": "all" + } + ], + "prefer-destructuring": "off", + "prefer-exponentiation-operator": "warn", + "prefer-named-capture-group": "off", + "prefer-numeric-literals": "warn", + "prefer-object-has-own": "warn", + "prefer-object-spread": "warn", + "prefer-promise-reject-errors": "off", + "prefer-regex-literals": [ + "warn", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "warn", + "prefer-spread": "warn", + "prefer-template": "warn", + "preserve-caught-error": "warn", + "radix": "warn", + "require-await": "off", + "require-unicode-regexp": "off", + "require-yield": "warn", + "sort-keys": "off", + "sort-vars": "off", + "symbol-description": "warn", + "vars-on-top": "off", + "yoda": "off", + "unicode-bom": "warn", + "@eslint-react/error-boundaries": "warn", + "@eslint-react/exhaustive-deps": "warn", + "@eslint-react/globals": "warn", + "@eslint-react/immutability": "warn", + "@eslint-react/no-access-state-in-setstate": "warn", + "@eslint-react/no-array-index-key": "off", + "@eslint-react/no-children-count": "warn", + "@eslint-react/no-children-for-each": "warn", + "@eslint-react/no-children-map": "warn", + "@eslint-react/no-children-only": "warn", + "@eslint-react/no-children-to-array": "warn", + "@eslint-react/no-class-component": "warn", + "@eslint-react/no-clone-element": "warn", + "@eslint-react/no-component-will-mount": "warn", + "@eslint-react/no-component-will-receive-props": "warn", + "@eslint-react/no-component-will-update": "warn", + "@eslint-react/no-context-provider": "warn", + "@eslint-react/no-create-ref": "warn", + "@eslint-react/no-direct-mutation-state": "warn", + "@eslint-react/no-duplicate-key": "warn", + "@eslint-react/no-forward-ref": "warn", + "@eslint-react/no-implicit-children": "off", + "@eslint-react/no-implicit-key": "off", + "@eslint-react/no-implicit-ref": "off", + "@eslint-react/no-leaked-conditional-rendering": "off", + "@eslint-react/no-missing-component-display-name": "warn", + "@eslint-react/no-missing-context-display-name": "warn", + "@eslint-react/no-missing-key": "warn", + "@eslint-react/no-misused-capture-owner-stack": "warn", + "@eslint-react/no-nested-component-definitions": "warn", + "@eslint-react/no-nested-lazy-component-declarations": "warn", + "@eslint-react/no-set-state-in-component-did-mount": "warn", + "@eslint-react/no-set-state-in-component-did-update": "warn", + "@eslint-react/no-set-state-in-component-will-update": "warn", + "@eslint-react/no-unnecessary-use-prefix": "warn", + "@eslint-react/no-unsafe-component-will-mount": "warn", + "@eslint-react/no-unsafe-component-will-receive-props": "warn", + "@eslint-react/no-unsafe-component-will-update": "warn", + "@eslint-react/no-unstable-context-value": "warn", + "@eslint-react/no-unstable-default-props": "warn", + "@eslint-react/no-unused-class-component-members": "warn", + "@eslint-react/no-unused-props": "off", + "@eslint-react/no-unused-state": "warn", + "@eslint-react/no-use-context": "warn", + "@eslint-react/purity": "warn", + "@eslint-react/refs": "warn", + "@eslint-react/rules-of-hooks": "warn", + "@eslint-react/set-state-in-effect": "off", + "@eslint-react/set-state-in-render": "warn", + "@eslint-react/static-components": "warn", + "@eslint-react/unsupported-syntax": "warn", + "@eslint-react/use-memo": "warn", + "@eslint-react/use-state": "warn", + "@eslint-react/jsx-no-children-prop": "warn", + "@eslint-react/jsx-no-children-prop-with-children": "warn", + "@eslint-react/jsx-no-comment-textnodes": "warn", + "@eslint-react/jsx-no-key-after-spread": "warn", + "@eslint-react/jsx-no-leaked-dollar": "warn", + "@eslint-react/jsx-no-leaked-semicolon": "warn", + "@eslint-react/jsx-no-namespace": "warn", + "@eslint-react/jsx-no-useless-fragment": [ + "warn", + { + "allowExpressions": false + } + ], + "@eslint-react/rsc-function-definition": "warn", + "@eslint-react/dom-no-dangerously-set-innerhtml": "warn", + "@eslint-react/dom-no-dangerously-set-innerhtml-with-children": "warn", + "@eslint-react/dom-no-find-dom-node": "warn", + "@eslint-react/dom-no-flush-sync": "off", + "@eslint-react/dom-no-hydrate": "warn", + "@eslint-react/dom-no-missing-button-type": "warn", + "@eslint-react/dom-no-missing-iframe-sandbox": "warn", + "@eslint-react/dom-no-render": "warn", + "@eslint-react/dom-no-render-return-value": "warn", + "@eslint-react/dom-no-script-url": "warn", + "@eslint-react/dom-no-string-style-prop": "warn", + "@eslint-react/dom-no-unknown-property": "warn", + "@eslint-react/dom-no-unsafe-iframe-sandbox": "warn", + "@eslint-react/dom-no-unsafe-target-blank": "warn", + "@eslint-react/dom-no-use-form-state": "warn", + "@eslint-react/dom-no-void-elements-with-children": "warn", + "@eslint-react/web-api-no-leaked-event-listener": "warn", + "@eslint-react/web-api-no-leaked-fetch": "warn", + "@eslint-react/web-api-no-leaked-intersection-observer": "warn", + "@eslint-react/web-api-no-leaked-interval": "warn", + "@eslint-react/web-api-no-leaked-resize-observer": "warn", + "@eslint-react/web-api-no-leaked-timeout": "warn", + "@eslint-react/naming-convention-context-name": "warn", + "@eslint-react/naming-convention-id-name": "warn", + "@eslint-react/naming-convention-ref-name": "warn", + "react/rules-of-hooks": "warn", + "react/exhaustive-deps": "warn", + "typescript/consistent-return": "off", + "typescript/dot-notation": "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/class-literal-property-style": "off", + "typescript/consistent-generic-constructors": "warn", + "typescript/consistent-indexed-object-style": "warn", + "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/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, + "ignoreVoidReturningFunctions": 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-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-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/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", + { + "path": "never", + "types": "never", + "lib": "never" + } + ], + "typescript/unbound-method": "off", + "typescript/unified-signatures": "off", + "typescript/use-unknown-in-catch-callback-variable": "warn" + }, + "overrides": [ - { - "files": ["**/*.{js,ts,tsx}"], - "rules": { - "array-callback-return": [ - "warn", - { - "checkForEach": true - } - ], - "constructor-super": "off", - "for-direction": "warn", - "getter-return": "warn", - "no-async-promise-executor": "warn", - "no-await-in-loop": "off", - "no-class-assign": "off", - "no-compare-neg-zero": "warn", - "no-cond-assign": "warn", - "no-const-assign": "off", - "no-constant-binary-expression": "warn", - "no-constant-condition": "warn", - "no-constructor-return": "warn", - "no-control-regex": "warn", - "no-debugger": "warn", - "no-dupe-class-members": "off", - "no-dupe-else-if": "warn", - "no-dupe-keys": "warn", - "no-duplicate-case": "warn", - "no-duplicate-imports": "off", - "no-empty-character-class": "warn", - "no-empty-pattern": "warn", - "no-ex-assign": "warn", - "no-fallthrough": [ - "warn", - { - "reportUnusedFallthroughComment": true - } - ], - "no-func-assign": "warn", - "no-import-assign": "warn", - "no-inner-declarations": "off", - "no-invalid-regexp": "warn", - "no-irregular-whitespace": "warn", - "no-loss-of-precision": "warn", - "no-misleading-character-class": "warn", - "no-new-native-nonconstructor": "warn", - "no-obj-calls": "warn", - "no-promise-executor-return": "warn", - "no-prototype-builtins": "warn", - "no-self-assign": [ - "warn", - { - "props": true - } - ], - "no-self-compare": "warn", - "no-setter-return": "warn", - "no-sparse-arrays": "warn", - "no-template-curly-in-string": "warn", - "no-this-before-super": "off", - "no-unassigned-vars": "warn", - "no-undef": "off", - "no-unexpected-multiline": "off", - "no-unmodified-loop-condition": "warn", - "no-unreachable": "warn", - "no-unreachable-loop": "warn", - "no-unsafe-finally": "warn", - "no-unsafe-negation": [ - "warn", - { - "enforceForOrderingRelations": true - } - ], - "no-unsafe-optional-chaining": [ - "warn", - { - "disallowArithmeticOperators": true - } - ], - "no-unused-private-class-members": "off", - "no-unused-vars": [ - "warn", - { - "enableAutofixRemoval": { - "imports": true - }, - "ignoreRestSiblings": true - } - ], - "no-use-before-define": "off", - "no-useless-backreference": "warn", - "use-isnan": [ - "warn", - { - "enforceForIndexOf": true - } - ], - "valid-typeof": [ - "warn", - { - "requireStringLiterals": true - } - ], - "accessor-pairs": "warn", - "arrow-body-style": "off", - "block-scoped-var": "warn", - "capitalized-comments": "off", - "class-methods-use-this": "warn", - "complexity": "off", - "curly": "off", - "default-case": "warn", - "default-case-last": "warn", - "default-param-last": "off", - "eqeqeq": [ - "warn", - "always", - { - "null": "ignore" - } - ], - "func-name-matching": "off", - "func-names": "off", - "func-style": "off", - "grouped-accessor-pairs": ["warn", "getBeforeSet"], - "guard-for-in": "off", - "id-denylist": "off", - "id-length": "off", - "id-match": "off", - "init-declarations": "off", - "logical-assignment-operators": [ - "warn", - "always", - { - "enforceForIfStatements": true - } - ], - "max-classes-per-file": "off", - "max-depth": "off", - "max-lines": "off", - "max-lines-per-function": "off", - "max-nested-callbacks": "off", - "max-params": "off", - "max-statements": "off", - "new-cap": "off", - "no-alert": "off", - "no-array-constructor": "warn", - "no-bitwise": "off", - "no-caller": "warn", - "no-case-declarations": "warn", - "no-console": "warn", - "no-continue": "off", - "no-delete-var": "warn", - "no-div-regex": "off", - "no-else-return": [ - "warn", - { - "allowElseIf": false - } - ], - "no-empty": [ - "warn", - { - "allowEmptyCatch": true - } - ], - "no-empty-function": "off", - "no-empty-static-block": "warn", - "no-eq-null": "off", - "no-eval": "warn", - "no-extend-native": "warn", - "no-extra-bind": "warn", - "no-extra-boolean-cast": [ - "warn", - { - "enforceForLogicalOperands": true - } - ], - "no-extra-label": "warn", - "no-global-assign": "warn", - "no-implicit-coercion": "off", - "no-implicit-globals": "off", - "no-implied-eval": "off", - "no-inline-comments": "off", - "no-iterator": "warn", - "no-label-var": "warn", - "no-labels": "warn", - "no-lone-blocks": "warn", - "no-lonely-if": "warn", - "no-loop-func": "off", - "no-magic-numbers": "off", - "no-multi-assign": "off", - "no-multi-str": "warn", - "no-negated-condition": "off", - "no-nested-ternary": "off", - "no-new": "warn", - "no-new-func": "warn", - "no-new-wrappers": "warn", - "no-nonoctal-decimal-escape": "warn", - "no-object-constructor": "warn", - "no-param-reassign": "off", - "no-plusplus": "off", - "no-proto": "warn", - "no-redeclare": "warn", - "no-regex-spaces": "warn", - "no-restricted-exports": "off", - "no-restricted-globals": [ - "warn", - { - "name": "Omit", - "message": "Use Omit from types instead." - } - ], - "no-restricted-imports": "off", - "no-restricted-properties": "off", - "no-return-assign": "off", - "no-script-url": "warn", - "no-sequences": [ - "warn", - { - "allowInParentheses": false - } - ], - "no-shadow": "off", - "no-shadow-restricted-names": "warn", - "no-ternary": "off", - "no-throw-literal": "off", - "no-undefined": "off", - "no-underscore-dangle": "off", - "no-unneeded-ternary": [ - "warn", - { - "defaultAssignment": false - } - ], - "no-unused-expressions": [ - "warn", - { - "enforceForJSX": true - } - ], - "no-unused-labels": "warn", - "no-useless-call": "warn", - "no-useless-catch": "warn", - "no-useless-computed-key": "warn", - "no-useless-concat": "warn", - "no-useless-constructor": "warn", - "no-useless-escape": "warn", - "no-useless-rename": "warn", - "no-useless-return": "warn", - "no-var": "warn", - "no-void": "warn", - "no-warning-comments": "off", - "no-with": "warn", - "object-shorthand": [ - "warn", - "always", - { - "avoidExplicitReturnArrows": true - } - ], - "operator-assignment": "warn", - "prefer-arrow-callback": [ - "warn", - { - "allowNamedFunctions": true - } - ], - "prefer-const": [ - "warn", - { - "destructuring": "all" - } - ], - "prefer-destructuring": "off", - "prefer-exponentiation-operator": "warn", - "prefer-named-capture-group": "off", - "prefer-numeric-literals": "warn", - "prefer-object-has-own": "warn", - "prefer-object-spread": "warn", - "prefer-promise-reject-errors": "off", - "prefer-regex-literals": [ - "warn", - { - "disallowRedundantWrapping": true - } - ], - "prefer-rest-params": "warn", - "prefer-spread": "warn", - "prefer-template": "warn", - "preserve-caught-error": "warn", - "radix": "warn", - "require-await": "off", - "require-unicode-regexp": "off", - "require-yield": "warn", - "sort-keys": "off", - "sort-vars": "off", - "symbol-description": "warn", - "vars-on-top": "off", - "yoda": "off", - "unicode-bom": "warn", - "@eslint-react/error-boundaries": "warn", - "@eslint-react/exhaustive-deps": "warn", - "@eslint-react/globals": "warn", - "@eslint-react/immutability": "warn", - "@eslint-react/no-access-state-in-setstate": "warn", - "@eslint-react/no-array-index-key": "off", - "@eslint-react/no-children-count": "warn", - "@eslint-react/no-children-for-each": "warn", - "@eslint-react/no-children-map": "warn", - "@eslint-react/no-children-only": "warn", - "@eslint-react/no-children-to-array": "warn", - "@eslint-react/no-class-component": "warn", - "@eslint-react/no-clone-element": "warn", - "@eslint-react/no-component-will-mount": "warn", - "@eslint-react/no-component-will-receive-props": "warn", - "@eslint-react/no-component-will-update": "warn", - "@eslint-react/no-context-provider": "warn", - "@eslint-react/no-create-ref": "warn", - "@eslint-react/no-direct-mutation-state": "warn", - "@eslint-react/no-duplicate-key": "warn", - "@eslint-react/no-forward-ref": "warn", - "@eslint-react/no-implicit-children": "off", - "@eslint-react/no-implicit-key": "off", - "@eslint-react/no-implicit-ref": "off", - "@eslint-react/no-leaked-conditional-rendering": "off", - "@eslint-react/no-missing-component-display-name": "warn", - "@eslint-react/no-missing-context-display-name": "warn", - "@eslint-react/no-missing-key": "warn", - "@eslint-react/no-misused-capture-owner-stack": "warn", - "@eslint-react/no-nested-component-definitions": "warn", - "@eslint-react/no-nested-lazy-component-declarations": "warn", - "@eslint-react/no-set-state-in-component-did-mount": "warn", - "@eslint-react/no-set-state-in-component-did-update": "warn", - "@eslint-react/no-set-state-in-component-will-update": "warn", - "@eslint-react/no-unnecessary-use-prefix": "warn", - "@eslint-react/no-unsafe-component-will-mount": "warn", - "@eslint-react/no-unsafe-component-will-receive-props": "warn", - "@eslint-react/no-unsafe-component-will-update": "warn", - "@eslint-react/no-unstable-context-value": "warn", - "@eslint-react/no-unstable-default-props": "warn", - "@eslint-react/no-unused-class-component-members": "warn", - "@eslint-react/no-unused-props": "off", - "@eslint-react/no-unused-state": "warn", - "@eslint-react/no-use-context": "warn", - "@eslint-react/purity": "warn", - "@eslint-react/refs": "warn", - "@eslint-react/rules-of-hooks": "warn", - "@eslint-react/set-state-in-effect": "off", - "@eslint-react/set-state-in-render": "warn", - "@eslint-react/static-components": "warn", - "@eslint-react/unsupported-syntax": "warn", - "@eslint-react/use-memo": "warn", - "@eslint-react/use-state": "warn", - "@eslint-react/jsx-no-children-prop": "warn", - "@eslint-react/jsx-no-children-prop-with-children": "warn", - "@eslint-react/jsx-no-comment-textnodes": "warn", - "@eslint-react/jsx-no-key-after-spread": "warn", - "@eslint-react/jsx-no-leaked-dollar": "warn", - "@eslint-react/jsx-no-leaked-semicolon": "warn", - "@eslint-react/jsx-no-namespace": "warn", - "@eslint-react/jsx-no-useless-fragment": [ - "warn", - { - "allowExpressions": false - } - ], - "@eslint-react/rsc-function-definition": "warn", - "@eslint-react/dom-no-dangerously-set-innerhtml": "warn", - "@eslint-react/dom-no-dangerously-set-innerhtml-with-children": "warn", - "@eslint-react/dom-no-find-dom-node": "warn", - "@eslint-react/dom-no-flush-sync": "off", - "@eslint-react/dom-no-hydrate": "warn", - "@eslint-react/dom-no-missing-button-type": "warn", - "@eslint-react/dom-no-missing-iframe-sandbox": "warn", - "@eslint-react/dom-no-render": "warn", - "@eslint-react/dom-no-render-return-value": "warn", - "@eslint-react/dom-no-script-url": "warn", - "@eslint-react/dom-no-string-style-prop": "warn", - "@eslint-react/dom-no-unknown-property": "warn", - "@eslint-react/dom-no-unsafe-iframe-sandbox": "warn", - "@eslint-react/dom-no-unsafe-target-blank": "warn", - "@eslint-react/dom-no-use-form-state": "warn", - "@eslint-react/dom-no-void-elements-with-children": "warn", - "@eslint-react/web-api-no-leaked-event-listener": "warn", - "@eslint-react/web-api-no-leaked-fetch": "warn", - "@eslint-react/web-api-no-leaked-intersection-observer": "warn", - "@eslint-react/web-api-no-leaked-interval": "warn", - "@eslint-react/web-api-no-leaked-resize-observer": "warn", - "@eslint-react/web-api-no-leaked-timeout": "warn", - "@eslint-react/naming-convention-context-name": "warn", - "@eslint-react/naming-convention-id-name": "warn", - "@eslint-react/naming-convention-ref-name": "warn", - "react/rules-of-hooks": "warn", - "react/exhaustive-deps": "warn", - "typescript/consistent-return": "off", - "typescript/dot-notation": "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/class-literal-property-style": "off", - "typescript/consistent-generic-constructors": "warn", - "typescript/consistent-indexed-object-style": "warn", - "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/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, - "ignoreVoidReturningFunctions": 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-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-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/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", - { - "path": "never", - "types": "never", - "lib": "never" - } - ], - "typescript/unbound-method": "off", - "typescript/unified-signatures": "off", - "typescript/use-unknown-in-catch-callback-variable": "warn" - }, - "jsPlugins": ["@eslint-react/eslint-plugin"], - "plugins": ["typescript", "react"] - }, { "files": ["test/**/*"], + "rules": { "@eslint-react/no-create-ref": "off", "vitest/consistent-each-for": "warn", @@ -695,12 +700,11 @@ "vitest/valid-title": "warn", "vitest/warn-todo": "warn", "typescript/no-floating-promises": "warn" - }, - "jsPlugins": ["@eslint-react/eslint-plugin"], - "plugins": ["typescript", "vitest"] + } }, { "files": ["test/failOnConsole.ts"], + "rules": { "no-console": "off" } From 62c881d6b8a75c94efef8ea4a245c25d4772163c Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Sat, 22 Aug 2026 00:16:15 +0100 Subject: [PATCH 14/22] tweak rules --- .oxlintrc.json | 433 ++++++++++++++++++++++++------------------------- 1 file changed, 208 insertions(+), 225 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index 45a1aca3af..b47494e21d 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -33,303 +33,285 @@ "website/routeTree.gen.ts" ], + // https://oxc.rs/docs/guide/usage/linter/rules.html + /* +// copy all the rules from the rules table for easy pasting +copy( + Iterator.from( + document + // select all rule links + .querySelectorAll('table :any-link') + ) + // map link to rule declaration + .map((link) => { + const [group, rule] = link.pathname.split('/').slice(-2); + return `"${group}/${rule}": "warn",`; + }) + .toArray() + .sort() + .join('\n') +); + */ "rules": { - "array-callback-return": [ - "warn", - { - "checkForEach": true - } - ], - "constructor-super": "off", - "for-direction": "warn", - "getter-return": "warn", - "no-async-promise-executor": "warn", - "no-await-in-loop": "off", - "no-class-assign": "off", - "no-compare-neg-zero": "warn", - "no-cond-assign": "warn", - "no-const-assign": "off", - "no-constant-binary-expression": "warn", - "no-constant-condition": "warn", - "no-constructor-return": "warn", - "no-control-regex": "warn", - "no-debugger": "warn", - "no-dupe-class-members": "off", - "no-dupe-else-if": "warn", - "no-dupe-keys": "warn", - "no-duplicate-case": "warn", - "no-duplicate-imports": "off", - "no-empty-character-class": "warn", - "no-empty-pattern": "warn", - "no-ex-assign": "warn", - "no-fallthrough": [ - "warn", - { - "reportUnusedFallthroughComment": true - } - ], - "no-func-assign": "warn", - "no-import-assign": "warn", - "no-inner-declarations": "off", - "no-invalid-regexp": "warn", - "no-irregular-whitespace": "warn", - "no-loss-of-precision": "warn", - "no-misleading-character-class": "warn", - "no-new-native-nonconstructor": "warn", - "no-obj-calls": "warn", - "no-promise-executor-return": "warn", - "no-prototype-builtins": "warn", - "no-self-assign": [ - "warn", - { - "props": true - } - ], - "no-self-compare": "warn", - "no-setter-return": "warn", - "no-sparse-arrays": "warn", - "no-template-curly-in-string": "warn", - "no-this-before-super": "off", - "no-unassigned-vars": "warn", - "no-undef": "off", - "no-unexpected-multiline": "off", - "no-unmodified-loop-condition": "warn", - "no-unreachable": "warn", - "no-unreachable-loop": "warn", - "no-unsafe-finally": "warn", - "no-unsafe-negation": [ - "warn", - { - "enforceForOrderingRelations": true - } - ], - "no-unsafe-optional-chaining": [ - "warn", - { - "disallowArithmeticOperators": true - } - ], - "no-unused-private-class-members": "off", - "no-unused-vars": [ - "warn", - { - "enableAutofixRemoval": { - "imports": true - }, + "eslint/array-callback-return": ["warn", { "checkForEach": true }], + "eslint/constructor-super": "off", + "eslint/for-direction": "warn", + "eslint/getter-return": "warn", + "eslint/no-async-promise-executor": "warn", + "eslint/no-await-in-loop": "off", + "eslint/no-class-assign": "off", + "eslint/no-compare-neg-zero": "warn", + "eslint/no-cond-assign": "warn", + "eslint/no-const-assign": "off", + "eslint/no-constant-binary-expression": "warn", + "eslint/no-constant-condition": "warn", + "eslint/no-constructor-return": "warn", + "eslint/no-control-regex": "warn", + "eslint/no-debugger": "warn", + "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-empty-character-class": "warn", + "eslint/no-empty-pattern": "warn", + "eslint/no-ex-assign": "warn", + "eslint/no-fallthrough": ["warn", { "reportUnusedFallthroughComment": true }], + "eslint/no-func-assign": "warn", + "eslint/no-import-assign": "warn", + "eslint/no-inner-declarations": "off", + "eslint/no-invalid-regexp": "warn", + "eslint/no-irregular-whitespace": "warn", + "eslint/no-loss-of-precision": "warn", + "eslint/no-misleading-character-class": "warn", + "eslint/no-new-native-nonconstructor": "warn", + "eslint/no-obj-calls": "warn", + "eslint/no-promise-executor-return": "warn", + "eslint/no-prototype-builtins": "warn", + "eslint/no-self-assign": "warn", + "eslint/no-self-compare": "warn", + "eslint/no-setter-return": "warn", + "eslint/no-sparse-arrays": "warn", + "eslint/no-template-curly-in-string": "warn", + "eslint/no-this-before-super": "off", + "eslint/no-unassigned-vars": "warn", + "eslint/no-undef": "off", + "eslint/no-unexpected-multiline": "off", + "eslint/no-unmodified-loop-condition": "warn", + "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-private-class-members": "off", + "eslint/no-unused-vars": [ + "warn", + { + "fix": { "imports": "safe-fix" }, "ignoreRestSiblings": true } ], - "no-use-before-define": "off", - "no-useless-backreference": "warn", - "use-isnan": [ - "warn", - { - "enforceForIndexOf": true - } - ], - "valid-typeof": [ - "warn", - { - "requireStringLiterals": true - } - ], - "accessor-pairs": "warn", - "arrow-body-style": "off", - "block-scoped-var": "warn", - "capitalized-comments": "off", - "class-methods-use-this": "warn", - "complexity": "off", - "curly": "off", - "default-case": "warn", - "default-case-last": "warn", - "default-param-last": "off", - "eqeqeq": [ + "eslint/no-use-before-define": "off", + "eslint/no-useless-backreference": "warn", + "eslint/use-isnan": ["warn", { "enforceForIndexOf": true }], + "eslint/valid-typeof": ["warn", { "requireStringLiterals": true }], + "eslint/accessor-pairs": "warn", + "eslint/arrow-body-style": "off", + "eslint/block-scoped-var": "warn", + "eslint/capitalized-comments": "off", + "eslint/class-methods-use-this": "warn", + "eslint/complexity": "off", + "eslint/curly": "off", + "eslint/default-case": "warn", + "eslint/default-case-last": "warn", + "eslint/default-param-last": "off", + "eslint/eqeqeq": [ "warn", "always", { "null": "ignore" } ], - "func-name-matching": "off", - "func-names": "off", - "func-style": "off", - "grouped-accessor-pairs": ["warn", "getBeforeSet"], - "guard-for-in": "off", - "id-denylist": "off", - "id-length": "off", - "id-match": "off", - "init-declarations": "off", - "logical-assignment-operators": [ + "eslint/func-name-matching": "off", + "eslint/func-names": "off", + "eslint/func-style": "off", + "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 } ], - "max-classes-per-file": "off", - "max-depth": "off", - "max-lines": "off", - "max-lines-per-function": "off", - "max-nested-callbacks": "off", - "max-params": "off", - "max-statements": "off", - "new-cap": "off", - "no-alert": "off", - "no-array-constructor": "warn", - "no-bitwise": "off", - "no-caller": "warn", - "no-case-declarations": "warn", - "no-console": "warn", - "no-continue": "off", - "no-delete-var": "warn", - "no-div-regex": "off", - "no-else-return": [ + "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-bitwise": "off", + "eslint/no-caller": "warn", + "eslint/no-case-declarations": "warn", + "eslint/no-console": "warn", + "eslint/no-continue": "off", + "eslint/no-delete-var": "warn", + "eslint/no-div-regex": "off", + "eslint/no-else-return": [ "warn", { "allowElseIf": false } ], - "no-empty": [ + "eslint/no-empty": [ "warn", { "allowEmptyCatch": true } ], - "no-empty-function": "off", - "no-empty-static-block": "warn", - "no-eq-null": "off", - "no-eval": "warn", - "no-extend-native": "warn", - "no-extra-bind": "warn", - "no-extra-boolean-cast": [ + "eslint/no-empty-function": "off", + "eslint/no-empty-static-block": "warn", + "eslint/no-eq-null": "off", + "eslint/no-eval": "warn", + "eslint/no-extend-native": "warn", + "eslint/no-extra-bind": "warn", + "eslint/no-extra-boolean-cast": [ "warn", { "enforceForLogicalOperands": true } ], - "no-extra-label": "warn", - "no-global-assign": "warn", - "no-implicit-coercion": "off", - "no-implicit-globals": "off", - "no-implied-eval": "off", - "no-inline-comments": "off", - "no-iterator": "warn", - "no-label-var": "warn", - "no-labels": "warn", - "no-lone-blocks": "warn", - "no-lonely-if": "warn", - "no-loop-func": "off", - "no-magic-numbers": "off", - "no-multi-assign": "off", - "no-multi-str": "warn", - "no-negated-condition": "off", - "no-nested-ternary": "off", - "no-new": "warn", - "no-new-func": "warn", - "no-new-wrappers": "warn", - "no-nonoctal-decimal-escape": "warn", - "no-object-constructor": "warn", - "no-param-reassign": "off", - "no-plusplus": "off", - "no-proto": "warn", - "no-redeclare": "warn", - "no-regex-spaces": "warn", - "no-restricted-exports": "off", - "no-restricted-globals": [ + "eslint/no-extra-label": "warn", + "eslint/no-global-assign": "warn", + "eslint/no-implicit-coercion": "off", + "eslint/no-implicit-globals": "off", + "eslint/no-implied-eval": "off", + "eslint/no-inline-comments": "off", + "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-magic-numbers": "off", + "eslint/no-multi-assign": "off", + "eslint/no-multi-str": "warn", + "eslint/no-negated-condition": "off", + "eslint/no-nested-ternary": "off", + "eslint/no-new": "warn", + "eslint/no-new-func": "warn", + "eslint/no-new-wrappers": "warn", + "eslint/no-nonoctal-decimal-escape": "warn", + "eslint/no-object-constructor": "warn", + "eslint/no-param-reassign": "off", + "eslint/no-plusplus": "off", + "eslint/no-proto": "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." } ], - "no-restricted-imports": "off", - "no-restricted-properties": "off", - "no-return-assign": "off", - "no-script-url": "warn", - "no-sequences": [ + "eslint/no-restricted-imports": "off", + "eslint/no-restricted-properties": "off", + "eslint/no-return-assign": "off", + "eslint/no-script-url": "warn", + "eslint/no-sequences": [ "warn", { "allowInParentheses": false } ], - "no-shadow": "off", - "no-shadow-restricted-names": "warn", - "no-ternary": "off", - "no-throw-literal": "off", - "no-undefined": "off", - "no-underscore-dangle": "off", - "no-unneeded-ternary": [ + "eslint/no-shadow": "off", + "eslint/no-shadow-restricted-names": "warn", + "eslint/no-ternary": "off", + "eslint/no-throw-literal": "off", + "eslint/no-undefined": "off", + "eslint/no-underscore-dangle": "off", + "eslint/no-unneeded-ternary": [ "warn", { "defaultAssignment": false } ], - "no-unused-expressions": [ + "eslint/no-unused-expressions": [ "warn", { "enforceForJSX": true } ], - "no-unused-labels": "warn", - "no-useless-call": "warn", - "no-useless-catch": "warn", - "no-useless-computed-key": "warn", - "no-useless-concat": "warn", - "no-useless-constructor": "warn", - "no-useless-escape": "warn", - "no-useless-rename": "warn", - "no-useless-return": "warn", - "no-var": "warn", - "no-void": "warn", - "no-warning-comments": "off", - "no-with": "warn", - "object-shorthand": [ + "eslint/no-unused-labels": "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 } ], - "operator-assignment": "warn", - "prefer-arrow-callback": [ + "eslint/operator-assignment": "warn", + "eslint/prefer-arrow-callback": [ "warn", { "allowNamedFunctions": true } ], - "prefer-const": [ + "eslint/prefer-const": [ "warn", { "destructuring": "all" } ], - "prefer-destructuring": "off", - "prefer-exponentiation-operator": "warn", - "prefer-named-capture-group": "off", - "prefer-numeric-literals": "warn", - "prefer-object-has-own": "warn", - "prefer-object-spread": "warn", - "prefer-promise-reject-errors": "off", - "prefer-regex-literals": [ + "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 } ], - "prefer-rest-params": "warn", - "prefer-spread": "warn", - "prefer-template": "warn", - "preserve-caught-error": "warn", - "radix": "warn", - "require-await": "off", - "require-unicode-regexp": "off", - "require-yield": "warn", - "sort-keys": "off", - "sort-vars": "off", - "symbol-description": "warn", - "vars-on-top": "off", - "yoda": "off", - "unicode-bom": "warn", + "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-keys": "off", + "eslint/sort-vars": "off", + "eslint/symbol-description": "warn", + "eslint/vars-on-top": "off", + "eslint/yoda": "off", + "eslint/unicode-bom": "warn", "@eslint-react/error-boundaries": "warn", "@eslint-react/exhaustive-deps": "warn", "@eslint-react/globals": "warn", @@ -702,11 +684,12 @@ "typescript/no-floating-promises": "warn" } }, + { "files": ["test/failOnConsole.ts"], "rules": { - "no-console": "off" + "eslint/no-console": "off" } } ] From ce897f5bcb533c211ca33f6edac84a14ff8d4dbc Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Sat, 22 Aug 2026 00:17:20 +0100 Subject: [PATCH 15/22] fix CLAUDE.md --- CLAUDE.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 120000 => 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 120000 index 43c994c2d3..0000000000 --- a/CLAUDE.md +++ /dev/null @@ -1 +0,0 @@ -@AGENTS.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000000..43c994c2d3 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +@AGENTS.md From eb84db9188a9381d63090c2d89f3ad92092ed4d4 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Sat, 22 Aug 2026 01:01:19 +0100 Subject: [PATCH 16/22] sort rules --- .oxlintrc.json | 481 +++++++++++++++++++------------------------------ 1 file changed, 190 insertions(+), 291 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index b47494e21d..9708fe205c 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -36,223 +36,171 @@ // 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']); copy( - Iterator.from( - document - // select all rule links - .querySelectorAll('table :any-link') - ) - // map link to rule declaration - .map((link) => { - const [group, rule] = link.pathname.split('/').slice(-2); - return `"${group}/${rule}": "warn",`; - }) + Iterator.from(document.querySelectorAll('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/array-callback-return": ["warn", { "checkForEach": true }], - "eslint/constructor-super": "off", - "eslint/for-direction": "warn", - "eslint/getter-return": "warn", - "eslint/no-async-promise-executor": "warn", - "eslint/no-await-in-loop": "off", - "eslint/no-class-assign": "off", - "eslint/no-compare-neg-zero": "warn", - "eslint/no-cond-assign": "warn", - "eslint/no-const-assign": "off", - "eslint/no-constant-binary-expression": "warn", - "eslint/no-constant-condition": "warn", - "eslint/no-constructor-return": "warn", - "eslint/no-control-regex": "warn", - "eslint/no-debugger": "warn", - "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-empty-character-class": "warn", - "eslint/no-empty-pattern": "warn", - "eslint/no-ex-assign": "warn", - "eslint/no-fallthrough": ["warn", { "reportUnusedFallthroughComment": true }], - "eslint/no-func-assign": "warn", - "eslint/no-import-assign": "warn", - "eslint/no-inner-declarations": "off", - "eslint/no-invalid-regexp": "warn", - "eslint/no-irregular-whitespace": "warn", - "eslint/no-loss-of-precision": "warn", - "eslint/no-misleading-character-class": "warn", - "eslint/no-new-native-nonconstructor": "warn", - "eslint/no-obj-calls": "warn", - "eslint/no-promise-executor-return": "warn", - "eslint/no-prototype-builtins": "warn", - "eslint/no-self-assign": "warn", - "eslint/no-self-compare": "warn", - "eslint/no-setter-return": "warn", - "eslint/no-sparse-arrays": "warn", - "eslint/no-template-curly-in-string": "warn", - "eslint/no-this-before-super": "off", - "eslint/no-unassigned-vars": "warn", - "eslint/no-undef": "off", - "eslint/no-unexpected-multiline": "off", - "eslint/no-unmodified-loop-condition": "warn", - "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-private-class-members": "off", - "eslint/no-unused-vars": [ - "warn", - { - "fix": { "imports": "safe-fix" }, - "ignoreRestSiblings": true - } - ], - "eslint/no-use-before-define": "off", - "eslint/no-useless-backreference": "warn", - "eslint/use-isnan": ["warn", { "enforceForIndexOf": true }], - "eslint/valid-typeof": ["warn", { "requireStringLiterals": true }], "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-case": "warn", "eslint/default-param-last": "off", - "eslint/eqeqeq": [ - "warn", - "always", - { - "null": "ignore" - } - ], + "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/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-lines": "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-else-return": [ - "warn", - { - "allowElseIf": false - } - ], - "eslint/no-empty": [ - "warn", - { - "allowEmptyCatch": true - } - ], + "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-character-class": "warn", "eslint/no-empty-function": "off", + "eslint/no-empty-pattern": "warn", "eslint/no-empty-static-block": "warn", + "eslint/no-empty": ["warn", { "allowEmptyCatch": true }], "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-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": "off", "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-new": "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." - } + { "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-sequences": [ - "warn", - { - "allowInParentheses": false - } - ], - "eslint/no-shadow": "off", + "eslint/no-self-assign": "warn", + "eslint/no-self-compare": "warn", + "eslint/no-sequences": ["warn", { "allowInParentheses": false }], + "eslint/no-setter-return": "warn", "eslint/no-shadow-restricted-names": "warn", + "eslint/no-shadow": "off", + "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-unneeded-ternary": [ - "warn", - { - "defaultAssignment": false - } - ], - "eslint/no-unused-expressions": [ + "eslint/no-unexpected-multiline": "off", + "eslint/no-unmodified-loop-condition": "warn", + "eslint/no-unneeded-ternary": ["warn", { "defaultAssignment": false }], + "eslint/no-unreachable-loop": "warn", + "eslint/no-unreachable": "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", - { - "enforceForJSX": true - } + { "fix": { "imports": "safe-fix" }, "ignoreRestSiblings": true } ], - "eslint/no-unused-labels": "warn", + "eslint/no-use-before-define": "off", + "eslint/no-useless-backreference": "warn", "eslint/no-useless-call": "warn", "eslint/no-useless-catch": "warn", "eslint/no-useless-computed-key": "warn", @@ -265,26 +213,10 @@ copy( "eslint/no-void": "warn", "eslint/no-warning-comments": "off", "eslint/no-with": "warn", - "eslint/object-shorthand": [ - "warn", - "always", - { - "avoidExplicitReturnArrows": true - } - ], + "eslint/object-shorthand": ["warn", "always", { "avoidExplicitReturnArrows": true }], "eslint/operator-assignment": "warn", - "eslint/prefer-arrow-callback": [ - "warn", - { - "allowNamedFunctions": true - } - ], - "eslint/prefer-const": [ - "warn", - { - "destructuring": "all" - } - ], + "eslint/prefer-arrow-callback": ["warn", { "allowNamedFunctions": true }], + "eslint/prefer-const": ["warn", { "destructuring": "all" }], "eslint/prefer-destructuring": "off", "eslint/prefer-exponentiation-operator": "warn", "eslint/prefer-named-capture-group": "off", @@ -292,12 +224,7 @@ copy( "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-regex-literals": ["warn", { "disallowRedundantWrapping": true }], "eslint/prefer-rest-params": "warn", "eslint/prefer-spread": "warn", "eslint/prefer-template": "warn", @@ -309,118 +236,22 @@ copy( "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", - "eslint/unicode-bom": "warn", - "@eslint-react/error-boundaries": "warn", - "@eslint-react/exhaustive-deps": "warn", - "@eslint-react/globals": "warn", - "@eslint-react/immutability": "warn", - "@eslint-react/no-access-state-in-setstate": "warn", - "@eslint-react/no-array-index-key": "off", - "@eslint-react/no-children-count": "warn", - "@eslint-react/no-children-for-each": "warn", - "@eslint-react/no-children-map": "warn", - "@eslint-react/no-children-only": "warn", - "@eslint-react/no-children-to-array": "warn", - "@eslint-react/no-class-component": "warn", - "@eslint-react/no-clone-element": "warn", - "@eslint-react/no-component-will-mount": "warn", - "@eslint-react/no-component-will-receive-props": "warn", - "@eslint-react/no-component-will-update": "warn", - "@eslint-react/no-context-provider": "warn", - "@eslint-react/no-create-ref": "warn", - "@eslint-react/no-direct-mutation-state": "warn", - "@eslint-react/no-duplicate-key": "warn", - "@eslint-react/no-forward-ref": "warn", - "@eslint-react/no-implicit-children": "off", - "@eslint-react/no-implicit-key": "off", - "@eslint-react/no-implicit-ref": "off", - "@eslint-react/no-leaked-conditional-rendering": "off", - "@eslint-react/no-missing-component-display-name": "warn", - "@eslint-react/no-missing-context-display-name": "warn", - "@eslint-react/no-missing-key": "warn", - "@eslint-react/no-misused-capture-owner-stack": "warn", - "@eslint-react/no-nested-component-definitions": "warn", - "@eslint-react/no-nested-lazy-component-declarations": "warn", - "@eslint-react/no-set-state-in-component-did-mount": "warn", - "@eslint-react/no-set-state-in-component-did-update": "warn", - "@eslint-react/no-set-state-in-component-will-update": "warn", - "@eslint-react/no-unnecessary-use-prefix": "warn", - "@eslint-react/no-unsafe-component-will-mount": "warn", - "@eslint-react/no-unsafe-component-will-receive-props": "warn", - "@eslint-react/no-unsafe-component-will-update": "warn", - "@eslint-react/no-unstable-context-value": "warn", - "@eslint-react/no-unstable-default-props": "warn", - "@eslint-react/no-unused-class-component-members": "warn", - "@eslint-react/no-unused-props": "off", - "@eslint-react/no-unused-state": "warn", - "@eslint-react/no-use-context": "warn", - "@eslint-react/purity": "warn", - "@eslint-react/refs": "warn", - "@eslint-react/rules-of-hooks": "warn", - "@eslint-react/set-state-in-effect": "off", - "@eslint-react/set-state-in-render": "warn", - "@eslint-react/static-components": "warn", - "@eslint-react/unsupported-syntax": "warn", - "@eslint-react/use-memo": "warn", - "@eslint-react/use-state": "warn", - "@eslint-react/jsx-no-children-prop": "warn", - "@eslint-react/jsx-no-children-prop-with-children": "warn", - "@eslint-react/jsx-no-comment-textnodes": "warn", - "@eslint-react/jsx-no-key-after-spread": "warn", - "@eslint-react/jsx-no-leaked-dollar": "warn", - "@eslint-react/jsx-no-leaked-semicolon": "warn", - "@eslint-react/jsx-no-namespace": "warn", - "@eslint-react/jsx-no-useless-fragment": [ - "warn", - { - "allowExpressions": false - } - ], - "@eslint-react/rsc-function-definition": "warn", - "@eslint-react/dom-no-dangerously-set-innerhtml": "warn", - "@eslint-react/dom-no-dangerously-set-innerhtml-with-children": "warn", - "@eslint-react/dom-no-find-dom-node": "warn", - "@eslint-react/dom-no-flush-sync": "off", - "@eslint-react/dom-no-hydrate": "warn", - "@eslint-react/dom-no-missing-button-type": "warn", - "@eslint-react/dom-no-missing-iframe-sandbox": "warn", - "@eslint-react/dom-no-render": "warn", - "@eslint-react/dom-no-render-return-value": "warn", - "@eslint-react/dom-no-script-url": "warn", - "@eslint-react/dom-no-string-style-prop": "warn", - "@eslint-react/dom-no-unknown-property": "warn", - "@eslint-react/dom-no-unsafe-iframe-sandbox": "warn", - "@eslint-react/dom-no-unsafe-target-blank": "warn", - "@eslint-react/dom-no-use-form-state": "warn", - "@eslint-react/dom-no-void-elements-with-children": "warn", - "@eslint-react/web-api-no-leaked-event-listener": "warn", - "@eslint-react/web-api-no-leaked-fetch": "warn", - "@eslint-react/web-api-no-leaked-intersection-observer": "warn", - "@eslint-react/web-api-no-leaked-interval": "warn", - "@eslint-react/web-api-no-leaked-resize-observer": "warn", - "@eslint-react/web-api-no-leaked-timeout": "warn", - "@eslint-react/naming-convention-context-name": "warn", - "@eslint-react/naming-convention-id-name": "warn", - "@eslint-react/naming-convention-ref-name": "warn", - "react/rules-of-hooks": "warn", "react/exhaustive-deps": "warn", - "typescript/consistent-return": "off", - "typescript/dot-notation": "warn", + "react/rules-of-hooks": "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-ts-comment": ["warn", { "ts-expect-error": false }], "typescript/ban-tslint-comment": "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", { @@ -431,16 +262,10 @@ copy( "typescript/consistent-type-definitions": "warn", "typescript/consistent-type-exports": [ "warn", - { - "fixMixedExportsWithInlineTypeSpecifier": true - } - ], - "typescript/consistent-type-imports": [ - "warn", - { - "fixStyle": "inline-type-imports" - } + { "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", @@ -450,22 +275,14 @@ copy( "typescript/no-confusing-non-null-assertion": "off", "typescript/no-confusing-void-expression": [ "warn", - { - "ignoreArrowShorthand": true, - "ignoreVoidReturningFunctions": true - } + { "ignoreArrowShorthand": true, "ignoreVoidReturningFunctions": 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-object-type": "warn", - "typescript/no-explicit-any": [ - "warn", - { - "fixToUnknown": true - } - ], + "typescript/no-explicit-any": ["warn", { "fixToUnknown": true }], "typescript/no-extra-non-null-assertion": "warn", "typescript/no-extraneous-class": "warn", "typescript/no-floating-promises": "off", @@ -490,10 +307,7 @@ copy( "typescript/no-unnecessary-boolean-literal-compare": "warn", "typescript/no-unnecessary-condition": [ "warn", - { - "allowConstantLoopConditions": "only-allowed-literals", - "checkTypePredicates": true - } + { "allowConstantLoopConditions": "only-allowed-literals", "checkTypePredicates": true } ], "typescript/no-unnecessary-parameter-property-assignment": "warn", "typescript/no-unnecessary-qualifier": "off", @@ -540,19 +354,17 @@ copy( "typescript/prefer-namespace-keyword": "warn", "typescript/prefer-nullish-coalescing": [ "warn", - { - "ignoreConditionalTests": false, - "ignorePrimitives": true - } + { "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-readonly": "warn", "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", @@ -574,15 +386,103 @@ copy( "typescript/switch-exhaustiveness-check": "warn", "typescript/triple-slash-reference": [ "warn", - { - "path": "never", - "types": "never", - "lib": "never" - } + { "path": "never", "types": "never", "lib": "never" } ], "typescript/unbound-method": "off", "typescript/unified-signatures": "off", - "typescript/use-unknown-in-catch-callback-variable": "warn" + "typescript/use-unknown-in-catch-callback-variable": "warn", + "@eslint-react/error-boundaries": "warn", + "@eslint-react/exhaustive-deps": "warn", + "@eslint-react/globals": "warn", + "@eslint-react/immutability": "warn", + "@eslint-react/no-access-state-in-setstate": "warn", + "@eslint-react/no-array-index-key": "off", + "@eslint-react/no-children-count": "warn", + "@eslint-react/no-children-for-each": "warn", + "@eslint-react/no-children-map": "warn", + "@eslint-react/no-children-only": "warn", + "@eslint-react/no-children-to-array": "warn", + "@eslint-react/no-class-component": "warn", + "@eslint-react/no-clone-element": "warn", + "@eslint-react/no-component-will-mount": "warn", + "@eslint-react/no-component-will-receive-props": "warn", + "@eslint-react/no-component-will-update": "warn", + "@eslint-react/no-context-provider": "warn", + "@eslint-react/no-create-ref": "warn", + "@eslint-react/no-direct-mutation-state": "warn", + "@eslint-react/no-duplicate-key": "warn", + "@eslint-react/no-forward-ref": "warn", + "@eslint-react/no-implicit-children": "off", + "@eslint-react/no-implicit-key": "off", + "@eslint-react/no-implicit-ref": "off", + "@eslint-react/no-leaked-conditional-rendering": "off", + "@eslint-react/no-missing-component-display-name": "warn", + "@eslint-react/no-missing-context-display-name": "warn", + "@eslint-react/no-missing-key": "warn", + "@eslint-react/no-misused-capture-owner-stack": "warn", + "@eslint-react/no-nested-component-definitions": "warn", + "@eslint-react/no-nested-lazy-component-declarations": "warn", + "@eslint-react/no-set-state-in-component-did-mount": "warn", + "@eslint-react/no-set-state-in-component-did-update": "warn", + "@eslint-react/no-set-state-in-component-will-update": "warn", + "@eslint-react/no-unnecessary-use-prefix": "warn", + "@eslint-react/no-unsafe-component-will-mount": "warn", + "@eslint-react/no-unsafe-component-will-receive-props": "warn", + "@eslint-react/no-unsafe-component-will-update": "warn", + "@eslint-react/no-unstable-context-value": "warn", + "@eslint-react/no-unstable-default-props": "warn", + "@eslint-react/no-unused-class-component-members": "warn", + "@eslint-react/no-unused-props": "off", + "@eslint-react/no-unused-state": "warn", + "@eslint-react/no-use-context": "warn", + "@eslint-react/purity": "warn", + "@eslint-react/refs": "warn", + "@eslint-react/rules-of-hooks": "warn", + "@eslint-react/set-state-in-effect": "off", + "@eslint-react/set-state-in-render": "warn", + "@eslint-react/static-components": "warn", + "@eslint-react/unsupported-syntax": "warn", + "@eslint-react/use-memo": "warn", + "@eslint-react/use-state": "warn", + "@eslint-react/jsx-no-children-prop": "warn", + "@eslint-react/jsx-no-children-prop-with-children": "warn", + "@eslint-react/jsx-no-comment-textnodes": "warn", + "@eslint-react/jsx-no-key-after-spread": "warn", + "@eslint-react/jsx-no-leaked-dollar": "warn", + "@eslint-react/jsx-no-leaked-semicolon": "warn", + "@eslint-react/jsx-no-namespace": "warn", + "@eslint-react/jsx-no-useless-fragment": [ + "warn", + { + "allowExpressions": false + } + ], + "@eslint-react/rsc-function-definition": "warn", + "@eslint-react/dom-no-dangerously-set-innerhtml": "warn", + "@eslint-react/dom-no-dangerously-set-innerhtml-with-children": "warn", + "@eslint-react/dom-no-find-dom-node": "warn", + "@eslint-react/dom-no-flush-sync": "off", + "@eslint-react/dom-no-hydrate": "warn", + "@eslint-react/dom-no-missing-button-type": "warn", + "@eslint-react/dom-no-missing-iframe-sandbox": "warn", + "@eslint-react/dom-no-render": "warn", + "@eslint-react/dom-no-render-return-value": "warn", + "@eslint-react/dom-no-script-url": "warn", + "@eslint-react/dom-no-string-style-prop": "warn", + "@eslint-react/dom-no-unknown-property": "warn", + "@eslint-react/dom-no-unsafe-iframe-sandbox": "warn", + "@eslint-react/dom-no-unsafe-target-blank": "warn", + "@eslint-react/dom-no-use-form-state": "warn", + "@eslint-react/dom-no-void-elements-with-children": "warn", + "@eslint-react/web-api-no-leaked-event-listener": "warn", + "@eslint-react/web-api-no-leaked-fetch": "warn", + "@eslint-react/web-api-no-leaked-intersection-observer": "warn", + "@eslint-react/web-api-no-leaked-interval": "warn", + "@eslint-react/web-api-no-leaked-resize-observer": "warn", + "@eslint-react/web-api-no-leaked-timeout": "warn", + "@eslint-react/naming-convention-context-name": "warn", + "@eslint-react/naming-convention-id-name": "warn", + "@eslint-react/naming-convention-ref-name": "warn" }, "overrides": [ @@ -590,7 +490,6 @@ copy( "files": ["test/**/*"], "rules": { - "@eslint-react/no-create-ref": "off", "vitest/consistent-each-for": "warn", "vitest/consistent-test-filename": "off", "vitest/consistent-test-it": "warn", From 6420b4566602e856ba56ea75d212e0e06c2e1f61 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Sat, 22 Aug 2026 02:29:03 +0100 Subject: [PATCH 17/22] review --- .oxlintrc.json | 55 +++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index 9708fe205c..1159c0965f 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -36,12 +36,12 @@ // 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']); +const groups = new Set(['eslint', 'oxc', 'react', 'typescript', 'vitest']); copy( - Iterator.from(document.querySelectorAll('tr')) + Iterator.from(document.querySelectorAll('tbody tr')) .map((row) => [ row.children[1].textContent, - row.querySelector(':any-link').textContent, + row.querySelector(':any-link').textContent ]) .filter(([group]) => groups.has(group)) .map(([group, rule]) => `"${group}/${rule}": "warn",`) @@ -60,8 +60,8 @@ copy( "eslint/complexity": "off", "eslint/constructor-super": "off", "eslint/curly": "off", - "eslint/default-case-last": "warn", "eslint/default-case": "warn", + "eslint/default-case-last": "warn", "eslint/default-param-last": "off", "eslint/eqeqeq": ["warn", "always", { "null": "ignore" }], "eslint/for-direction": "warn", @@ -78,8 +78,8 @@ copy( "eslint/logical-assignment-operators": ["warn", "always", { "enforceForIfStatements": true }], "eslint/max-classes-per-file": "off", "eslint/max-depth": "off", - "eslint/max-lines-per-function": "off", "eslint/max-lines": "off", + "eslint/max-lines-per-function": "off", "eslint/max-nested-callbacks": "off", "eslint/max-params": "off", "eslint/max-statements": "off", @@ -110,11 +110,11 @@ copy( "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-empty": ["warn", { "allowEmptyCatch": true }], "eslint/no-eq-null": "off", "eslint/no-eval": "warn", "eslint/no-ex-assign": "warn", @@ -146,10 +146,10 @@ copy( "eslint/no-multi-str": "warn", "eslint/no-negated-condition": "off", "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-new": "warn", "eslint/no-nonoctal-decimal-escape": "warn", "eslint/no-obj-calls": "warn", "eslint/no-object-constructor": "warn", @@ -173,8 +173,8 @@ copy( "eslint/no-self-compare": "warn", "eslint/no-sequences": ["warn", { "allowInParentheses": false }], "eslint/no-setter-return": "warn", - "eslint/no-shadow-restricted-names": "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", @@ -187,8 +187,8 @@ copy( "eslint/no-unexpected-multiline": "off", "eslint/no-unmodified-loop-condition": "warn", "eslint/no-unneeded-ternary": ["warn", { "defaultAssignment": false }], - "eslint/no-unreachable-loop": "warn", "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 }], @@ -200,6 +200,7 @@ copy( { "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", @@ -214,8 +215,9 @@ copy( "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", { "allowNamedFunctions": true }], + "eslint/prefer-arrow-callback": "warn", "eslint/prefer-const": ["warn", { "destructuring": "all" }], "eslint/prefer-destructuring": "off", "eslint/prefer-exponentiation-operator": "warn", @@ -233,6 +235,7 @@ copy( "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", @@ -248,6 +251,7 @@ copy( "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", @@ -273,14 +277,12 @@ copy( "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, "ignoreVoidReturningFunctions": true } - ], + "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", @@ -307,7 +309,10 @@ copy( "typescript/no-unnecessary-boolean-literal-compare": "warn", "typescript/no-unnecessary-condition": [ "warn", - { "allowConstantLoopConditions": "only-allowed-literals", "checkTypePredicates": true } + { + "allowConstantLoopConditions": "only-allowed-literals", + "checkTypePredicates": true + } ], "typescript/no-unnecessary-parameter-property-assignment": "warn", "typescript/no-unnecessary-qualifier": "off", @@ -329,6 +334,7 @@ copy( "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": [ @@ -354,12 +360,15 @@ copy( "typescript/prefer-namespace-keyword": "warn", "typescript/prefer-nullish-coalescing": [ "warn", - { "ignoreConditionalTests": false, "ignorePrimitives": true } + { + "ignoreConditionalTests": false, + "ignorePrimitives": true + } ], "typescript/prefer-optional-chain": "warn", "typescript/prefer-promise-reject-errors": "warn", - "typescript/prefer-readonly-parameter-types": "off", "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", @@ -384,10 +393,7 @@ copy( "typescript/strict-boolean-expressions": "off", "typescript/strict-void-return": "off", "typescript/switch-exhaustiveness-check": "warn", - "typescript/triple-slash-reference": [ - "warn", - { "path": "never", "types": "never", "lib": "never" } - ], + "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", @@ -571,12 +577,7 @@ copy( "vitest/require-to-throw-message": "warn", "vitest/require-top-level-describe": "off", "vitest/valid-describe-callback": "warn", - "vitest/valid-expect": [ - "warn", - { - "alwaysAwait": true - } - ], + "vitest/valid-expect": "warn", "vitest/valid-expect-in-promise": "warn", "vitest/valid-title": "warn", "vitest/warn-todo": "warn", From 46619a1ad0e553980d72fb7caaf394f6b9e7373f Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Sat, 22 Aug 2026 02:39:47 +0100 Subject: [PATCH 18/22] use default categories settings --- .oxlintrc.json | 6 +----- src/DataGrid.tsx | 1 + src/GroupRow.tsx | 4 +--- test/browser/rowSelection.test.tsx | 2 -- 4 files changed, 3 insertions(+), 10 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index 1159c0965f..07a7281157 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -5,10 +5,6 @@ "jsPlugins": ["@eslint-react/eslint-plugin"], - "categories": { - "correctness": "off" - }, - "options": { "denyWarnings": true, "reportUnusedDisableDirectives": "warn", @@ -400,7 +396,7 @@ copy( "@eslint-react/error-boundaries": "warn", "@eslint-react/exhaustive-deps": "warn", "@eslint-react/globals": "warn", - "@eslint-react/immutability": "warn", + "@eslint-react/immutability": "off", "@eslint-react/no-access-state-in-setstate": "warn", "@eslint-react/no-array-index-key": "off", "@eslint-react/no-children-count": "warn", diff --git a/src/DataGrid.tsx b/src/DataGrid.tsx index 877bee1e66..15d64d1653 100644 --- a/src/DataGrid.tsx +++ b/src/DataGrid.tsx @@ -507,6 +507,7 @@ export function DataGrid(props: DataGridPr const selectHeaderRowLatest = useLatestFunc(selectHeaderRow); const selectRowLatest = useLatestFunc(selectRow); const handleFormatterRowChangeLatest = useLatestFunc(updateRow); + // oxlint-disable-next-line react/immutability const setPositionLatest = useLatestFunc(setPosition); const selectHeaderCellLatest = useLatestFunc(selectHeaderCell); diff --git a/src/GroupRow.tsx b/src/GroupRow.tsx index 7d7fad70fc..cb92d1cf9c 100644 --- a/src/GroupRow.tsx +++ b/src/GroupRow.tsx @@ -82,7 +82,7 @@ function GroupedRow({ .map(([column, isCellActive], index) => { // Select is always the first column if (index === 0 && column.key === SELECT_COLUMN_KEY) { - // oxlint-disable-next-line @eslint-react/immutability + // oxlint-disable-next-line react/immutability idx += 1; } @@ -93,9 +93,7 @@ function GroupedRow({ groupKey={row.groupKey} childRows={row.childRows} isExpanded={row.isExpanded} - // oxlint-disable-next-line @eslint-react/immutability isCellActive={isCellActive} - // oxlint-disable-next-line @eslint-react/immutability column={column} row={row} groupColumnIndex={idx} diff --git a/test/browser/rowSelection.test.tsx b/test/browser/rowSelection.test.tsx index 25c09cb637..8f5d885071 100644 --- a/test/browser/rowSelection.test.tsx +++ b/test/browser/rowSelection.test.tsx @@ -202,7 +202,6 @@ test('extra keys are preserved when updating the selectedRows Set', async () => function onSelectedRowsChange(selectedRows: Set) { setSelectedRows(selectedRows); - // oxlint-disable-next-line @eslint-react/immutability set = selectedRows; } @@ -212,7 +211,6 @@ test('extra keys are preserved when updating the selectedRows Set', async () => columns={columns} rows={defaultRows} selectedRows={selectedRows} - // oxlint-disable-next-line @eslint-react/immutability onSelectedRowsChange={onSelectedRowsChange} /> ); From a4f0940cf72f8f1126806a1dd24ddd5c396e9e74 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Sat, 22 Aug 2026 02:43:50 +0100 Subject: [PATCH 19/22] npm dedupe --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 124284a5b7..48c3317421 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2301,9 +2301,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "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": { @@ -5051,9 +5051,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", - "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "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": { From 42dca4efe6317e8bb350655951d6b051d7d68cff Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Sat, 22 Aug 2026 02:46:18 +0100 Subject: [PATCH 20/22] npm audit fix --- package-lock.json | 221 +++++++++++++++++++++++----------------------- 1 file changed, 112 insertions(+), 109 deletions(-) diff --git a/package-lock.json b/package-lock.json index 48c3317421..c5550eaaa8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,13 +45,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -60,9 +60,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", - "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, "license": "MIT", "engines": { @@ -70,21 +70,21 @@ } }, "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -101,14 +101,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -118,14 +118,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -135,9 +135,9 @@ } }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, "license": "MIT", "engines": { @@ -145,29 +145,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -177,9 +177,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", "engines": { @@ -187,9 +187,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", "engines": { @@ -197,9 +197,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, "license": "MIT", "engines": { @@ -207,27 +207,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", - "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", - "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.29.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -247,33 +247,33 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", "debug": "^4.3.1" }, "engines": { @@ -281,14 +281,14 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -3444,9 +3444,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.10.29", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.29.tgz", - "integrity": "sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==", + "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==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3464,22 +3464,22 @@ "license": "(MIT OR Apache-2.0)" }, "node_modules/brace-expansion": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", - "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", "dev": true, "funding": [ { @@ -3497,11 +3497,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", - "update-browserslist-db": "^1.2.3" + "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" }, "bin": { "browserslist": "cli.js" @@ -3521,9 +3521,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001792", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001792.tgz", - "integrity": "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==", + "version": "1.0.30001809", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", + "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", "dev": true, "funding": [ { @@ -3827,9 +3827,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.356", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.356.tgz", - "integrity": "sha512-9NgFd7m5t5MCJ5rUSjJITUXAH9mEGlrlofnMf4YEr+pz6JlP7cWmTAH+JFmbPnaSW8koVTkuW7pacORWAnA5Yw==", + "version": "1.5.412", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.412.tgz", + "integrity": "sha512-z4rMe3esBzlzovKHj4gxJnsCGZRK5l4baUvm+gCGJBPE+gsyUMKsuU9tnEUtI1dOebXz1ytAPGjvXhmQ7rIPwA==", "dev": true, "license": "ISC" }, @@ -6027,11 +6027,14 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.44", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.44.tgz", - "integrity": "sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==", + "version": "2.0.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", + "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/obug": { "version": "2.1.4", @@ -7097,9 +7100,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", + "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", "dev": true, "funding": [ { From c6ce2efa274032c60093a94ebd080d2adccefc8d Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Wed, 26 Aug 2026 18:40:21 +0100 Subject: [PATCH 21/22] update packages, use ^ --- package-lock.json | 322 +++++++++++++++++++++++----------------------- package.json | 6 +- 2 files changed, 164 insertions(+), 164 deletions(-) diff --git a/package-lock.json b/package-lock.json index cd5c370085..46d41eb045 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,10 +27,10 @@ "eslint": "^10.2.1", "jspdf": "^4.2.0", "jspdf-autotable": "^5.0.7", - "oxfmt": "0.64.0", - "oxlint": "^1.79.0", + "oxfmt": "^0.65.0", + "oxlint": "^1.80.0", "oxlint-tsgolint": "^7.0.2001", - "playwright": "~1.62.1", + "playwright": "^1.62.1", "react": "^19.2.7", "react-dom": "^19.2.7", "tsdown": "^0.22.7", @@ -724,9 +724,9 @@ } }, "node_modules/@oxfmt/binding-android-arm-eabi": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.64.0.tgz", - "integrity": "sha512-o6uzh/jTOQeAY5TdkAeXdqv7MBRcPxiRA08zrcBtkKj5cSu/FMu0Hl7Q6Fi1KCKyCWZ6lJVjBzdsJvsKltUsGQ==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.65.0.tgz", + "integrity": "sha512-M10Gs1SSpTNI6ahGx3M/OlIdUF4hkaP6OgUb+MS79t/Pgflk3r1nW5gPFqsZGUAXg0H1AfANT9AvLdBSTIhZKg==", "cpu": [ "arm" ], @@ -741,9 +741,9 @@ } }, "node_modules/@oxfmt/binding-android-arm64": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.64.0.tgz", - "integrity": "sha512-jRGSUeeP7p3Gynw2YaCVtjBIA6ZxY6bEB/ES5i54OhqmRTyuVg7ZgstEtzgq6GOAJd+2QZ5pvf+bFfmW5Mp9cw==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.65.0.tgz", + "integrity": "sha512-6DXH5sftNlaHpWJG50hFMF+Qxtq5D2TmahvcDPxWNcGIf8qrC9Y0YgHYcYZ2hlWzaccKXh/f3GcssH8vtkl4JA==", "cpu": [ "arm64" ], @@ -758,9 +758,9 @@ } }, "node_modules/@oxfmt/binding-darwin-arm64": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.64.0.tgz", - "integrity": "sha512-JINwtU2lW7nOFSqi+H2qplipNUqah9Gc1jgGmB82kTD4UnZrZIVxCJ9qEmFiKfjNq27gYLFhrUb0to86aCwMjw==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.65.0.tgz", + "integrity": "sha512-K9m7lr53pcOLETNsC88sWes/GWHUGjZyHx95UhYcSXy0r30haLdeXlSufSenEAtoLaW753WN8/l4M7GYcRt6cg==", "cpu": [ "arm64" ], @@ -775,9 +775,9 @@ } }, "node_modules/@oxfmt/binding-darwin-x64": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.64.0.tgz", - "integrity": "sha512-gCmuswrgrOSajV4HCRFkVCGIruPq8bjYuPYgSE2WQB3mD6XrdyZ3JMSRZCkQ8zCxOyGWriBo6QoZ5nmMHQ1BfA==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.65.0.tgz", + "integrity": "sha512-sTNwIx1gre3MyiHOPLu7IGW4UyMScYL4DTmJT01p4vzB0En+OJUQz6KuH8t0PpsClRSaMuY3b0QmtoPItfO8Lg==", "cpu": [ "x64" ], @@ -792,9 +792,9 @@ } }, "node_modules/@oxfmt/binding-freebsd-x64": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.64.0.tgz", - "integrity": "sha512-Ab8g7a38pT0MMImjh7anRSTve6buWBIlcXIFBYa5xl4s6UxEgKSc2xOOhbGtLwvXnEi2PsEDGoJh3oUU7xkehQ==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.65.0.tgz", + "integrity": "sha512-lYZMVIiIpnjGu5hJb2jxA8NYQ/e0OTGuaiAf4dqlGPNnPmUTu23FZRMltmjro/KkQm1uE4NT4n5yJ2zWmKcpfA==", "cpu": [ "x64" ], @@ -809,9 +809,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm-gnueabihf": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.64.0.tgz", - "integrity": "sha512-BgvS3CoQ+Xy2deoZqEN8JVKabcCZi2RxA3yant8G9OAv9KuPJ9TCjHkqigzdHUVwErZxEP5d2bzLIEyKYyBDLg==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.65.0.tgz", + "integrity": "sha512-gIdXFAt/bURnjxuoedDEWdZ0PEWEmdDcm8qdpoFYYvW3QMk/5D4vUaH4mlMeRpeTdST4izUgHVO6RawQ4QulJw==", "cpu": [ "arm" ], @@ -826,9 +826,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm-musleabihf": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.64.0.tgz", - "integrity": "sha512-QXpNxwoMj0YvnceCNZadNSden3bIcnvjn/sDp/rwZhRoZoZYGpHvtPyhGsdJz9uvT9GkaMW7SsLddurU56dt8w==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.65.0.tgz", + "integrity": "sha512-jJVyADto7gA2AaX5qAjAexrxx9PJQaKWOe8PICE7yKMbjBRyOHcmj9TtVJ+MZYDUQ3hodU0AcoTj0jFQ1W4C6Q==", "cpu": [ "arm" ], @@ -843,9 +843,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm64-gnu": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.64.0.tgz", - "integrity": "sha512-BBgH3I1ppDsI5pZ4Pdhw0ceYxwVCfbU/bZEBCeZ6caRS9x0ZabErxubP7riGUn11PXZBhe8DYdjkDKP1FlVQ5w==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.65.0.tgz", + "integrity": "sha512-p3RFkB+u7u+8up99b/NEcI1hdpLDiGgJYNwDorB60n7eH+eKposAKuMBxx+NqB3b+sJP4CZmYDh9G7X62tUsKg==", "cpu": [ "arm64" ], @@ -863,9 +863,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm64-musl": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.64.0.tgz", - "integrity": "sha512-v19HSjC/BGXdt26qEvKZtwAHgGmQ2Agcap2kQP+KIqoRZqivVzYth3ui2dJA1i+6/fjpjga85lIOaJJjQ/bOOw==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.65.0.tgz", + "integrity": "sha512-5Prb0uFzJHr+OUD/qS/TmU526wD+PaHDsm3KoRiUXbMIDpTSErjeQYkK3OQeshAvD/PuLa9WGEi9WPajjdOZJg==", "cpu": [ "arm64" ], @@ -883,9 +883,9 @@ } }, "node_modules/@oxfmt/binding-linux-ppc64-gnu": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.64.0.tgz", - "integrity": "sha512-PElLnOo4xFTBZrxPhgTIj0eHqZXwEBQoNWtb7facUV170T0B0FRET0iNbb3LUeLWTybkUW+vsdyv4ihOdyXGyw==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.65.0.tgz", + "integrity": "sha512-S8svxTp81obnF3admN9yd+u2rOYXtyzThLGBTg1PY6TPtGcC09BaaXLQD+TBSMa7yvqhCDZ8DFri+S/yG60qCg==", "cpu": [ "ppc64" ], @@ -903,9 +903,9 @@ } }, "node_modules/@oxfmt/binding-linux-riscv64-gnu": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.64.0.tgz", - "integrity": "sha512-Qzsg15n4F5CH+MorcRW4MkAEMiLzXmeG+DiDSbP/bBTqCmWOH3K9DHryNrve+JHlV0txS+B6Z9P5Xz+cmWeL+g==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.65.0.tgz", + "integrity": "sha512-WtXBr75G/h2qOHy8SiGtC1R6aS3jt4mE52v1D8AtwMXIgoOmSNP9lKvbSaTRoL0e5wsMPoi6T72QWDYPu+S+nA==", "cpu": [ "riscv64" ], @@ -923,9 +923,9 @@ } }, "node_modules/@oxfmt/binding-linux-riscv64-musl": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.64.0.tgz", - "integrity": "sha512-/GZ358wnQ/Ez4UVnCcZIi56JkY0sOdZ+B108pqXKqZz3jLS59F4KEAB1Qv3fRlObrFEk+3L2vUQ/xoPx+3vjXw==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.65.0.tgz", + "integrity": "sha512-YwSLVvpaz4o/nv/miiPEBJz+eJ+VmbgNIrao6RccK9ce+L5EA8wP+ZD0uFeq6wKOza6zoWv/dR0sj6lip6R3EA==", "cpu": [ "riscv64" ], @@ -943,9 +943,9 @@ } }, "node_modules/@oxfmt/binding-linux-s390x-gnu": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.64.0.tgz", - "integrity": "sha512-/C9We3DXegowfLXtVCYHeNiU9azwCDr5cQkEtCVlc74vyn+lLQSPApJ1CZmxAduqeq/Oi3gQ+IVptyhCaTMtkQ==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.65.0.tgz", + "integrity": "sha512-XQTPqgvyrgkKcFq+Tp2eK6JS7sqqJ+nRmy2Fav4j3I+i4dJoPJm7YwEdoeSDX9xkqj9jZ/lWfF3bXUWztIrn6A==", "cpu": [ "s390x" ], @@ -963,9 +963,9 @@ } }, "node_modules/@oxfmt/binding-linux-x64-gnu": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.64.0.tgz", - "integrity": "sha512-91KM2CeRWscIEHlj1NsW2WSnzGeq1Ehq+39bfDowTdkn+fcvK/x4Y1RcyqT7glyBjZio0ldkeCG6Usj3v7ASog==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.65.0.tgz", + "integrity": "sha512-cjZlx6S/VkeCNWCbwZriTnLnZeTcV3DEyeRGSw/2wwLP9viq+C0bJ4bC1k/ZLkFxDcB1lUgSasPkYGP1bdraOg==", "cpu": [ "x64" ], @@ -983,9 +983,9 @@ } }, "node_modules/@oxfmt/binding-linux-x64-musl": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.64.0.tgz", - "integrity": "sha512-gw7uEk9I+7zoT1EYLra1eWArIzNcz8e3jkv+Noo2+o2T7wPvsNSQbfoa4DSfZlvn1i6mJ05RiZ4/omaXPDNhQg==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.65.0.tgz", + "integrity": "sha512-2azCjxdLtK4zCcIOU1dlXlU0xxfbPi6EjwWx7Ac7teWPidIIDOcIhudup83xNCKYhtqeVd/gaVDOxbUq4syXWA==", "cpu": [ "x64" ], @@ -1003,9 +1003,9 @@ } }, "node_modules/@oxfmt/binding-openharmony-arm64": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.64.0.tgz", - "integrity": "sha512-HYHFf616FHSPSO07c09mjmXBfQ73wIVM3m0txOiooa5XZkGoxFd6B14PVj0LB0DXIqJ6wAO/dDR/NX/5UUaqnw==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.65.0.tgz", + "integrity": "sha512-KXQ7xi1e/voP0IQaw6fG6XY4Z5+Llf1XmRSZS1t7pVFCecFJ0iXaboKmVwjFtp5MLlT5iWQrJ2U1C3GJdZ2u+Q==", "cpu": [ "arm64" ], @@ -1020,9 +1020,9 @@ } }, "node_modules/@oxfmt/binding-win32-arm64-msvc": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.64.0.tgz", - "integrity": "sha512-uQjFp081IZSWD6VAofX2iO2z01awAdHmfC+NrieWIPKrT2hZKQDyq/U18M7ifC0sm0Wz8aHY/p6+FDYIzs/CrQ==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.65.0.tgz", + "integrity": "sha512-2FbbjG5jEqLSLKVJwBap84uJfpn5Y5A53KEO0aUNr+zeiRB9nyPUIFMcSbZVMFLitfBytFWRNngozXYjb6Rsbw==", "cpu": [ "arm64" ], @@ -1037,9 +1037,9 @@ } }, "node_modules/@oxfmt/binding-win32-ia32-msvc": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.64.0.tgz", - "integrity": "sha512-lNM6byTAQ881jugzFu8juJTbNRgsUTlswMA6pJmwi1XDvmIqnnb49lcUAs5gz94fCJLrVN+/X3s3jOKqx23WIQ==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.65.0.tgz", + "integrity": "sha512-LJ+ZacAPSjegDOnSLyA1TMWAhdDrsK4el3REdr1oL2UtVBCMhO2II/Sb3cEW6mF2MfLhl8hDNCSvc7KSbgk3LQ==", "cpu": [ "ia32" ], @@ -1054,9 +1054,9 @@ } }, "node_modules/@oxfmt/binding-win32-x64-msvc": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.64.0.tgz", - "integrity": "sha512-BtmbtL/QjMtF1a6C3CqoDluH2IfB6fJt62E+B9RFfUPtFk4Iz9PFS6+y/SzzOvSxc7aUk2Kphwg7Dh8lMbwu6g==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.65.0.tgz", + "integrity": "sha512-higu9cWEO6XXFzATD1jf0mCK34rNfN2H9JrJie7QB1IhleVpTh0QlLH9Ip2C1H/Nd5n0v5pvRtC+5R0uE4HpVg==", "cpu": [ "x64" ], @@ -1155,9 +1155,9 @@ ] }, "node_modules/@oxlint/binding-android-arm-eabi": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.79.0.tgz", - "integrity": "sha512-TebFaaMklO/RXzTv7PucaCq9l3X6D1gA+C8H6K4njtjFOV+zWE9MKLpulcJZN9bzytbUbQIY0mZuz12nQ5Kv4Q==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.80.0.tgz", + "integrity": "sha512-RM3Plj+biQpxa5d1GOOX6ciDlcUROmm4OZ/pLTpitkQt2mJv4jhtY4cbgaetOm5UKWZe05/TGQ6o1Vl8EOHkrA==", "cpu": [ "arm" ], @@ -1172,9 +1172,9 @@ } }, "node_modules/@oxlint/binding-android-arm64": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.79.0.tgz", - "integrity": "sha512-KqqnOtAVgNsPPF0YSodkFZA1O80jcKoCZCTu3bgsszxA+MrMP9TLzfXitKjEj1FmrPprKDMdRDMmY3weESO9sg==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.80.0.tgz", + "integrity": "sha512-YlO5JEf0Yr2bUUlu8O8daVcUxtcGGbcSmyV7E7nSbJbfAdxTE0PFPwgnIlw7wXJaTYjb+qs5hI5q3jxUkI7cAw==", "cpu": [ "arm64" ], @@ -1189,9 +1189,9 @@ } }, "node_modules/@oxlint/binding-darwin-arm64": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.79.0.tgz", - "integrity": "sha512-BVC2nsMzqQzRDPc5RhixkZ+m1p7iH4bxRRvqkbwDXX0PlQKm1BPy8J8cRjnAFafOq2QzI+BfO3vE8w2GZ3CBag==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.80.0.tgz", + "integrity": "sha512-BULDOyO3AhsmdWfQeIUCykDt3dd7XZBGLhp1eIh56skRv01O+cNjNPwXMIbeW1x4+pxcln5if72wcRgViVo7PA==", "cpu": [ "arm64" ], @@ -1206,9 +1206,9 @@ } }, "node_modules/@oxlint/binding-darwin-x64": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.79.0.tgz", - "integrity": "sha512-p6Lm+snmhGuLKL1+CpCV8L6ijkE/qJzK2H2jG9+eKJT0n31RbY4FLsdhexekgP3bLpw4Kgde+9DZuDZQ4yIInA==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.80.0.tgz", + "integrity": "sha512-YJ4JzLw7N5TDSQFlA0hAQGHvnDZgyypm1yunObVWcWiF9KM7eGCJKYKLgTC2Fi/57OdnBhbj4OkzPGdFQJ6HyA==", "cpu": [ "x64" ], @@ -1223,9 +1223,9 @@ } }, "node_modules/@oxlint/binding-freebsd-x64": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.79.0.tgz", - "integrity": "sha512-qDMm0dXZnoHyRqSL4N4xUq82T4sqK5cbKSjvd/dF/YbMUXc2R1wEPf+vmA5S0qUmi0nwXfNbjXBtZaIqzQLIMg==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.80.0.tgz", + "integrity": "sha512-AYUIk5QnL0s8oWAYsREZwkRYy1SupJTXALo93J1TgzHywxQtdM99FecRMQ87MXEdPQ0j1TmEpeeq3fGNkpvMqg==", "cpu": [ "x64" ], @@ -1240,9 +1240,9 @@ } }, "node_modules/@oxlint/binding-linux-arm-gnueabihf": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.79.0.tgz", - "integrity": "sha512-2od7s0nuKPzqyUZAWk9KkCyGg7eI9dwFPZg+20lB15fKFkVZ0c9ZFxqPfiBAyDTlTkh9stPI0t+JlPCqMbItVA==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.80.0.tgz", + "integrity": "sha512-9hBZVANupQ89W9dXyE0n8doCyaW5pDyGn3y6XlIMPZ+rIKuyqkr3SNUXmVJIhuvUq0NBU3RBiSXXE69l4XI6KA==", "cpu": [ "arm" ], @@ -1257,9 +1257,9 @@ } }, "node_modules/@oxlint/binding-linux-arm-musleabihf": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.79.0.tgz", - "integrity": "sha512-ZOQUjkzDnvlhSE3+tWC3YXx94MMl+sYMlwH+u1+YGApGHOJP/YAc8ZBRFOXZ6eOBmxtXAWuS/fBcdZr8qqNO1A==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.80.0.tgz", + "integrity": "sha512-SvS2uKqzY+pbfuvAHzH4338R6Zwo805GAwrIMVvK1KxoOWCIjZUdfzTCvilD7z6JK91v011+zYMryabhDo2AsQ==", "cpu": [ "arm" ], @@ -1274,9 +1274,9 @@ } }, "node_modules/@oxlint/binding-linux-arm64-gnu": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.79.0.tgz", - "integrity": "sha512-lu158FR4nGqGeRS3BQvtG85wRgU/Fy4MD5Cxp1hzJXizGiLo6u2742wJSCDKh8cFcZntvX7fcxlq4mMmfryH1g==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.80.0.tgz", + "integrity": "sha512-tCLadyqRVL3pQTRPNg7cjXKvcvS4fbyXeQHhKk5BTJ1oftQln5/yIIWbu/Xom/DX41zv2P9QGt6+D/TtQVtY3A==", "cpu": [ "arm64" ], @@ -1294,9 +1294,9 @@ } }, "node_modules/@oxlint/binding-linux-arm64-musl": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.79.0.tgz", - "integrity": "sha512-mbpKQeE2aflTjddaHK7MP8KP/OFbUM++lt5M635ENM8IyIdK0jm2t9pb+2v9mVVIvhF6TqA4l7F79Pll1mi+uw==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.80.0.tgz", + "integrity": "sha512-XfpCNRlOPcLlJl4Bn/FUhjqlR6BVavEykERBf/MV7YA9VZDa5g5znVqYhyviMafcxS9Pe/i/kPvHNO0U6svEHQ==", "cpu": [ "arm64" ], @@ -1314,9 +1314,9 @@ } }, "node_modules/@oxlint/binding-linux-ppc64-gnu": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.79.0.tgz", - "integrity": "sha512-WpGNua7gaxaHnpSDeog2ji8IDHn/QLPl9LPzwkR/FvVv58vT5BcXjRXnU+wbu3N75cpeha8CdC7ho/U2OIsB4g==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.80.0.tgz", + "integrity": "sha512-3I4yMwcFG9NeO8ioY6JBBuKsIm5GL/x7MATt1S4tVWaxPu5HcJ+XnLUbcVBTxG8q2Wu56HSj+NmXQiVYb1lp6A==", "cpu": [ "ppc64" ], @@ -1334,9 +1334,9 @@ } }, "node_modules/@oxlint/binding-linux-riscv64-gnu": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.79.0.tgz", - "integrity": "sha512-tK1E93A5LVzISg4ngpKJnfTs7EqtIUceGI7MQ4GyDjJiLi8wPCkEyKlj2xkyKWZ1yzkDJyLHTBJ5/iFWRdnJvg==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.80.0.tgz", + "integrity": "sha512-E1wAKymkpe1/E8helzBKdm81OBOF+ezxRyXRMEuik3ZpWDER5CPOKZwF66RsdwW98uwZv8UTFremUQtC1CzdJA==", "cpu": [ "riscv64" ], @@ -1354,9 +1354,9 @@ } }, "node_modules/@oxlint/binding-linux-riscv64-musl": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.79.0.tgz", - "integrity": "sha512-qhQvUIrngXivA2A9pQ+xPCychztn/5qUv7yS3gDwXv3w7Rag+eTeeXWmRyx+t7XsW5x6LuY/8AsTq36UgFIblg==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.80.0.tgz", + "integrity": "sha512-+gLRGD4sIo3+VA++iham5UxD9tKSoJ/VOrROCEXIcknrYtQg6iIQgvjN0cpiRF7N6UYC7pJbvHJlDnMge5LRpQ==", "cpu": [ "riscv64" ], @@ -1374,9 +1374,9 @@ } }, "node_modules/@oxlint/binding-linux-s390x-gnu": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.79.0.tgz", - "integrity": "sha512-sv6AaVgU/eE6u+6WFiQVDcPPwTxP6IJMSB9k701W2r/r6Tx465e8vPvVyRxquNH4Vy6KwRNu90mVbxXJN8+5gg==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.80.0.tgz", + "integrity": "sha512-aR0PrzHj9leW3NmzBAAP4EzdoBNoJcs9sjnIQPIwyRnBGYrRbXUIpEB5Q39AqK3PLY5JK5uEhDQDiUa1QSAstw==", "cpu": [ "s390x" ], @@ -1394,9 +1394,9 @@ } }, "node_modules/@oxlint/binding-linux-x64-gnu": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.79.0.tgz", - "integrity": "sha512-iFZL02deziHslb3jEX9KdqlAkYoo4fGyotchKDzdfK1f5mxlIBeiQeHhvK3iFpuEJSB4ma/qeFn9oxPiwnhUPQ==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.80.0.tgz", + "integrity": "sha512-vSVh5cSo3Xxs6ghBCcFJlpbkbENzDog1qXtoXLa/HC3aCrR4XO76GZbXmQoCPHnu99nQpdCeC3H9tdNICfDh7A==", "cpu": [ "x64" ], @@ -1414,9 +1414,9 @@ } }, "node_modules/@oxlint/binding-linux-x64-musl": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.79.0.tgz", - "integrity": "sha512-3DtZR2raqObnh7wXZoFYFd0Fw7skBvcb3f7A+/lkEiDuh8hrE6vv9b/62Qxao1a9/OeHLw/FcXlXzgsW9wTRFg==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.80.0.tgz", + "integrity": "sha512-FfzBXpNQ8u7/ZI/p8bl73MeZ508Ax3hxWp3SiJpEFiC+BB9XcXy5FAZHTLKDPSzrUpxQZSZJAVdDmuJp/+HDBQ==", "cpu": [ "x64" ], @@ -1434,9 +1434,9 @@ } }, "node_modules/@oxlint/binding-openharmony-arm64": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.79.0.tgz", - "integrity": "sha512-Oatt4GuA1WJkqzk2ozx4HrWROOi7opV3AKDw/U8qDIqeTqzsjn5K2x3REJMNjU3/KU/Bkq96Zi3CknaiDTaC/Q==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.80.0.tgz", + "integrity": "sha512-zMzbkumtmprCgRwoYNzcB3iC39fXdJIMLMU33KdCjEGLlJGOEt1+LwQ4LF8ndLzAEKVz4BR0y3V6Xrkk3Nm3yA==", "cpu": [ "arm64" ], @@ -1451,9 +1451,9 @@ } }, "node_modules/@oxlint/binding-win32-arm64-msvc": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.79.0.tgz", - "integrity": "sha512-NAgZr9Qp8nIA9rpo0JEvwiabTF/2UVqBNnupBG9X4kxXcQoScJUTi+qHhvabb9s/thgj5wQ4XcIaJvb+ZMgoKw==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.80.0.tgz", + "integrity": "sha512-ib6iRcrXsk4t1fm3iKcwksyWh1ZkZXC/2mEzakl0ai2+6HZunf1WWMZ/xP9EJAvw9g9K4UVTC3NF/+G2qLrbTQ==", "cpu": [ "arm64" ], @@ -1468,9 +1468,9 @@ } }, "node_modules/@oxlint/binding-win32-ia32-msvc": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.79.0.tgz", - "integrity": "sha512-+KyXjIvcpaXmWW/j9NNY5yWjrIVxaX18VyIheQy3jwc2GSYgpCr7MGI/HxIGQ/shAL5IWEKbhsqoMpAO5Stiog==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.80.0.tgz", + "integrity": "sha512-xhRWBMpLxZvgKAH6+DJZmpP+W8Y8UdQOSU1JfxSWNXsaBaRGW77j+1hCuNHlzj7OH4SPN8fYd1q0o2qrDtoVyw==", "cpu": [ "ia32" ], @@ -1485,9 +1485,9 @@ } }, "node_modules/@oxlint/binding-win32-x64-msvc": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.79.0.tgz", - "integrity": "sha512-mEelcCMMBS57sIXh2veGMNy+pQwuGtcMxHxGIZWQ5Ba9pJ5jCCUFOZB9E2JhBaxGsURe+WGe0zJp4RVre52gpQ==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.80.0.tgz", + "integrity": "sha512-yAnO7lwBYQnz2pcfBPIGQQZWIX5zd5R/1aAKIF3oE+TVj7IhoHcROjOkz3sRDngzqhfPKfFaXqug5j5rE5dn6Q==", "cpu": [ "x64" ], @@ -6090,9 +6090,9 @@ } }, "node_modules/oxfmt": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.64.0.tgz", - "integrity": "sha512-XZ4GFBN/PLbXKq+0zrgpQfPKYuJlUuj+nzZJY7UpIbFMNyefNLCdN9EwViycNqnYcv0wrn0jXcQLlqJp8RCKBg==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.65.0.tgz", + "integrity": "sha512-SgS5VgnP42T0zl3zWD+xoH8FCqg1SAFnSRoOT/qeoa6gxcYIqrDMOmcXIg/EWSN92Du4ogB4riuKhKd6Y4CGhw==", "dev": true, "license": "MIT", "dependencies": { @@ -6108,25 +6108,25 @@ "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxfmt/binding-android-arm-eabi": "0.64.0", - "@oxfmt/binding-android-arm64": "0.64.0", - "@oxfmt/binding-darwin-arm64": "0.64.0", - "@oxfmt/binding-darwin-x64": "0.64.0", - "@oxfmt/binding-freebsd-x64": "0.64.0", - "@oxfmt/binding-linux-arm-gnueabihf": "0.64.0", - "@oxfmt/binding-linux-arm-musleabihf": "0.64.0", - "@oxfmt/binding-linux-arm64-gnu": "0.64.0", - "@oxfmt/binding-linux-arm64-musl": "0.64.0", - "@oxfmt/binding-linux-ppc64-gnu": "0.64.0", - "@oxfmt/binding-linux-riscv64-gnu": "0.64.0", - "@oxfmt/binding-linux-riscv64-musl": "0.64.0", - "@oxfmt/binding-linux-s390x-gnu": "0.64.0", - "@oxfmt/binding-linux-x64-gnu": "0.64.0", - "@oxfmt/binding-linux-x64-musl": "0.64.0", - "@oxfmt/binding-openharmony-arm64": "0.64.0", - "@oxfmt/binding-win32-arm64-msvc": "0.64.0", - "@oxfmt/binding-win32-ia32-msvc": "0.64.0", - "@oxfmt/binding-win32-x64-msvc": "0.64.0" + "@oxfmt/binding-android-arm-eabi": "0.65.0", + "@oxfmt/binding-android-arm64": "0.65.0", + "@oxfmt/binding-darwin-arm64": "0.65.0", + "@oxfmt/binding-darwin-x64": "0.65.0", + "@oxfmt/binding-freebsd-x64": "0.65.0", + "@oxfmt/binding-linux-arm-gnueabihf": "0.65.0", + "@oxfmt/binding-linux-arm-musleabihf": "0.65.0", + "@oxfmt/binding-linux-arm64-gnu": "0.65.0", + "@oxfmt/binding-linux-arm64-musl": "0.65.0", + "@oxfmt/binding-linux-ppc64-gnu": "0.65.0", + "@oxfmt/binding-linux-riscv64-gnu": "0.65.0", + "@oxfmt/binding-linux-riscv64-musl": "0.65.0", + "@oxfmt/binding-linux-s390x-gnu": "0.65.0", + "@oxfmt/binding-linux-x64-gnu": "0.65.0", + "@oxfmt/binding-linux-x64-musl": "0.65.0", + "@oxfmt/binding-openharmony-arm64": "0.65.0", + "@oxfmt/binding-win32-arm64-msvc": "0.65.0", + "@oxfmt/binding-win32-ia32-msvc": "0.65.0", + "@oxfmt/binding-win32-x64-msvc": "0.65.0" }, "peerDependencies": { "svelte": "^5.0.0", @@ -6142,9 +6142,9 @@ } }, "node_modules/oxlint": { - "version": "1.79.0", - "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.79.0.tgz", - "integrity": "sha512-hVJ9hq9m2unPS+Of4eJJgCPdIeCC+3DHEUX3tkmrPJr3OK2hz7PhXwgC+ZP71ZcYu8cCDEtQrqLxWNvxBppBVg==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.80.0.tgz", + "integrity": "sha512-5nTiSps4qdbCWLbxzuO00alHkEO2exR9YMN/ig6QXWrLsYSG0KaObOAM+l6oU2LcKPWoSAGYbkZIGEu1ViiWKA==", "dev": true, "license": "MIT", "bin": { @@ -6157,25 +6157,25 @@ "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxlint/binding-android-arm-eabi": "1.79.0", - "@oxlint/binding-android-arm64": "1.79.0", - "@oxlint/binding-darwin-arm64": "1.79.0", - "@oxlint/binding-darwin-x64": "1.79.0", - "@oxlint/binding-freebsd-x64": "1.79.0", - "@oxlint/binding-linux-arm-gnueabihf": "1.79.0", - "@oxlint/binding-linux-arm-musleabihf": "1.79.0", - "@oxlint/binding-linux-arm64-gnu": "1.79.0", - "@oxlint/binding-linux-arm64-musl": "1.79.0", - "@oxlint/binding-linux-ppc64-gnu": "1.79.0", - "@oxlint/binding-linux-riscv64-gnu": "1.79.0", - "@oxlint/binding-linux-riscv64-musl": "1.79.0", - "@oxlint/binding-linux-s390x-gnu": "1.79.0", - "@oxlint/binding-linux-x64-gnu": "1.79.0", - "@oxlint/binding-linux-x64-musl": "1.79.0", - "@oxlint/binding-openharmony-arm64": "1.79.0", - "@oxlint/binding-win32-arm64-msvc": "1.79.0", - "@oxlint/binding-win32-ia32-msvc": "1.79.0", - "@oxlint/binding-win32-x64-msvc": "1.79.0" + "@oxlint/binding-android-arm-eabi": "1.80.0", + "@oxlint/binding-android-arm64": "1.80.0", + "@oxlint/binding-darwin-arm64": "1.80.0", + "@oxlint/binding-darwin-x64": "1.80.0", + "@oxlint/binding-freebsd-x64": "1.80.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.80.0", + "@oxlint/binding-linux-arm-musleabihf": "1.80.0", + "@oxlint/binding-linux-arm64-gnu": "1.80.0", + "@oxlint/binding-linux-arm64-musl": "1.80.0", + "@oxlint/binding-linux-ppc64-gnu": "1.80.0", + "@oxlint/binding-linux-riscv64-gnu": "1.80.0", + "@oxlint/binding-linux-riscv64-musl": "1.80.0", + "@oxlint/binding-linux-s390x-gnu": "1.80.0", + "@oxlint/binding-linux-x64-gnu": "1.80.0", + "@oxlint/binding-linux-x64-musl": "1.80.0", + "@oxlint/binding-openharmony-arm64": "1.80.0", + "@oxlint/binding-win32-arm64-msvc": "1.80.0", + "@oxlint/binding-win32-ia32-msvc": "1.80.0", + "@oxlint/binding-win32-x64-msvc": "1.80.0" }, "peerDependencies": { "oxlint-tsgolint": ">=7.0.2001", diff --git a/package.json b/package.json index 1446030a91..94f69f61c5 100644 --- a/package.json +++ b/package.json @@ -67,10 +67,10 @@ "eslint": "^10.2.1", "jspdf": "^4.2.0", "jspdf-autotable": "^5.0.7", - "oxfmt": "0.64.0", - "oxlint": "^1.79.0", + "oxfmt": "^0.65.0", + "oxlint": "^1.80.0", "oxlint-tsgolint": "^7.0.2001", - "playwright": "~1.62.1", + "playwright": "^1.62.1", "react": "^19.2.7", "react-dom": "^19.2.7", "tsdown": "^0.22.7", From b3ebfbf21ee37c1cfd3a2a4866823d17d8305bed Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Wed, 26 Aug 2026 19:59:30 +0100 Subject: [PATCH 22/22] couple tweaks --- .github/dependabot.yml | 1 - .oxlintrc.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 305a07fd3d..9604b7df12 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -26,7 +26,6 @@ updates: quality: patterns: - 'eslint' - - 'eslint-*' - '@eslint/*' - '@eslint-react/*' - 'oxfmt' diff --git a/.oxlintrc.json b/.oxlintrc.json index 07a7281157..1af97163ac 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -1,7 +1,7 @@ { "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": ["typescript", "react", "vitest"], + "plugins": ["eslint", "react", "typescript", "vitest"], "jsPlugins": ["@eslint-react/eslint-plugin"],