{"_id":"@10stars/oxlint-plugin-react-hooks","_rev":"8-1eb399aeca11104ae485a2a1b8cbc8b9","name":"@10stars/oxlint-plugin-react-hooks","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@10stars/oxlint-plugin-react-hooks","version":"1.0.0","license":"MIT","_id":"@10stars/oxlint-plugin-react-hooks@1.0.0","maintainers":[{"name":"o_alexandrov","email":"web@alexandrov.co"}],"dist":{"shasum":"cf97358c80a29532adbaac1a8b1a73763b784e41","tarball":"https://registry.npmjs.org/@10stars/oxlint-plugin-react-hooks/-/oxlint-plugin-react-hooks-1.0.0.tgz","fileCount":4,"integrity":"sha512-tWBiz84CP0wpjzWFz9DgomdySo7SJLsWv/xCquy9VveZA8oJBTo+A0/gNO8vZABnAE6QtcQY2IdJrGnIxsdIZQ==","signatures":[{"sig":"MEUCIQDofrEpwlC8PVEiBgsgdhuu/53E8ViNAiPgOAKBxrFalQIgPUM1JGvnWOA6TReLFPa5WMh/mpBf0ZeoxpZPH+PBFrM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70801},"main":"index.ts","gitHead":"ea48d2d523dd7655c87d4237d3634a46f0c97c11","private":false,"_npmUser":{"name":"o_alexandrov","email":"web@alexandrov.co"},"_npmVersion":"11.6.2","description":"Oxlint JS plugin for React hooks exhaustive-deps rule with enhanced configuration options.","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/oxlint-plugin-react-hooks_1.0.0_1767362080824_0.2162375746058871","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@10stars/oxlint-plugin-react-hooks","version":"1.0.1","license":"MIT","_id":"@10stars/oxlint-plugin-react-hooks@1.0.1","maintainers":[{"name":"o_alexandrov","email":"web@alexandrov.co"}],"dist":{"shasum":"eb112a3cd9c2648f171b074760ce67052b8cdf28","tarball":"https://registry.npmjs.org/@10stars/oxlint-plugin-react-hooks/-/oxlint-plugin-react-hooks-1.0.1.tgz","fileCount":4,"integrity":"sha512-9C3r4nBmt7QkbgxftPavC9Ez7XpkvshzYwVvp/Ws1kpQU0J6kU2/6ys2TtXO/vvJUOLs8EmV4Pk630D7pQb1kg==","signatures":[{"sig":"MEUCIQDbA7FskN2vWNsXybKQRmjooE+kLcJmNRr/t/VlM/IypQIgSa1kL9SyDjiWjgxl+7pEwqEdjlCoYp3XwUzitebnzCE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70801},"main":"index.js","gitHead":"ea48d2d523dd7655c87d4237d3634a46f0c97c11","private":false,"_npmUser":{"name":"o_alexandrov","email":"web@alexandrov.co"},"_npmVersion":"11.6.2","description":"Oxlint JS plugin for React hooks exhaustive-deps rule with enhanced configuration options.","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/oxlint-plugin-react-hooks_1.0.1_1767380024120_0.23926042011319426","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@10stars/oxlint-plugin-react-hooks","version":"1.0.2","license":"MIT","_id":"@10stars/oxlint-plugin-react-hooks@1.0.2","maintainers":[{"name":"o_alexandrov","email":"web@alexandrov.co"}],"dist":{"shasum":"f57063837cf02ea41422c450275bfbbb75bb0424","tarball":"https://registry.npmjs.org/@10stars/oxlint-plugin-react-hooks/-/oxlint-plugin-react-hooks-1.0.2.tgz","fileCount":4,"integrity":"sha512-VqbZ6gKiUdts2akW6yecUQUI4TXDvTJTY2NIYmeYL1AlZiNrt1d724GpPyu/tAnZCiSKW5p07XYbJY9IvG1t2A==","signatures":[{"sig":"MEYCIQDp9DcspUjv2dRRQcf1it1KbjaWkKSKOKCqxuIMfMKUGAIhAO/C7qZnwbmLt/3g4iuPtxjW/X1tJImSnms8Wvdb86Sb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70823},"main":"index.js","gitHead":"ea48d2d523dd7655c87d4237d3634a46f0c97c11","private":false,"_npmUser":{"name":"o_alexandrov","email":"web@alexandrov.co"},"_npmVersion":"11.6.2","description":"Oxlint JS plugin for React hooks exhaustive-deps rule with enhanced configuration options.","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/oxlint-plugin-react-hooks_1.0.2_1767380189184_0.9898938241717796","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@10stars/oxlint-plugin-react-hooks","version":"1.0.3","license":"MIT","_id":"@10stars/oxlint-plugin-react-hooks@1.0.3","maintainers":[{"name":"o_alexandrov","email":"web@alexandrov.co"}],"dist":{"shasum":"0641d422435b4e7f77b7842976fab5c9029887f9","tarball":"https://registry.npmjs.org/@10stars/oxlint-plugin-react-hooks/-/oxlint-plugin-react-hooks-1.0.3.tgz","fileCount":4,"integrity":"sha512-Dq5+du+8Jg6LETvH3kNQ57Ja8VSh9gN1Mky59k2C/rkda9rnij0QuCO0OZ9my/cACxd+YKxGNQoD0g6QmmGhSA==","signatures":[{"sig":"MEYCIQCP3KxxTGZmEw/C76ZCApZvnpnYqsrMFPrR4UUNXDIYCAIhAPAQ/hCDjDLwvQv0QTk3A0Ot9jjd0af+iNUu4HDVIpxz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70843},"main":"index.js","type":"module","gitHead":"ea48d2d523dd7655c87d4237d3634a46f0c97c11","private":false,"_npmUser":{"name":"o_alexandrov","email":"web@alexandrov.co"},"_npmVersion":"11.6.2","description":"Oxlint JS plugin for React hooks exhaustive-deps rule with enhanced configuration options.","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/oxlint-plugin-react-hooks_1.0.3_1767380377275_0.677721611761797","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@10stars/oxlint-plugin-react-hooks","version":"1.0.4","license":"MIT","_id":"@10stars/oxlint-plugin-react-hooks@1.0.4","maintainers":[{"name":"o_alexandrov","email":"web@alexandrov.co"}],"dist":{"shasum":"290594324ef85fbdff1fb18a2e36989540d2b571","tarball":"https://registry.npmjs.org/@10stars/oxlint-plugin-react-hooks/-/oxlint-plugin-react-hooks-1.0.4.tgz","fileCount":4,"integrity":"sha512-QCgCcS1Rso3Te+cmiOvUgcKUNbitEc+7wglWL2Dy20o4NrwgCFMxoRf4hU0um9/9kQZEySNfLWsQ18mED141hQ==","signatures":[{"sig":"MEQCIDwee5tGk039Hn8+GxJV73RrsbQks+lnffmX8OCXk+rcAiAIpjLgCf5EtvZ7nSx8T7pREfGO2ZFac1dvCVgXsS8rrA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70845},"main":"index.js","type":"module","gitHead":"ea48d2d523dd7655c87d4237d3634a46f0c97c11","private":false,"_npmUser":{"name":"o_alexandrov","email":"web@alexandrov.co"},"_npmVersion":"11.6.2","description":"Oxlint JS plugin for React hooks exhaustive-deps rule with enhanced configuration options.","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/oxlint-plugin-react-hooks_1.0.4_1767380828073_0.4977676191956699","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@10stars/oxlint-plugin-react-hooks","version":"1.0.5","license":"MIT","_id":"@10stars/oxlint-plugin-react-hooks@1.0.5","maintainers":[{"name":"o_alexandrov","email":"web@alexandrov.co"}],"dist":{"shasum":"68525a283963ab791507d14525aba68f77bffa84","tarball":"https://registry.npmjs.org/@10stars/oxlint-plugin-react-hooks/-/oxlint-plugin-react-hooks-1.0.5.tgz","fileCount":4,"integrity":"sha512-+Me7ngU8Y9tXINKbb7MQ4z0I+lLRCAXgKqnwkZMVZKBTIsp8RhKaGtDpohiny8CR8u68aeoIA5071PTBUvQ6NA==","signatures":[{"sig":"MEUCICqmf/Ajw33+vQS8hd+wYvXLLz5LDduYzpoUClRdejYEAiEAqMxqbT/Uy0XffT2V48HapHYOkRa1dGXGY+uabFBb+fc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70848},"main":"index.js","type":"module","gitHead":"ea48d2d523dd7655c87d4237d3634a46f0c97c11","private":false,"_npmUser":{"name":"o_alexandrov","email":"web@alexandrov.co"},"_npmVersion":"11.6.2","description":"Oxlint JS plugin for React hooks exhaustive-deps rule with enhanced configuration options.","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/oxlint-plugin-react-hooks_1.0.5_1767380903106_0.6933472882671694","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@10stars/oxlint-plugin-react-hooks","version":"1.1.0","license":"MIT","_id":"@10stars/oxlint-plugin-react-hooks@1.1.0","maintainers":[{"name":"o_alexandrov","email":"web@alexandrov.co"}],"dist":{"shasum":"b59e5ee50c5910718cd78eb34620d61e21bade3a","tarball":"https://registry.npmjs.org/@10stars/oxlint-plugin-react-hooks/-/oxlint-plugin-react-hooks-1.1.0.tgz","fileCount":4,"integrity":"sha512-SeEyQ4zCPgTgO9p1Y5NXROvKZSzLUNiVnu9yg7kmHIslNHu6Jw/jY/AnMKLSPSy0pzuESf11oRWSWhs4iLoy5A==","signatures":[{"sig":"MEYCIQC9fg1Sab4OtonM2EYxnfnZ8zwabI2mR2sqxnyNbHN4awIhALVNzYD1rZlj3QBz+4aRGvgWNjIOwysopD1XYtmt6hWK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72376},"main":"index.js","type":"module","shasum":"b59e5ee50c5910718cd78eb34620d61e21bade3a","private":false,"_npmUser":{"name":"o_alexandrov","email":"web@alexandrov.co"},"_integrity":"sha512-SeEyQ4zCPgTgO9p1Y5NXROvKZSzLUNiVnu9yg7kmHIslNHu6Jw/jY/AnMKLSPSy0pzuESf11oRWSWhs4iLoy5A==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/oxlint-plugin-react-hooks_1.1.0_1783006946030_0.5145874189502253","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@10stars/oxlint-plugin-react-hooks","version":"1.2.0","private":false,"license":"MIT","type":"module","main":"index.js","publishConfig":{"access":"public"},"_id":"@10stars/oxlint-plugin-react-hooks@1.2.0","_integrity":"sha512-DlZ1rmgx+a+LDlWBJ0hKua3+Kj+7DBjf0Q6M5iWOCgJJX748X5PsrYRmxEASmlOVPBWfdwgMHvBr83pB7X6DxQ==","_nodeVersion":"26.3.0","_npmVersion":"10.8.3","shasum":"4b260f07f9d6ebf1b4e0ce56fb497a5a5d276b26","dist":{"integrity":"sha512-DlZ1rmgx+a+LDlWBJ0hKua3+Kj+7DBjf0Q6M5iWOCgJJX748X5PsrYRmxEASmlOVPBWfdwgMHvBr83pB7X6DxQ==","shasum":"4b260f07f9d6ebf1b4e0ce56fb497a5a5d276b26","tarball":"https://registry.npmjs.org/@10stars/oxlint-plugin-react-hooks/-/oxlint-plugin-react-hooks-1.2.0.tgz","fileCount":4,"unpackedSize":74120,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDReowLCl8jfjJe5fEuhQUEBGAxpjvxkpSQZ/f4S15OwgIgExFkfeQCfJVostpF2AD94r++7GWpPSgJizSIhzmJoLU="}]},"_npmUser":{"name":"o_alexandrov","email":"web@alexandrov.co"},"directories":{},"maintainers":[{"name":"o_alexandrov","email":"web@alexandrov.co"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/oxlint-plugin-react-hooks_1.2.0_1787953242598_0.32104465226594825"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-02T13:54:40.749Z","modified":"2026-08-28T21:40:42.911Z","1.0.0":"2026-01-02T13:54:40.974Z","1.0.1":"2026-01-02T18:53:44.293Z","1.0.2":"2026-01-02T18:56:29.343Z","1.0.3":"2026-01-02T18:59:37.460Z","1.0.4":"2026-01-02T19:07:08.220Z","1.0.5":"2026-01-02T19:08:23.243Z","1.1.0":"2026-07-02T15:42:26.193Z","1.2.0":"2026-08-28T21:40:42.746Z"},"license":"MIT","maintainers":[{"name":"o_alexandrov","email":"web@alexandrov.co"}],"readme":"# @10stars/oxlint-plugin-react-hooks\n\nOxlint JS plugin for React hooks exhaustive-deps rule with enhanced configuration options.\n\nFork of `eslint-plugin-react-hooks` & [eslint-plugin-react-hooks-configurable](https://github.com/Donov4n/eslint-plugin-react-hooks-configurable) adapted for oxlint's JS plugin system.\n\n## Installation\n\n```bash\nbun add @10stars/oxlint-plugin-react-hooks\n```\n\n## Oxlint Configuration\n\n```json\n{\n  \"jsPlugins\": [\"@10stars/oxlint-plugin-react-hooks\"],\n  \"rules\": {\n    \"react/exhaustive-deps\": \"off\",\n    \"@10stars/react-hooks/exhaustive-deps\": \"warn\"\n  }\n}\n```\n\n## Built-in Defaults\n\nThe rule ships with opinionated defaults so you don't have to repeat them in every config:\n\n- `ignoreThisDependency`: `\"always\"`\n- `additionalHooks`: `(useUpdateEffect|useIsomorphicLayoutEffect|useDeepCompareEffect|useShallowCompareEffect|useCustomCompareEffect)`\n- `additionalStableHooks`: `{ \"useToggle\": [false, true], \"useToggleOnce\": [false, true], \"useRefCallback\": [false, true], \"useIsMounted\": true }`\n- `hookNamespaces`: `[\"React\", \"hooks\"]`\n\nAny option you pass is merged on top of these defaults and takes precedence. Built-in entries can be overridden per key (e.g. set `useToggle` to `false`) but cannot be removed.\n\n## Rule Options\n\n### `ignoreThisDependency`\n\nControl how `this` references (like `props.doSomething()`) are handled in dependency arrays.\n\nValid options: `\"never\"`, `\"props\"`, `\"always\"` (default: `\"always\"`)\n\n```json\n{\n  \"@10stars/react-hooks/exhaustive-deps\": [\n    \"warn\",\n    {\n      \"ignoreThisDependency\": \"always\"\n    }\n  ]\n}\n```\n\n### `additionalHooks`\n\nValidate dependencies of custom hooks. Supports position configuration for where the callback argument is located.\n\n```json\n{\n  \"additionalHooks\": {\n    \"(useMyCustomHook|useMyOtherCustomHook)\": 0,\n    \"useMyImperativeHandle\": 1\n  }\n}\n```\n\n### `additionalStableHooks`\n\nMark custom hooks as returning stable values (fully or partially).\n\n```json\n{\n  \"additionalStableHooks\": {\n    \"use.+Ref\": true,\n    \"useMyCustomUseState\": [false, true],\n    \"useMyQuery\": { \"data\": false, \"refetch\": true }\n  }\n}\n```\n\n### `hookNamespaces`\n\nNamespaces a hook may be called through, so `hooks.useUpdateEffect()` is treated the same as\n`useUpdateEffect()`. Without a matching entry the callee is a member expression, which every\nname-based lookup rejects: the hook is then **neither dep-checked nor recognised as returning stable\nvalues**, and it fails silently rather than warning.\n\nYour list is added to the defaults, never replaces them, so `React` cannot be lost.\n\n```json\n{\n  \"hookNamespaces\": [\"React\", \"hooks\", \"sharedHooks\"]\n}\n```\n","readmeFilename":"README.md"}