{"_id":"oxlint-plugin-react-hook-form","_rev":"6-4dd7ccee4fdf32b5d75295ce1e3d2e3e","name":"oxlint-plugin-react-hook-form","dist-tags":{"latest":"0.3.3"},"versions":{"0.1.0":{"name":"oxlint-plugin-react-hook-form","version":"0.1.0","keywords":["oxlint","oxlint-plugin","eslint","eslintplugin","eslint-plugin","react-hook-form"],"license":"MIT","_id":"oxlint-plugin-react-hook-form@0.1.0","maintainers":[{"name":"nwlindner","email":"noah@bevyl.ai"}],"homepage":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form","bugs":{"url":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form/issues"},"dist":{"shasum":"1ba3ed5d507806f5e7d2c4c95329ec28ffd04738","tarball":"https://registry.npmjs.org/oxlint-plugin-react-hook-form/-/oxlint-plugin-react-hook-form-0.1.0.tgz","fileCount":15,"integrity":"sha512-848wO1RhBNHrQG3efoiKX52w2X2k+ae85G1Xhc3ZO63Z92A20BXiGg8qd45s1B8aemQA/E4nTP18fktvaEL03Q==","signatures":[{"sig":"MEUCIQDh24nCe/i1EkegeJmbF5d1In30RpWwOpbrQMqlZdIQOQIgMW1OuvVQZHwqeKjbYOqxf3372kteVyJKv+v0bqxZZC0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20137},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"6785aa97e51221cc4f7a5d090195ee4ebfe4c81e","scripts":{"test":"tsc && bun test","build":"tsc","prepublishOnly":"bun run test"},"_npmUser":{"name":"nwlindner","email":"noah@bevyl.ai"},"repository":{"url":"git+https://github.com/bevyl-ai/oxlint-plugin-react-hook-form.git","type":"git"},"_npmVersion":"10.9.7","description":"react-hook-form lint rules for oxlint and ESLint 9+ — a modern-API port of eslint-plugin-react-hook-form","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.0","oxlint":"^1.75.0","@types/bun":"^1.3.14","typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/oxlint-plugin-react-hook-form_0.1.0_1785860242051_0.866280003759683","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"oxlint-plugin-react-hook-form","version":"0.2.0","keywords":["oxlint","oxlint-plugin","eslint","eslintplugin","eslint-plugin","react-hook-form"],"license":"MIT","_id":"oxlint-plugin-react-hook-form@0.2.0","maintainers":[{"name":"nwlindner","email":"noah@bevyl.ai"}],"homepage":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form","bugs":{"url":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form/issues"},"dist":{"shasum":"1466c5c34d9f4095278302f06315fafa41246be3","tarball":"https://registry.npmjs.org/oxlint-plugin-react-hook-form/-/oxlint-plugin-react-hook-form-0.2.0.tgz","fileCount":17,"integrity":"sha512-YJp0nAdoJuXv97R1q/ngZUuapA8FIUfp2dy9hWcAE87Fg6mc9Z92I4dCbV4X73j7wdpFCCgPUxCcW1zxTNo5eA==","signatures":[{"sig":"MEYCIQDhqhYUEl/IeuCiVVdjyC3HAymAdr0GkdVsZPdDJssogwIhAOiv6Tn5cDO3vWrYzy9zUxuDbncdFpje8uA7lh5YISVR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/oxlint-plugin-react-hook-form@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":31797},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"51aed992b86e7482278268af623be7a341805fce","scripts":{"test":"tsc && bun test","build":"tsc","prepublishOnly":"bun run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3d59db44-18ea-401e-a836-8a449cc7e6f6"}},"repository":{"url":"git+https://github.com/bevyl-ai/oxlint-plugin-react-hook-form.git","type":"git"},"_npmVersion":"12.0.2","description":"react-hook-form lint rules for oxlint and ESLint 9+ — a modern-API port of eslint-plugin-react-hook-form","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.0","oxlint":"^1.75.0","@types/bun":"^1.3.14","typescript":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/oxlint-plugin-react-hook-form_0.2.0_1785862699859_0.35827321780313826","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"oxlint-plugin-react-hook-form","version":"0.3.0","keywords":["oxlint","oxlint-plugin","eslint","eslintplugin","eslint-plugin","react-hook-form"],"license":"MIT","_id":"oxlint-plugin-react-hook-form@0.3.0","maintainers":[{"name":"nwlindner","email":"noah@bevyl.ai"}],"homepage":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form","bugs":{"url":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form/issues"},"dist":{"shasum":"276fca45dedeeb030eb1954a9fd923148f7dbe6d","tarball":"https://registry.npmjs.org/oxlint-plugin-react-hook-form/-/oxlint-plugin-react-hook-form-0.3.0.tgz","fileCount":17,"integrity":"sha512-JbbMrBDZiF4hyrgf0XbjD2/IFM5pJ9dlO5or0A6nk/UrKitg4pu5iuQoWSFpHXHxW7zDvSvrO59d26JwpKqPyg==","signatures":[{"sig":"MEYCIQCkUafiKE5aI0yHrvudMmtIcecC6GiiJHmnKzp0g7AX8QIhAKjaZkU85aAXCImHqnMGwdAq7TDbqLAenolZ/b3+aWND","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/oxlint-plugin-react-hook-form@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":34187},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"2ef9d78f15b8b7b52dd669c45944fb4c69d1a728","scripts":{"test":"tsc && bun test","build":"tsc","prepublishOnly":"bun run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3d59db44-18ea-401e-a836-8a449cc7e6f6"}},"repository":{"url":"git+https://github.com/bevyl-ai/oxlint-plugin-react-hook-form.git","type":"git"},"_npmVersion":"12.0.2","description":"react-hook-form lint rules for oxlint and ESLint 9+ — a modern-API port of eslint-plugin-react-hook-form","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.0","oxlint":"^1.75.0","@types/bun":"^1.3.14","typescript":"^7.0.2"},"peerDependencies":{"eslint":">=9"},"peerDependenciesMeta":{"eslint":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/oxlint-plugin-react-hook-form_0.3.0_1785871666759_0.36222352368059285","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"oxlint-plugin-react-hook-form","version":"0.3.1","keywords":["oxlint","oxlint-plugin","eslint","eslintplugin","eslint-plugin","react-hook-form"],"license":"MIT","_id":"oxlint-plugin-react-hook-form@0.3.1","maintainers":[{"name":"nwlindner","email":"noah@bevyl.ai"}],"homepage":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form","bugs":{"url":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form/issues"},"dist":{"shasum":"18a6ef36bee7f058bab03323c77ed26664b87d83","tarball":"https://registry.npmjs.org/oxlint-plugin-react-hook-form/-/oxlint-plugin-react-hook-form-0.3.1.tgz","fileCount":17,"integrity":"sha512-kFQzOfLO290RtMF5rUXwI5SG5OzBAe+ZQDJQs30uu4fxH9TgcqNREG8Lo6Ej0zXcSsLRUQyq3UQqowR01o47XA==","signatures":[{"sig":"MEYCIQC7t1l7CXrKxeVdaXSH14BANahjFKA1TOrvn/q1OgU0WwIhAKNBJiZqJ18rTHYPcyDhUnA9Dx1QhJlFL6HnZbO5bjAy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/oxlint-plugin-react-hook-form@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":35408},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"4e5e86d42245f8f79a2981ea7844f0b9157ae49d","scripts":{"test":"tsc && bun test","build":"tsc","prepublishOnly":"bun run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3d59db44-18ea-401e-a836-8a449cc7e6f6"}},"repository":{"url":"git+https://github.com/bevyl-ai/oxlint-plugin-react-hook-form.git","type":"git"},"_npmVersion":"12.0.2","description":"react-hook-form lint rules for oxlint and ESLint 9+ — a modern-API port of eslint-plugin-react-hook-form","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.0","oxlint":"^1.75.0","@types/bun":"^1.3.14","typescript":"^7.0.2"},"peerDependencies":{"eslint":">=9"},"peerDependenciesMeta":{"eslint":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/oxlint-plugin-react-hook-form_0.3.1_1785872003372_0.9402833830679154","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"oxlint-plugin-react-hook-form","version":"0.3.2","keywords":["oxlint","oxlint-plugin","eslint","eslintplugin","eslint-plugin","react-hook-form"],"license":"MIT","_id":"oxlint-plugin-react-hook-form@0.3.2","maintainers":[{"name":"nwlindner","email":"noah@bevyl.ai"}],"homepage":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form","bugs":{"url":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form/issues"},"dist":{"shasum":"0381af55858541d7e14e10365e829b065f0fe712","tarball":"https://registry.npmjs.org/oxlint-plugin-react-hook-form/-/oxlint-plugin-react-hook-form-0.3.2.tgz","fileCount":17,"integrity":"sha512-189SOsjs/vgyRAbNhKdvJvTFFMOLvB4nxPLq/qm1WVUXQ96tEB/vtb1YUvmAXhL/wQvpY0ZBR2M3N7hTXSrFaQ==","signatures":[{"sig":"MEQCIGWXM8+2rWDmaB6pEk3r6tyAueajMF7VMeG7u91MfISbAiAfOI4aFZG3eieW9CWsfWrcZ7XO3U3lzFNMYvvWIshupw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/oxlint-plugin-react-hook-form@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":36354},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"91def4a1a2c465445f289ec2bdc64f014a3bb5ca","scripts":{"test":"tsc && bun test","build":"tsc","prepublishOnly":"bun run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3d59db44-18ea-401e-a836-8a449cc7e6f6"}},"repository":{"url":"git+https://github.com/bevyl-ai/oxlint-plugin-react-hook-form.git","type":"git"},"_npmVersion":"12.0.2","description":"react-hook-form lint rules for oxlint and ESLint 9+ — a modern-API port of eslint-plugin-react-hook-form","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.0","oxlint":"^1.75.0","@types/bun":"^1.3.14","typescript":"^7.0.2"},"peerDependencies":{"eslint":">=9"},"peerDependenciesMeta":{"eslint":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/oxlint-plugin-react-hook-form_0.3.2_1785875332640_0.4341933563122866","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"oxlint-plugin-react-hook-form","version":"0.3.3","description":"react-hook-form lint rules for oxlint and ESLint 9+ — a modern-API port of eslint-plugin-react-hook-form","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"license":"MIT","homepage":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form","repository":{"type":"git","url":"git+https://github.com/bevyl-ai/oxlint-plugin-react-hook-form.git"},"bugs":{"url":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form/issues"},"keywords":["oxlint","oxlint-plugin","eslint","eslintplugin","eslint-plugin","react-hook-form"],"engines":{"node":">=18"},"publishConfig":{"access":"public"},"peerDependencies":{"eslint":">=9"},"peerDependenciesMeta":{"eslint":{"optional":true}},"scripts":{"build":"tsc","test":"tsc && bun test","prepublishOnly":"bun run test"},"devDependencies":{"@types/bun":"^1.3.14","eslint":"^9.39.0","oxlint":"^1.75.0","typescript":"^7.0.2"},"dependencies":{"@oxlint/plugins":"^1.78.0"},"gitHead":"7fb938bde6e9d7ee36b5692205689ee51eaa70e2","_id":"oxlint-plugin-react-hook-form@0.3.3","_nodeVersion":"24.19.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-U6vdXTD30jbJ2AspwzBCwYbbTR7MBdaiMd4PbkB9wUc+rDMv4vlCB7tc5aSMPwYlg92qmLecvIEdKhLlBapEEg==","shasum":"3444e15adada61d9d6db231ede131563928f90c1","tarball":"https://registry.npmjs.org/oxlint-plugin-react-hook-form/-/oxlint-plugin-react-hook-form-0.3.3.tgz","fileCount":17,"unpackedSize":35987,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/oxlint-plugin-react-hook-form@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGFu3HC+Vwc1zDnvg1iKLnr2xpQFaT4U1bnkHyMsiPeIAiEApoEuw2lNx5yrVm1dxuClv4YechFRR9C113VvhD2v83E="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3d59db44-18ea-401e-a836-8a449cc7e6f6"}},"directories":{},"maintainers":[{"name":"nwlindner","email":"noah@bevyl.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/oxlint-plugin-react-hook-form_0.3.3_1786918782921_0.15108324782790206"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-04T16:17:21.877Z","modified":"2026-08-16T22:19:43.341Z","0.1.0":"2026-08-04T16:17:22.318Z","0.2.0":"2026-08-04T16:58:20.009Z","0.3.0":"2026-08-04T19:27:46.888Z","0.3.1":"2026-08-04T19:33:23.524Z","0.3.2":"2026-08-04T20:28:52.787Z","0.3.3":"2026-08-16T22:19:43.077Z"},"bugs":{"url":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form/issues"},"license":"MIT","homepage":"https://github.com/bevyl-ai/oxlint-plugin-react-hook-form","keywords":["oxlint","oxlint-plugin","eslint","eslintplugin","eslint-plugin","react-hook-form"],"repository":{"type":"git","url":"git+https://github.com/bevyl-ai/oxlint-plugin-react-hook-form.git"},"description":"react-hook-form lint rules for oxlint and ESLint 9+ — a modern-API port of eslint-plugin-react-hook-form","maintainers":[{"name":"nwlindner","email":"noah@bevyl.ai"}],"readme":"# oxlint-plugin-react-hook-form\n\n[react-hook-form](https://react-hook-form.com/) lint rules for [oxlint](https://oxc.rs/docs/guide/usage/linter.html) and ESLint 9+.\n\nThis is a port of [eslint-plugin-react-hook-form](https://github.com/andykao1213/eslint-plugin-react-hook-form) (MIT) to the modern ESLint rule API (`context.sourceCode.getScope(node)`). The original plugin uses `context.getScope()`, which ESLint 9 removed — so it crashes under ESLint 9 flat config and under oxlint's JS-plugin runtime. This package runs in both, is written in TypeScript, and ships type declarations.\n\n## Install\n\n```sh\nnpm install --save-dev oxlint-plugin-react-hook-form\n```\n\n## Usage with oxlint\n\n`.oxlintrc.json`:\n\n```json\n{\n  \"jsPlugins\": [\"oxlint-plugin-react-hook-form\"],\n  \"rules\": {\n    \"react-hook-form/destructuring-formstate\": \"error\",\n    \"react-hook-form/no-access-control\": \"error\",\n    \"react-hook-form/no-index-field-array-key\": \"error\",\n    \"react-hook-form/no-nested-object-setvalue\": \"error\",\n    \"react-hook-form/no-use-watch\": \"error\"\n  }\n}\n```\n\nRequires oxlint ≥ 1.x with JS plugin support.\n\n## Usage with ESLint 9 (flat config)\n\n```js\nimport reactHookForm from 'oxlint-plugin-react-hook-form';\n\nexport default [\n  reactHookForm.configs.recommended,\n  // reactHookForm.configs['react-compiler'], // adds no-use-watch\n];\n```\n\nOr enable rules individually:\n\n```js\nimport reactHookForm from 'oxlint-plugin-react-hook-form';\n\nexport default [\n  {\n    plugins: { 'react-hook-form': reactHookForm },\n    rules: {\n      'react-hook-form/destructuring-formstate': 'error',\n    },\n  },\n];\n```\n\n## Rules\n\n| Rule | Description | Fixable |\n| --- | --- | --- |\n| [destructuring-formstate](docs/rules/destructuring-formstate.md) | Use destructuring assignment to access `formState` properties, so the Proxy subscribes to state changes | |\n| [no-access-control](docs/rules/no-access-control.md) | Avoid accessing properties of `control` — they are internal | |\n| [no-index-field-array-key](docs/rules/no-index-field-array-key.md) | Use `field.id`, not the array index, as the key when rendering `useFieldArray` fields | |\n| [no-nested-object-setvalue](docs/rules/no-nested-object-setvalue.md) | Avoid passing an object as the second argument of `setValue` (use dot-path keys); whole-array `setValue` should be `useFieldArray` methods | 🔧 (objects only) |\n| [no-use-watch](docs/rules/no-use-watch.md) | Use `useWatch` instead of `watch`, required for React Compiler correctness | |\n\nThe `recommended` config enables everything except `no-use-watch`, which is in the `react-compiler` config.\n\n### Stricter than upstream\n\nUnlike the original plugin, the rules also track the form object itself — `const form = useForm()` followed by `form.formState.x`, `form.control._x`, or `form.setValue(...)` is checked the same as the destructured style, including re-destructuring (`const { setValue } = form`). Whole-array `setValue` gets a dedicated diagnostic (with no autofix) pointing at `useFieldArray`'s `replace`/`append`/`update`, since [the docs deprecate whole-array `setValue`](https://react-hook-form.com/docs/useform/setvalue) for removal in the next major version.\n\n## Credits\n\nRules originally written by [Chuan-Tse Kao](https://github.com/andykao1213) and contributors in [eslint-plugin-react-hook-form](https://github.com/andykao1213/eslint-plugin-react-hook-form) (`no-use-watch` by tatsuya.asami). This package modernizes them and adds an oxlint-focused test suite.\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}