diff --git a/.oxlintrc.json b/.oxlintrc.json index 888d5cb..abc7c82 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -177,7 +177,7 @@ "typescript/unbound-method": "error", "typescript/unified-signatures": "error", "typescript/use-unknown-in-catch-callback-variable": "error", - "no-empty-function": "error", + "no-empty-function": "off", "typescript/adjacent-overload-signatures": "error", "typescript/array-type": "error", "typescript/ban-tslint-comment": "error", @@ -198,8 +198,27 @@ "typescript/prefer-optional-chain": "error", "typescript/prefer-regexp-exec": "error", "typescript/prefer-string-starts-ends-with": "error", - "react-x/error-boundaries": "error", - "react-x/exhaustive-deps": "warn", + "react/capitalized-calls": "warn", + "react/error-boundaries": "error", + "react/exhaustive-deps": "warn", + "react/exhaustive-effect-dependencies": "warn", + "react/globals": "error", + "react/hooks": "warn", + "react/immutability": "error", + "react/incompatible-library": "warn", + "react/memo-dependencies": "error", + "react/no-deriving-state-in-effects": "error", + "react/preserve-manual-memoization": "error", + "react/purity": "error", + "react/refs": "error", + "react/rules-of-hooks": "error", + "react/set-state-in-effect": "error", + "react/set-state-in-render": "error", + "react/static-components": "error", + "react/unsupported-syntax": "warn", + "react/use-memo": "error", + "react/void-use-memo": "error", + "react/rule-suppression": "error", "react-x/no-access-state-in-setstate": "error", "react-x/no-array-index-key": "warn", "react-x/no-children-count": "warn", @@ -227,13 +246,6 @@ "react-x/no-unsafe-component-will-update": "warn", "react-x/no-unused-class-component-members": "warn", "react-x/no-use-context": "warn", - "react-x/purity": "warn", - "react-x/rules-of-hooks": "error", - "react-x/set-state-in-effect": "warn", - "react-x/set-state-in-render": "error", - "react-x/static-components": "error", - "react-x/unsupported-syntax": "error", - "react-x/use-memo": "error", "react-x/use-state": "warn", "react-x/no-class-component": "error", "react-x/no-misused-capture-owner-stack": "error", @@ -253,9 +265,6 @@ "react-dom/no-missing-button-type": "warn", "react-dom/no-missing-iframe-sandbox": "warn", "react-dom/no-unsafe-target-blank": "warn", - "react-naming-convention/context-name": "warn", - "react-naming-convention/id-name": "warn", - "react-naming-convention/ref-name": "warn", "react-jsx/no-children-prop": "error", "react-jsx/no-children-prop-with-children": "error", "react-jsx/no-comment-textnodes": "warn", @@ -264,6 +273,12 @@ "react-jsx/no-leaked-semicolon": "warn", "react-jsx/no-namespace": "error", "react-jsx/no-useless-fragment": "warn", + "react-naming-convention/context-name": "warn", + "react-naming-convention/id-name": "warn", + "react-naming-convention/ref-name": "warn", + "react-perf/jsx-no-new-object-as-prop": "error", + "react-perf/jsx-no-new-array-as-prop": "error", + "react-perf/jsx-no-new-function-as-prop": "error", "import/named": "off", "import/namespace": "error", "import/default": "error", @@ -271,9 +286,6 @@ "import/no-named-as-default": "warn", "import/no-named-as-default-member": "warn", "import/no-duplicates": "warn", - "react-perf/jsx-no-new-object-as-prop": "error", - "react-perf/jsx-no-new-array-as-prop": "error", - "react-perf/jsx-no-new-function-as-prop": "error", "jsx-a11y/alt-text": "error", "jsx-a11y/anchor-ambiguous-text": "off", "jsx-a11y/anchor-has-content": "error", @@ -641,11 +653,11 @@ "sonarjs/no-redundant-jump": "error", "sonarjs/inconsistent-function-call": "error", "sonarjs/no-use-of-empty-return-value": "error", - "sonarjs/void-use": "error", + "sonarjs/void-use": "off", "sonarjs/operation-returning-nan": "off", "sonarjs/values-not-convertible-to-numbers": "off", "sonarjs/non-number-in-arithmetic-expression": "off", - "sonarjs/cognitive-complexity": "error", + "sonarjs/cognitive-complexity": "off", "sonarjs/argument-type": "error", "sonarjs/in-operator-type-error": "error", "sonarjs/array-callback-without-return": "error", @@ -767,7 +779,6 @@ "sonarjs/no-exclusive-tests": "error", "sonarjs/hardcoded-secret-signatures": "error", "sonarjs/jsx-no-leaked-render": "error", - "sonarjs/no-hook-setter-in-body": "error", "sonarjs/no-useless-react-setstate": "error", "sonarjs/no-uniq-key": "error", "sonarjs/redundant-type-aliases": "error", @@ -787,8 +798,68 @@ "sonarjs/hooks-before-test-cases": "error", "sonarjs/no-forced-browser-interaction": "error", "sonarjs/super-linear-regex": "error", - "react/rules-of-hooks": "error", - "react/exhaustive-deps": "warn", + "react-doctor/no-fetch-in-effect": "error", + "react-doctor/no-async-effect-callback": "error", + "react-doctor/effect-needs-cleanup": "error", + "react-doctor/effect-listener-cleanup-mismatch": "error", + "react-doctor/no-effect-chain": "error", + "react-doctor/no-self-updating-effect": "error", + "react-doctor/no-effect-with-fresh-deps": "error", + "react-doctor/no-effect-event-in-deps": "error", + "react-doctor/no-stale-timer-ref": "error", + "react-doctor/no-mirror-prop-effect": "error", + "react-doctor/hooks-no-nan-in-deps": "error", + "react-doctor/no-mutable-in-deps": "error", + "react-doctor/no-impure-state-updater": "error", + "react-doctor/no-derived-state": "error", + "react-doctor/no-derived-state-effect": "error", + "react-doctor/no-chain-state-updates": "error", + "react-doctor/no-event-handler": "error", + "react-doctor/no-adjust-state-on-prop-change": "error", + "react-doctor/no-reset-all-state-on-prop-change": "error", + "react-doctor/no-pass-live-state-to-parent": "error", + "react-doctor/no-pass-data-to-parent": "error", + "react-doctor/no-initialize-state": "error", + "react-doctor/no-create-context-in-render": "error", + "react-doctor/no-create-store-in-render": "error", + "react-doctor/no-render-in-render": "error", + "react-doctor/no-ref-current-in-render": "error", + "react-doctor/no-json-parse-stringify-clone": "error", + "react-doctor/no-call-component-as-function": "error", + "react-doctor/no-full-lodash-import": "error", + "react-doctor/no-moment": "error", + "react-doctor/no-barrel-import": "error", + "react-doctor/prefer-dynamic-import": "error", + "react-doctor/no-dynamic-import-path": "error", + "react-doctor/no-layout-property-animation": "error", + "react-doctor/no-transition-all": "error", + "react-doctor/no-permanent-will-change": "error", + "react-doctor/no-large-animated-blur": "error", + "react-doctor/no-long-transition-duration": "error", + "react-doctor/no-global-css-variable-animation": "error", + "react-doctor/no-inline-bounce-easing": "error", + "react-doctor/no-scale-from-zero": "error", + "react-doctor/no-layout-transition-inline": "error", + "react-doctor/client-passive-event-listeners": "error", + "react-doctor/no-img-lazy-with-high-fetchpriority": "error", + "react-doctor/no-undeferred-third-party": "error", + "react-doctor/rendering-script-defer-async": "error", + "react-doctor/activity-wraps-effect-heavy-subtree": "error", + "react-doctor/no-eval": "error", + "react-doctor/no-sync-xhr": "error", + "react-doctor/no-document-write": "error", + "react-doctor/auth-token-in-web-storage": "error", + "react-doctor/zod-v4-no-deprecated-schema-apis": "error", + "react-doctor/zod-v4-no-deprecated-error-apis": "error", + "react-doctor/zod-v4-no-deprecated-error-customization": "error", + "react-doctor/zod-v4-prefer-top-level-string-formats": "error", + "react-doctor/no-react19-deprecated-apis": "error", + "react-doctor/no-react-dom-deprecated-apis": "error", + "react-doctor/dialog-has-accessible-name": "error", + "react-doctor/html-no-invalid-table-nesting": "error", + "react-doctor/html-no-nested-interactive": "error", + "react-doctor/html-no-invalid-paragraph-child": "error", + "react-doctor/no-aria-hidden-on-focusable": "error", "perfectionist/sort-variable-declarations": [ "error", { @@ -891,15 +962,16 @@ "@docusaurus/prefer-docusaurus-heading": "error", "@docusaurus/no-html-links": "error" }, - "plugins": ["typescript", "import", "react-perf", "jsx-a11y", "unicorn", "react"], + "plugins": ["typescript", "react-perf", "import", "jsx-a11y", "unicorn", "react"], "jsPlugins": [ "eslint-plugin-react-x", "eslint-plugin-react-dom", - "eslint-plugin-react-naming-convention", "eslint-plugin-react-jsx", + "eslint-plugin-react-naming-convention", "eslint-plugin-sonarjs", "eslint-plugin-perfectionist", - "@docusaurus/eslint-plugin" + "@docusaurus/eslint-plugin", + { "name": "react-doctor", "specifier": "oxlint-plugin-react-doctor" } ], "env": { "es2026": true, diff --git a/package.json b/package.json index 52ca6e8..649fcbf 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "globals": "^17.7.0", "oxfmt": "^0.65.0", "oxlint": "^1.73.0", + "oxlint-plugin-react-doctor": "^0.9.12", "oxlint-tsgolint": "^7.0.0", "typescript": "npm:@typescript/typescript6@^6.0.2", "typescript-eslint": "^8.64.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d495ac..07b258e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -93,6 +93,9 @@ importers: oxlint: specifier: ^1.73.0 version: 1.80.0(oxlint-tsgolint@7.0.2001) + oxlint-plugin-react-doctor: + specifier: ^0.9.12 + version: 0.9.12 oxlint-tsgolint: specifier: ^7.0.0 version: 7.0.2001 @@ -1713,6 +1716,131 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-parser/binding-android-arm-eabi@0.143.0': + resolution: {integrity: sha512-n9uozULWflPqBtdmI8lAabLqGKNgLVNN0ZH8HfgCwpKGNtzRzauB76jTiW/3YLkcA7N1zskpi9GdVnZuu1SAvg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm64@0.143.0': + resolution: {integrity: sha512-9BbdjHETk6O3zH/DDid9IgBtF0GlpLabNKN231uraXpRDSfY+iiZxTP5bk1Z63GBownVdhdINFIeddmMz4MzpQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.143.0': + resolution: {integrity: sha512-gh+6ecoHUy4/sUcolBl/1qPXKBbYNxFY0Pk0ujgQvINTMSftJY7o4yb8gOkDJPeZeB8+a+u7xTe6umoP8N5HFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.143.0': + resolution: {integrity: sha512-qd1hl2d+lXgHv/VQ/M9qm8TrMC5T4RqDBwtOnl+1D0QMjwcz+8AaB4JSg8STgeag0GP6a6L74XEGAsrTSJWNzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.143.0': + resolution: {integrity: sha512-M5XXcNa7aOqLPKTR41msfghKu2yQ4xWvCm11/gwU0JzOzHNk5sgW//rVEjJ+LO48+VDAMzXTSzurUVxIDKwozw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.143.0': + resolution: {integrity: sha512-T/GXusuOkPNQhCQCSBbcU/N8j0rAypuDBl1IyFK+lyYT594XsVz80clPC/OtbSSpBGyJxj8uYEfctxVuxVYoww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.143.0': + resolution: {integrity: sha512-oKu4RcBlXSqo3OC62dp6YTnQaZIurNDpCX3BnAM3+bJxt7s8J2TJKMnC0UYer1qhlRaDCg6wkTaTw+2IlsZ12w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.143.0': + resolution: {integrity: sha512-WJBbD186AZmMGaSIhlktC+rPl8L3peCTXAh88Ih9uEvK0en2mPojGyCGYiL6mHtV1RPV3JyfJW5t6n5hh0lXhA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-arm64-musl@0.143.0': + resolution: {integrity: sha512-t1AcYOwEzgceadT4v5e+vaCCb0AncCA3v5AyzfBAz/tMq11qzVccXKzNHtkWdjBsgvTKwRkaUF3QvT4kot8vcQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-ppc64-gnu@0.143.0': + resolution: {integrity: sha512-RsnO/NoD8376LMJq8JS8TwI0ieNaFRTuNe2GVJntQg6gwZNMENZsEbknHdVwjpOmxdGLGodcwaGSbAeRr5Bgjw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-gnu@0.143.0': + resolution: {integrity: sha512-48fSVfR9TZi5CASZFyv0VC6z6BCoeihFsX031mAD/oSH7d9PYsPgIqza7d9mjP7Z2KTEpTFyH6SIu0Ui6R1vdg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-musl@0.143.0': + resolution: {integrity: sha512-T8CpdD+SfE01DnIOD4HpVxu0ZJOfMJ/VhCvikKfaXAxkZ+9veyLM/D2hpi7Y2hFUyPmVQO3FNZHmYzV/WlVR4g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-s390x-gnu@0.143.0': + resolution: {integrity: sha512-QLdeMsCcacenPEFsfxnBUDF1y6opyz5+fmOz9bfD5Y7fiGCMupUCuB3KTPQhNwshIG1P9fPqar9MHxuBDd4bwQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-gnu@0.143.0': + resolution: {integrity: sha512-659ujfqLy6k7cuH3sbzhd8b+ztSq+i6E2E9pG78Q0BmHjAExfGIdgc8cGgMdwAozDXeZFHkJ+LXYJdWsaGdgyw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-musl@0.143.0': + resolution: {integrity: sha512-/Mw/9j4TfZcnKphPrzOE6t4MMknXadcAAuVUlDRTF/ETWB5xOgQvOJV2Mh9We/bWxZdoxaGAdc+hy4GuYwQ2yQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-openharmony-arm64@0.143.0': + resolution: {integrity: sha512-8rIKWR2BFuifbIK/1XB9wTaSdtuJ25dlE7ZQYDnEwj/2xH2vHsxnvIjHT3ZjSVuLLwGGlSslIG/fbOJ8TV8rTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-win32-arm64-msvc@0.143.0': + resolution: {integrity: sha512-5U9kQYMfRRI6Zq7KDxgbIP0RMnKrfn3gLepRMgJuRkPSUALTiRCk9d/uyhb4lGDjUdzwK7mBkKqhLgzBPCmLpQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.143.0': + resolution: {integrity: sha512-25P7AaHk4R88Yv2XH4gToDVmh0cOu+bEURQU10CRrmvgabfRArSGAP5osmwUKeSUHj0VS50upbpbRWWW/m7mHA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.143.0': + resolution: {integrity: sha512-ORMh3JE1s6V7ySicdRK7vgaDQnn5o+UHg9ct989PlWHbel8O9ARrmWXM6kZjrBMtNucxNayQ8g69G0VfWzhANw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.143.0': + resolution: {integrity: sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==} + '@oxfmt/binding-android-arm-eabi@0.65.0': resolution: {integrity: sha512-M10Gs1SSpTNI6ahGx3M/OlIdUF4hkaP6OgUb+MS79t/Pgflk3r1nW5gPFqsZGUAXg0H1AfANT9AvLdBSTIhZKg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2117,6 +2245,10 @@ packages: '@rspack/lite-tapable@1.1.0': resolution: {integrity: sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==} + '@shaderfrog/glsl-parser@7.0.1': + resolution: {integrity: sha512-8mpfsoPeRhesY3pOrzNZBL8uG6N5GVX1EHLBYbd4gzKs+c7vaEIqpTNK5VrffU33qQN4cwpP2v3u4aPPBU32sw==} + engines: {node: '>=16'} + '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -5028,6 +5160,10 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + oxc-parser@0.143.0: + resolution: {integrity: sha512-ov0NzaDCOInknS7mP1cwKdJERt3utPW8ldjtdUXQ8Ty0GEFD08wk422vCUN0d7pST6kqtV7dxoI9w1Zi0l/9TA==} + engines: {node: ^20.19.0 || >=22.12.0} + oxfmt@0.65.0: resolution: {integrity: sha512-SgS5VgnP42T0zl3zWD+xoH8FCqg1SAFnSRoOT/qeoa6gxcYIqrDMOmcXIg/EWSN92Du4ogB4riuKhKd6Y4CGhw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5041,6 +5177,10 @@ packages: vite-plus: optional: true + oxlint-plugin-react-doctor@0.9.12: + resolution: {integrity: sha512-BplcCUU/tGByFGgY1YIax6evUmjk0K8zOGGrdPs3A3dqamrzjUvVuJdYpM1Ftyt/B5fFx6+VwRrWi3YZbIz4VQ==} + engines: {node: ^20.19.0 || >=22.13.0} + oxlint-tsgolint@7.0.2001: resolution: {integrity: sha512-KjK/XLcXr1DSyonKhsuFqJRiuKqcyG9j3LJ8nkOsrLzGvodBPqzHOKauy10asLMDI0sUpvb+1sxlzff3udZvfg==} hasBin: true @@ -9288,6 +9428,65 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@oxc-parser/binding-android-arm-eabi@0.143.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.143.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.143.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.143.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.143.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.143.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.143.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.143.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.143.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.143.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.143.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.143.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.143.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.143.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.143.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.143.0': + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.143.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.143.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.143.0': + optional: true + + '@oxc-project/types@0.143.0': {} + '@oxfmt/binding-android-arm-eabi@0.65.0': optional: true @@ -9581,6 +9780,8 @@ snapshots: '@rspack/lite-tapable@1.1.0': {} + '@shaderfrog/glsl-parser@7.0.1': {} + '@sideway/address@4.1.5': dependencies: '@hapi/hoek': 9.3.0 @@ -12894,6 +13095,30 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + oxc-parser@0.143.0: + dependencies: + '@oxc-project/types': 0.143.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.143.0 + '@oxc-parser/binding-android-arm64': 0.143.0 + '@oxc-parser/binding-darwin-arm64': 0.143.0 + '@oxc-parser/binding-darwin-x64': 0.143.0 + '@oxc-parser/binding-freebsd-x64': 0.143.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.143.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.143.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.143.0 + '@oxc-parser/binding-linux-arm64-musl': 0.143.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.143.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.143.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.143.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.143.0 + '@oxc-parser/binding-linux-x64-gnu': 0.143.0 + '@oxc-parser/binding-linux-x64-musl': 0.143.0 + '@oxc-parser/binding-openharmony-arm64': 0.143.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.143.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.143.0 + '@oxc-parser/binding-win32-x64-msvc': 0.143.0 + oxfmt@0.65.0: dependencies: tinypool: 2.1.0 @@ -12918,6 +13143,15 @@ snapshots: '@oxfmt/binding-win32-ia32-msvc': 0.65.0 '@oxfmt/binding-win32-x64-msvc': 0.65.0 + oxlint-plugin-react-doctor@0.9.12: + dependencies: + '@shaderfrog/glsl-parser': 7.0.1 + '@typescript-eslint/types': 8.68.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + lightningcss: 1.33.0 + oxc-parser: 0.143.0 + oxlint-tsgolint@7.0.2001: optionalDependencies: '@oxlint-tsgolint/darwin-arm64': 7.0.2001