{"_id":"@ospm/eslint-plugin-react-signals-hooks","_rev":"59-8a46879b2c9b972b7f58e308528ff758","name":"@ospm/eslint-plugin-react-signals-hooks","dist-tags":{"latest":"1.6.5"},"versions":{"1.0.0":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.0.0","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.0.0","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"6edb3ac51120baaa2ae52a9d4c97bf3a6a33a9e5","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.0.0.tgz","fileCount":123,"integrity":"sha512-CGVoZmavnc1FT9dxXPdrFIlHyBUVq3AGJ1oKzF1HMnDolXxgpsxv8GZAttgA2bSP1k1godqapXUQvyzoEUnC5A==","signatures":[{"sig":"MEUCIGavYaHH/1W7xcPyNc8knezhKrP3QjJ+MxuA2K24Xp6ZAiEAnuv52UtD0IIx/C1yRifziAtzyeY+OzmHx8EstbgXBbQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":857048},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","engines":{"pnpm":">=10.0.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"de2e91efd7d92ba1a682e615d4e31c8a034f6859","scripts":{"lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:require-use-signals && npm run test:no-mutation-in-render && npm run test:prefer-signal-in-jsx && npm run test:prefer-show-over-ternary && npm run test:prefer-for-over-map && npm run test:prefer-signal-effect && npm run test:prefer-computed","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:require-use-signals && npm run test:fix:no-mutation-in-render && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-computed","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.cjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.cjs *.tsx","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.cjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.cjs --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.cjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.cjs *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.cjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.cjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.cjs *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.cjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.cjs --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.cjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.cjs --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.cjs *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.cjs --fix *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.cjs --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm/eslint-plugin-react-signals-hooks.git","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"packageManager":"pnpm@10.0.0","devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.7.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.0.15","@types/eslint":"^8.56.0","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-xss":"^0.1.12","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.7.0","eslint-plugin-cypress":"^5.1.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-perf-standard":"^1.0.3","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^9.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"@types/react":"^19.0.0","react-native":"^0.79.5"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.0.0_1753179224930_0.49967746176287253","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.0.1","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.0.1","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"22dd8d5b679816362ed9797809ac6bc8f6b48a91","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.0.1.tgz","fileCount":123,"integrity":"sha512-z0YzxVDBjh6QgOkZRB0Vh4zl+AsNEVcFnwckc8r+ZwzAXvn5CiGrFjFai/B8SdiswLkqdigKOuN94lpU7AvOyA==","signatures":[{"sig":"MEYCIQDKs+3Y5mm8riydfCnNx1da0BOkTcgUAPOXohGDjwgMzQIhALhYRBm18jwpQuh5UcakR4VpoPPk263drkE9a/72bfmg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":857484},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.js","engines":{"pnpm":">=10.0.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"42cba03e2d5bf1668c14dad502258af3783876fd","scripts":{"lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:require-use-signals && npm run test:no-mutation-in-render && npm run test:prefer-signal-in-jsx && npm run test:prefer-show-over-ternary && npm run test:prefer-for-over-map && npm run test:prefer-signal-effect && npm run test:prefer-computed","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:require-use-signals && npm run test:fix:no-mutation-in-render && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-computed","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.cjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.cjs *.tsx","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.cjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.cjs --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.cjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.cjs *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.cjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.cjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.cjs *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.cjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.cjs --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.cjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.cjs --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.cjs *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.cjs --fix *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.cjs --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm/eslint-plugin-react-signals-hooks.git","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"packageManager":"pnpm@10.0.0","devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.7.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.0.15","@types/eslint":"^8.56.0","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-xss":"^0.1.12","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.7.0","eslint-plugin-cypress":"^5.1.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-perf-standard":"^1.0.3","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^9.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"@types/react":"^19.0.0","react-native":"^0.79.5"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.0.1_1753181722613_0.3665773902975282","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.1.0","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.1.0","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"33c99afde97a3e2f9d469e39a0542c2ba9005ae4","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.1.0.tgz","fileCount":383,"integrity":"sha512-T+j+eXb7m0GqiDmu6MtLd3tXCFYVyV18eylOiE1YCQG8RJLb2/NpFAzS0EwtRcSxi6JZqTDSrldn9lslY50+UA==","signatures":[{"sig":"MEUCIQCWKSMAnyhcLxqxYCfsb0nXbUO2+OQW5pGqmwG2kVXnmAIgRo4miiN270IYoBWrDMsJRftKy8toZJcDz1Wh15t4iLc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4056501},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"04a15c6cffcca8070ca3fdefc194cdb09edead92","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-for-multi-mutations && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:consistent-rule-structure","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-for-multi-mutations && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:consistent-rule-structure","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-for-multi-mutations:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:consistent-rule-structure:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-for-multi-mutations:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:consistent-rule-structure:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:consistent-rule-structure":"cd tests/spec-consistent-rule-structure && npx eslint --config eslint.config.js *.ts","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:consistent-rule-structure":"cd tests/spec-consistent-rule-structure && npx eslint --config eslint.config.js --fix *.ts","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:consistent-rule-structure:simple":"cd tests/spec-consistent-rule-structure && npx eslint --config simple.config.js *.ts","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-batch-for-multi-mutations":"cd tests/prefer-batch-for-multi-mutations && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:consistent-rule-structure:simple":"cd tests/spec-consistent-rule-structure && npx eslint --config simple.config.js --fix *.ts","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-for-multi-mutations":"cd tests/prefer-batch-for-multi-mutations && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-batch-for-multi-mutations:simple":"cd tests/prefer-batch-for-multi-mutations && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-batch-for-multi-mutations:simple":"cd tests/prefer-batch-for-multi-mutations && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.1.0_1753808993175_0.20465633848060483","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.1.1","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.1.1","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"687ee45df7e7bd9ac0d7c4d80d441412823d4119","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.1.1.tgz","fileCount":383,"integrity":"sha512-YKziqhEIYe3ILk6hO1AiT9oLyGE7sSXA7OWXlrUnXJJlgHq3oYGSPkoFUc+faH+89rSAaBTaw/Yn9Ua9lvjjxw==","signatures":[{"sig":"MEUCICN6DgrjEbIO/YITiG3y1OH39VhC3d0ODUpe1s36ysNsAiEAgBxN6ckbzz6N+Cmu1oae2IZzfVz1YnaHJ3odKgM3HYM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4059270},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"49dffd02f41724090cbc24f9acce043f79fa52b2","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-for-multi-mutations && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:consistent-rule-structure","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-for-multi-mutations && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:consistent-rule-structure","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-for-multi-mutations:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:consistent-rule-structure:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-for-multi-mutations:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:consistent-rule-structure:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:consistent-rule-structure":"cd tests/spec-consistent-rule-structure && npx eslint --config eslint.config.js *.ts","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:consistent-rule-structure":"cd tests/spec-consistent-rule-structure && npx eslint --config eslint.config.js --fix *.ts","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:consistent-rule-structure:simple":"cd tests/spec-consistent-rule-structure && npx eslint --config simple.config.js *.ts","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-batch-for-multi-mutations":"cd tests/prefer-batch-for-multi-mutations && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:consistent-rule-structure:simple":"cd tests/spec-consistent-rule-structure && npx eslint --config simple.config.js --fix *.ts","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-for-multi-mutations":"cd tests/prefer-batch-for-multi-mutations && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-batch-for-multi-mutations:simple":"cd tests/prefer-batch-for-multi-mutations && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-batch-for-multi-mutations:simple":"cd tests/prefer-batch-for-multi-mutations && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.1.1_1753813263050_0.22188484429551392","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.0","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.0","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"736e5815aa41da608cf5700c4a90f83c27c940ba","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.0.tgz","fileCount":370,"integrity":"sha512-VqX5BP2c9uv04Vk0w7bjMPDOKHZfE/i7EbY66ugHN/I95WKQCNQLTI1SgDe/FAKIbYZO1bC5PVi3hAzjWbhtdQ==","signatures":[{"sig":"MEUCIQCebdGQUw7nqlU1CsCGKPNlCoZhwNHYKv/wR7FA8Z+xKAIgW/3pMbHq3i+uV+tS2r5c/nlbvGhq2hR8TXydLpwjf60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4104553},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"f16baaba3c33e84aa49ffea3336417cd5c0ea4f8","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.0_1754627853626_0.9325958870203976","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.1","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.1","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"35b28ca0b1235827e923b13acee8b074835740d6","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.1.tgz","fileCount":370,"integrity":"sha512-F1cj4qIeqJ4t7Gz0wyuqGRyDuxbS6HkaqJK9DiOQPJ5brdUyDnWZzb+Mgpg+SUP6yyDdD9qSOdVxr9vHHM8Rsg==","signatures":[{"sig":"MEQCIDPgXFgGRzXkC6fQkrZgMhs1itde0k8KOLLVAcJOR36bAiBSdYf6/Nh1aJTGwDqV9ZA2M1xqhStbx4G2v+Z9aHkFTg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4223913},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"360639aacd5f19293211f3ac32cb4957af29be05","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.1_1754654186564_0.5529780087427205","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.2","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.2","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"26511944af58e910ea4729b50948dade947b9326","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.2.tgz","fileCount":370,"integrity":"sha512-Dv5oHfz1lqZl0xkQVk7abn4jD0boOFhvLywr3J79ZnDLi8175XK1HqtZh4dDz+6JPtV1pBWc4VeJEcw7dadU6Q==","signatures":[{"sig":"MEQCIFCiKWkS05anz5d1pp99R+OHgOE23ioDuhspiiz3OnK8AiAzZR3xX9NjtYmh6/reQtfEr1WjQ5tbbNb3P+7rOl4IGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4237750},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"d164b894ff2c1cb365650c27ff87c836a9f6f9e5","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.2_1754656923005_0.8157297817727227","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.3","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.3","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"515a759ef093596d0b27742329b522107bd12074","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.3.tgz","fileCount":370,"integrity":"sha512-kiwRqmR3bj1Si+vJG62vh46l7pMQCiTiH2B4+4a7lH3bkbhShv6lse36M5T9tAKKlBOH5WeJBlq1kMsvQKzHjQ==","signatures":[{"sig":"MEUCIQDl0Kh74Dkn+oOZlmHZMmlLb3YftbbSDzkmp1kpAomDewIgdKvDXq7Ardyl/WP7ro760fbTmevt7cKU8dXDnLgt27I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4238729},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"747d45c6ea7809ea632f44aee0ca3ff7b94835a0","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.3_1754659194120_0.38848700952381154","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.4","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.4","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"17e3538f861e2e2c703b59536b616de5e8bdf6fb","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.4.tgz","fileCount":370,"integrity":"sha512-nceMS99k71C+hEhR4N0fp+0vbIYezg26/IVRY3hQb7Y5f2eicF/XhSCevhbxrilTRey8mBWuPcE52xD4AAs/ng==","signatures":[{"sig":"MEUCIAvNIQIQnKf6V2XT8UlmGy9EaVIcMwCVBzZ95T4UjnqpAiEAzawzwvTgEdesTBWk312tUxlv5NxU8guaHy9i9VUFRt8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4249201},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"8a1e203907914c7db22c290c1996b563641d898f","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.4_1754662629686_0.7048137863905981","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.5","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.5","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"d48d997db022ea1c59d1c4dbc62657c072aece69","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.5.tgz","fileCount":370,"integrity":"sha512-I/4dp7sNL0hOQVL1AfmYMzUhjRnJTHycd/wW37KUDJnJgLrZx4H/2QbuJ2EidAmI3FEFfEuovpfBi9ezmrho7Q==","signatures":[{"sig":"MEUCIQCowEe82aANi50u1WrLGY3XSAnI20G//f+IF+Bd1X6gMQIgbw5sLlczPoPSz9Gn+erYEGQtCra5bE66WHiTald5M1U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4286255},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"613a80968d2c761cb5314ae808d1ced225c2e866","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.5_1754671586704_0.14790516210761062","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.6","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.6","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"b90646dc35b76df4bc8656c1b95d75825ad8eaab","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.6.tgz","fileCount":412,"integrity":"sha512-jIl0ftfyLjAorm5DkzR8GahE4iwv4X3pQPJ71iQSW5/rXts5wVIAK3ajs0wLdZvo9YXEJLtr7sf6IQKglPO6nw==","signatures":[{"sig":"MEUCIQC7Hoy3g3iKiaIeJkfE1YGVIWrH5Uom9Hg0XYs8Pmbq+QIgKEILOA3raZNoiZiI6IQGObsVXmGK5M69WGfoXXhu2+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4532367},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"76e547f13b19281e48a5ce248d20da58a12d5c4d","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.6_1754777451152_0.18364387220076517","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.7","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.7","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"8582ecf97afebae9ac38453eab3dec6486867b29","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.7.tgz","fileCount":412,"integrity":"sha512-hCd8qN9Uk/oyWExshpFz8hEe3iI43Z8O/JZYYRpE1YbtIM6MMeqDML1HG9e2DnAJCLU+sdVw06DfVZxFqim8hw==","signatures":[{"sig":"MEYCIQDJiOkIFdUc2EwlRbIhnxkfuTb6RzTfaMC3UBRUBvActgIhAK7nRI3P0FuR9n/r5l2azXB1Tc5Vn7Yyc8LWtBXM09Lj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4534819},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"76e547f13b19281e48a5ce248d20da58a12d5c4d","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.7_1754777952104_0.15153251759812014","host":"s3://npm-registry-packages-npm-production"}},"1.2.8":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.8","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.8","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"19b33085d951a27843792e111bc114cf0a1c001e","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.8.tgz","fileCount":412,"integrity":"sha512-YN5Kn41ZYS/SwrNE38Im0eVJRNuKvpbL+0hkfpGX2xBpLPUIMCcvqLCVpsWMXf//kEIyHQ9M71LUjZ3veQjQnQ==","signatures":[{"sig":"MEQCIH20wWWkureNyzahlPcfI9NhSwSCjWsFTCtOHrxb9hukAiBLRZA1bHs0lq/uMLkBL1ts22jnCdVj65r4k67sHpHVSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4539581},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"fe493b8689f058191509dcc533031732d085f108","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.8_1754780360638_0.7575114145647106","host":"s3://npm-registry-packages-npm-production"}},"1.2.9":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.9","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.9","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"d55bd0262a81c0404df1f838df11d451ed695f9b","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.9.tgz","fileCount":412,"integrity":"sha512-sWT9kgd/sEU9RQPQdL5TV7H5lOa+1s8BMNiPsfUozZLQp/w46LrCqPaqIJJU7gYgAeIjL0CbJFIP5s9aNe7efw==","signatures":[{"sig":"MEUCIA4T60ry+SCRBSDQkzivVQkO13DPMF6ywgQyEUVwflctAiEA9Dil5BBf4la/+Qs+Bi0nXuSpb8sUPcbV/S3AAHawN0A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4541116},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"c3e60f8a661df925b4695b3b9deb72112fceeead","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.9_1754780607624_0.3903725395614075","host":"s3://npm-registry-packages-npm-production"}},"1.2.10":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.10","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.10","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"54ce41d6fe452885fdb960f444f02e3ad4dd3039","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.10.tgz","fileCount":412,"integrity":"sha512-Kt/MD4xuKLVJD+sd5vbOipcizAUIfrHNXH4us4gbJ7DaN7ckHj1XFrEbW9nwfYDK3OVrEnpkfiRdVVGtXGvteQ==","signatures":[{"sig":"MEQCIEsIkoAuZGflL+HH+pWRx4x8KlgzcXBGW7xnnm5CtRppAiBMikSxgffSAKN10g7Ul02IQ0TQ35aoVMlOVft4PZoEQg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4553254},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"2e5580e7a1b333ac518da94196ee782a12e1d6a1","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.10_1754781260456_0.7286080455687871","host":"s3://npm-registry-packages-npm-production"}},"1.2.11":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.11","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.11","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"2f1bdcdad31e056bc3c4ffd803bc2d1fff9e8d7f","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.11.tgz","fileCount":412,"integrity":"sha512-frZWlNONfqLluFwQzbjLcI33daXxQQdBRJonxbhg3uy/6V3awbrvMKDE7TIRG2TiGf7Wzj9Oj13fgwkygUG58w==","signatures":[{"sig":"MEQCIEZoLZjq3JscSRKhBy5WFQLz7sWgHSczZ5oHiPD3aRCpAiB29JC2883JEhYUvRcT2bBe5aC01MxF4vIlQgKf+XVpyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4563699},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"2e5580e7a1b333ac518da94196ee782a12e1d6a1","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.11_1754781830028_0.12344541679296928","host":"s3://npm-registry-packages-npm-production"}},"1.2.12":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.12","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.12","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"eb8d7fefd0d1cb3c7a0afd47ba07fecfa979e2c8","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.12.tgz","fileCount":412,"integrity":"sha512-Zp8sJN1H6aMLxWXJwOXw7weKY4e/yaWpFDVwJ6ViacgXo/D1zVtC4h1IXczhg53lPu2+Q1rgYIhqK2IsYaR2YQ==","signatures":[{"sig":"MEQCIBXDq4xZ1E8j2Dc/N1dCF2EF/3ztpCElq0KoE3L6GJWWAiAaOKMJh050YrnKWqt6eBq/NLOQ0UNyY0nPjAGEYrhmEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4580407},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"2e5580e7a1b333ac518da94196ee782a12e1d6a1","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.12_1754782254829_0.14148685776831793","host":"s3://npm-registry-packages-npm-production"}},"1.2.13":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.13","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.13","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"d9e8c5ee3c27e936a8e0e98c746c72003587c61d","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.13.tgz","fileCount":412,"integrity":"sha512-X7VmdPaijGGVxgJo+BreZtmLfBP/SQu1Eu/c9YM68Hx98N4dv8YiOZLYEBtvNgnEtSa+4EzcVS7Q3tB0VsJYCA==","signatures":[{"sig":"MEQCICbls5bHIDeupWBhH9pCwh/0kah9HT3oZzMZOtV2mW/TAiB+0JIDOxBWZOxdd4D8ZBfy881ccSLhO25zIxc9oV1VWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4598450},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"2e5580e7a1b333ac518da94196ee782a12e1d6a1","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.13_1754782897718_0.14026395395064895","host":"s3://npm-registry-packages-npm-production"}},"1.2.14":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.14","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.14","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"9f65ec3740c6ab39f00885e01cbbf45b97ac383b","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.14.tgz","fileCount":412,"integrity":"sha512-4C/nmtZBZNcu5G/ZhFc+dgCCfMSDspXk0hXDOx3w+J4DJv/566x06XqZIRFt2h+AJFUhFdCvDeRA8zXwlLnAvg==","signatures":[{"sig":"MEUCIGtr2mnmQ2ZHdqNbxPWYKl8+RJLd9Nh+TXOSZVHnBsSpAiEAvrGmC7HLNxwiuTVTT+4RbCfO6gXRiLqroCgMZcogPOw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4608538},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"2e5580e7a1b333ac518da94196ee782a12e1d6a1","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.14_1754786505494_0.07161450094462385","host":"s3://npm-registry-packages-npm-production"}},"1.2.15":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.15","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.15","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"6bcb76db20b8c81d619a9e81c335c47d5d96f859","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.15.tgz","fileCount":412,"integrity":"sha512-oDIBKHhcNs0DVVi6X36lBS+RFjAcM/7GlEhVBqZ0RtvfaZ8zQ+CZxq9Y/kN/Cecy/koywk/hKoW3IMIyqm96Aw==","signatures":[{"sig":"MEUCIFe8PUzjL/hwokXm+iD4kfNnBEiC8yQFqGr8lTw1y8WuAiEA8phLfKhihzd/4QRFbFM4E+z/ElOaaEhhHyKIoVN/tbY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4617725},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"2e5580e7a1b333ac518da94196ee782a12e1d6a1","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.15_1754787214243_0.531659138005673","host":"s3://npm-registry-packages-npm-production"}},"1.2.16":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.16","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.16","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"61ad3bc3e883b7cdaf991303e6892b4f24131198","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.16.tgz","fileCount":412,"integrity":"sha512-14HZFHQi+Go+CiTrVrf+l2gUY2k1MNu0vYHbkJQtKRCGEzcIjSriOKJEupNxnIY2Fpeqj9s3iDdNaCsP7Hg/5Q==","signatures":[{"sig":"MEUCIHu/uXMGAGwFbrwkxo7Q+K6AOfDWVBRr2jDT6ezz9wubAiEAgoU1eViIkRZJ3cEUiM5blxVOtRIiSAgHkIcO6fZEopk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4620551},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"2e5580e7a1b333ac518da94196ee782a12e1d6a1","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.16_1754787785512_0.28353759315418836","host":"s3://npm-registry-packages-npm-production"}},"1.2.17":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.17","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.17","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"c3717c79d5f98034d932844cfe80bda1c3b1a513","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.17.tgz","fileCount":412,"integrity":"sha512-Z4gcatEY5dRDQd8hK6oHLzNlETQ/PRqehVhpLfqMXQYJIT3ERfIL1hgwwiRZkwcfBXDaNenG4OL1CMgX4TAlNw==","signatures":[{"sig":"MEUCIEU2GJJNsBq/qhisG4qg17mTQprpp2W2dtMKirpm7gXfAiEAwFY1HEQJQw4v45rm1AK4r34Fxym0aVc0hFO8TteQZb4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4622689},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"2e5580e7a1b333ac518da94196ee782a12e1d6a1","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.17_1754788327311_0.9562530638982554","host":"s3://npm-registry-packages-npm-production"}},"1.2.18":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.18","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.18","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"5a1332b110b15ef8c62f8b3396b5c2409c5097fc","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.18.tgz","fileCount":412,"integrity":"sha512-43gWhLVZK+Natv9xyWOBynh05b8Pt/IxFUT7kMhEl5TFvVpxAhKJ3OxiTYX/GHeFWQFLS+eVMoCOIaFwmkmCfw==","signatures":[{"sig":"MEQCIDY+j+lqspB6f7CNvsdibRzrgmP3VaCn77+xcE3LogixAiBNtmbo3bBjxguXSFLtLV0JwTY6KYf17behVFwq9cAI4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4655888},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"2e5580e7a1b333ac518da94196ee782a12e1d6a1","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.18_1754788852301_0.17944368336040584","host":"s3://npm-registry-packages-npm-production"}},"1.2.19":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.19","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.19","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"55ab5782516215265c76d8c1e2d5eb4ec6905ca2","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.19.tgz","fileCount":412,"integrity":"sha512-mHL13EBlaybru6dF9sFaW0BM1OCYTh0F3cuf8VYdbVVW+L1ELhxDTnWPuJElrqnout94Z5JZs5Ksr0gBxbbxTg==","signatures":[{"sig":"MEUCIDn9ZB+YIc458BzXuTEQn4Ys/9ZMKAAw8vbCZOdYvgGqAiEAsDFy1wQ+7/suo3BhHG9koij/oPpdkJOok/+duEDkuF0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4717569},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"3b45daa69955b6d3e36266262a9961df81b2d692","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.19_1754811530415_0.05438477239102757","host":"s3://npm-registry-packages-npm-production"}},"1.2.20":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.20","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.20","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"df035bb980928bf79cbaf520960e5f0bee606049","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.20.tgz","fileCount":412,"integrity":"sha512-9oISgViGTtijkxbcLoDnqDUHKLxoBVGy8ybwvwMZDGaWhefGfu92T1dWnDepbUVsD0kHq1CjkZFUoOmiRyg37w==","signatures":[{"sig":"MEQCIGUyf6Q474DErgQqreFHNqJUgasaGUAm8DXt0p3ES8fQAiAEbP6bIhF32CR+RHFPl+mU5KCtK5/5VKhtnuO8F1VV1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4763767},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"3b45daa69955b6d3e36266262a9961df81b2d692","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.20_1754825959198_0.11219709514897191","host":"s3://npm-registry-packages-npm-production"}},"1.2.21":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.21","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.21","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"3d5efb397047236bff28f5f5156711d21702387f","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.21.tgz","fileCount":412,"integrity":"sha512-a8VwmuM1Q4g45L7yUjuvwNw6kNEUjpPjTXqrq8kqOVCaBQki0iic+zFeEX2S+0UbRGhr1s1Dm4RoYL6YZv1xgA==","signatures":[{"sig":"MEUCIQDErkgxNROPR8hif7QUeAZpcl0g2Wg5XTNO/HaAX5gYQQIgS8w3ahiYXjEvvYfXZkIzQ4YDoWN8lYTs5/4A/CCM/Ek=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4772334},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"3b45daa69955b6d3e36266262a9961df81b2d692","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.21_1754826851351_0.5774594390762913","host":"s3://npm-registry-packages-npm-production"}},"1.2.22":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.22","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.22","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"387e53be828b18bfd080e3f68023387663907c95","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.22.tgz","fileCount":412,"integrity":"sha512-dy/OP7oladrJbHy99p79yb+JgVyoY+jMj9Dy7UjUnrCv0Ejw2C4WH/BIbIZrRC6Ik2MtPhkraKlL04jkwPzyng==","signatures":[{"sig":"MEYCIQCHcPrG5aPd7jFl+Ts/16JrvdQXYgUt7t/vbWwTc30SNQIhAOQK7hklF+yoCV9YNg4mwseFP0ej5mSPSbrT5A6Vip6r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4780049},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"3b45daa69955b6d3e36266262a9961df81b2d692","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.22_1754827815898_0.7453751461084448","host":"s3://npm-registry-packages-npm-production"}},"1.2.23":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.2.23","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.2.23","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"0e67367bb88854b3939cd8f04e8ddeae86b10578","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.2.23.tgz","fileCount":412,"integrity":"sha512-XNdSqLW12IghSEnYHXQ84SG4nWacWaIap5UMTDr/t/t2bJKD0nU0qeeAPY8TdQ78AbHUeL7s65eJqAMGxqMRKA==","signatures":[{"sig":"MEUCIHBj7SLtbg1N7HsbNgigNYttW1LJfeo3GKzHUR23PuxKAiEA/k6TauwTkA0+u7LIRu/HmW4Krw07OsdBBnyD7LikLqk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4794384},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"3b45daa69955b6d3e36266262a9961df81b2d692","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.2.23_1754828509327_0.1426665295937981","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.0","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.0","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"34667cba155e04b7fccce3f5d4e259ba337d004f","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.0.tgz","fileCount":426,"integrity":"sha512-1+wByHlD3FxFY8u8Y53FgU3lUZZCDiuO/FFQXsNuhiAlvh0ukwucBfuF5BjsMSAYZzB5hkH1CrQRvExKcgFTiA==","signatures":[{"sig":"MEUCIQCLANrNmpvWHppH0F6lQFa+SPAkQ+OgRLQvXUQadhtwdwIgZ7801UauDC2cm/c84YH7Q0emjkKlaDxUObmXrTu8MOg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4926732},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"c88a0c84225558e034f5690c872899a8a37363b5","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.0_1754842240385_0.44961003207708683","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.1","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.1","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"3318bdde3e5c0f1fbd206fd0bbcf93d69849b5a8","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.1.tgz","fileCount":426,"integrity":"sha512-+whs/KzVAWIgcoaa4mgPx9v5q8LQCxI7bPVISGmWsugq0/5DsWkvbIzP+ruuLRfE1ntElCCb4reoKzrXe69LGA==","signatures":[{"sig":"MEYCIQDKMZ4z8We+wQ01otKIfCdI6E17sGoxx1pgNMQQidn4EwIhAOzZDj35+CL7YpJgNTz7ElCBtCn8btBRq1EGhu3qpuiW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4946798},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.1_1754881469020_0.37448251315966674","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.2","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.2","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"2b9c8f612134aae735975f9cc876e4fea715cf46","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.2.tgz","fileCount":426,"integrity":"sha512-Fcv9wmOb9l+nsKE5X2lNN4ESFBbXllnvuP+P/usOJxJ5b3v1UsyW9ggPsrjHUpZI0D8SHB4k6QRsZzByLUg0lg==","signatures":[{"sig":"MEYCIQCxyyIAmHeb3ao8WIMT6O3EVu7msaLk32ohUEY2O7uujQIhAJFwHfblillyOul4VnWb12zqt0OM3jM8006a0VWj0oQA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4947260},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.2_1754882010890_0.7333137065235169","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.3","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.3","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"e6d0371b2c7ca4f5739b72dd20d89ff6bdad8e6b","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.3.tgz","fileCount":426,"integrity":"sha512-QA8k0iFR9BkS40SEL3HkT7jI/rbXXfCA8j3ocLXDDkPnmV9MT0vKr4owFu0fLjyngi55LuBxGAFf3ZB/nJvw1A==","signatures":[{"sig":"MEYCIQDHUtR8sjc8HnzxtGXHA2vKkLh/sK0alUFnz6clKfeCogIhALR04aJ4xRFcnpjZxw//ALfreJKRtCKk6iP9i1+cygfx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4948445},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.3_1754882446665_0.5973046212929793","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.4","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.4","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"13e42e2d82b773a26e3262dc7aaf4561328f2286","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.4.tgz","fileCount":426,"integrity":"sha512-gQR1Rak4DPMEuySUphBBXFLgenRtTDtEr1oq8cGNMez6NAanycNtOxRV+Wg0QcLmTuOSObK6UjDxNV+XbEA6vA==","signatures":[{"sig":"MEQCIHUhjZX9w5nILQl7DKgGeSgu41KCfUWFnO8ZayxJYygoAiBQ6wvQrpIyYbxfFXno/tkqBtsSq/1NDBIc/V+wpxFHfQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4992388},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.4_1754888646031_0.3669438919447332","host":"s3://npm-registry-packages-npm-production"}},"1.3.5":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.5","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.5","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"79b323ef02f9240ce29f9c071b033e23767bb709","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.5.tgz","fileCount":426,"integrity":"sha512-Lx1q5mOzNL3IAtgSKWbdwob7FB8RpQUtwzEGL5BPNBAIfJP1HlG9bY5sMNcLjbRzYMBYAk+x+pdwtI6FDQMvag==","signatures":[{"sig":"MEUCIQChjN/jr7s7XvpKylhJychN+Y5z0UZTBAQiSLq83nDnjAIgMnmBzXuE+qpKviBTzsJHrBsnKmxX5WZtozfATf3mWAE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4997612},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.5_1754889676021_0.6012717162245338","host":"s3://npm-registry-packages-npm-production"}},"1.3.6":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.6","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.6","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"9948c97e0f6602c74990b3c3e0d855e428d5d15f","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.6.tgz","fileCount":426,"integrity":"sha512-fy4GYYuWxTv/IwEXLNzd5e3qmaNDvfOoAC8uqYldmKU2MAU2Sx47bM3DIN8KRxOqTuVWxjktuGS76no7CgSFyQ==","signatures":[{"sig":"MEUCID1twVfJDoxIroTpICmynqu0CMhsCJzMG1p8SjeZMYYNAiEA0wNJ3Hqoi9NBbhC1jW8ezweaKext448ADX2/igNp+9Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4997668},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.6_1754890656838_0.5241561510488297","host":"s3://npm-registry-packages-npm-production"}},"1.3.7":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.7","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.7","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"df812ee37b7bfa227706d34dcdc802fefed30f7b","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.7.tgz","fileCount":426,"integrity":"sha512-veT0ho0pS7X4A2L1YdddtHQ5pPiacc/iAY+NAT/2wMt6lBNwqEEcfkBaoctWwo3rWrCosYb7rgAVYA2dK82sUg==","signatures":[{"sig":"MEQCIEZXxp0P8AR3EOyXtDWHB4+B11g4TyWqH6fmnA1YBa2AAiAr9X9JIIChigdGITRRHjQmD5fWy0vDQarzAWZby4x++g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5014823},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.7_1754891659036_0.7820921069193609","host":"s3://npm-registry-packages-npm-production"}},"1.3.8":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.8","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.8","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"7a6cfe522d9b1eeb3f2326f762dc406e94251686","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.8.tgz","fileCount":426,"integrity":"sha512-VM2DVvf9HaoQtkdLbutRCObPBF29/xgdII0sPxADSTxk5dPaNHbEhWjMbl6VG8hONtD+hb7NiLHr35NsXBSMew==","signatures":[{"sig":"MEUCIQDebxJjPQ/TahMKo4NLvO6oMRHF//tIxJFScV5+N6IbRwIgFOqhVwgqTljJi9TfRVLWogVUcyFWiY/OUXQPbDjjj4s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5021017},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.8_1754893113195_0.15448130720364106","host":"s3://npm-registry-packages-npm-production"}},"1.3.9":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.9","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.9","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"3f193de60035c7b374f188f45718479dc2b7a5f2","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.9.tgz","fileCount":426,"integrity":"sha512-VDjj1bv6wRqwjEu86aa1RZfncXhp3BAGfSeR4uuJu/S44PWKjRsdOE6jYEi/pYzMtRc8bVyKSfe4zQ4I8vhkyQ==","signatures":[{"sig":"MEQCIEuBI33TIsOyN8sB4qKMQFJP+HFOBEr2C8iVukOF6123AiBvqxTTxf59jd2MLmU4NKILpf6ts0xYKRnWdLL+8dcxMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5028964},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.9_1754907963702_0.16005294138918114","host":"s3://npm-registry-packages-npm-production"}},"1.3.10":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.10","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.10","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"dbeda08029813671166153843e1565044c015562","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.10.tgz","fileCount":426,"integrity":"sha512-z2KM+Plr3co0Khm5kEsCqlXawpxZb4FaH1pWnpbpOiPo/s22fFEtIrBzlgHSnhABzz6T/ArJlYg3LC1f7UNITw==","signatures":[{"sig":"MEQCIH5WOXMRJefHi1fR4lWTfHTszdBRshdlVm8CsXZ3UDFGAiAjtvEaqqBB2cWsBg10y45XmhLoAq0VU+1KDtfS6FfIEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5029992},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.10_1754909190772_0.9367289307634628","host":"s3://npm-registry-packages-npm-production"}},"1.3.11":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.11","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.11","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"767bc429608ea564bf749d26582f981343c519f6","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.11.tgz","fileCount":426,"integrity":"sha512-NHTKdLGXIV5XiK3iCwAyneFH835hlc5QGeelfrfUqWvRjw4x2y2wN1tHdog2nSCQ1RRP7W4yIzVzh4ymoPLlRw==","signatures":[{"sig":"MEUCIQDWbwYHIYFrPT09wVcYT1qeGfLCqEpqBPhykh8InU/s9wIgTRJTgHQQcTLWnUv7ysvZM6C1FaozEV82Rpmflp+HAME=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5035433},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.11_1754909956546_0.012990415216182383","host":"s3://npm-registry-packages-npm-production"}},"1.3.12":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.12","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.12","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"6f4ba10c19143fb1365d09bcb23c28b04d80c1ab","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.12.tgz","fileCount":426,"integrity":"sha512-gjaJwhMYeEAj7beEHcmy+qSHbI1yoVSnzN9r4tHoY0ymqGKJJKHLCmvIGenCiL1WtBjA5q1Wo5F57K4XZJCJZQ==","signatures":[{"sig":"MEQCID29t1czyIs44ePYgqZNT5e/rYGQj6JFd9C5XUrEytF5AiBN0s0NQpnG0AdZo96HX+QgGszwSf/26afh9o5KwLpSOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5038513},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.12_1754910676603_0.6635238802773777","host":"s3://npm-registry-packages-npm-production"}},"1.3.13":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.13","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.13","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"50b0ac41d12ca3a4ba729a8d7b9aa4c8c63bf353","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.13.tgz","fileCount":426,"integrity":"sha512-1heHdRgrv0xctFlfGHpFWO987VqRWEeisUII695nvUp78lF5E79UJVuWv+58uUM+zQyyABNYyD+LAg/QYWXrYw==","signatures":[{"sig":"MEUCIGclJc3RMaxzeeyuHcp/SVspaVjbSG0WzpegVQR2DUUFAiEA1wrC6Kj0hmfm/Zlx7tDe/tuAJNpIAOLdG/Z0gDg2qbI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5043055},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.13_1754911908642_0.7575544762560338","host":"s3://npm-registry-packages-npm-production"}},"1.3.14":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.3.14","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.3.14","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"70b3546d4fb5f17fa293ed5ad35b80c2d6359137","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.3.14.tgz","fileCount":426,"integrity":"sha512-epn2eD1VhOKezl6+b6/4THalURyl12Yo9zjHy9vSZR/J4haju0fyAm43AVGNL+bO/7LyXJKKouRDbTk8Xw/QCQ==","signatures":[{"sig":"MEUCIDxBoBoTtq47YtyWA/I6rrue3uxiSFjWslNktQXNgWEwAiEAsWL0zrRsA1qj7hWe7S5iOebGy3n0Q13wRARaYJ0ySOg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5062656},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"70bf0bcbc5625c2800b39e13fdcc192aeacac454","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.3.14_1754919734160_0.41574382014765265","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.4.0","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.4.0","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"7b34515bc568b7931a06dfdc503a598964727af2","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.4.0.tgz","fileCount":468,"integrity":"sha512-kldjvpuy6wY8NdBzkEOF80wdi/Rs6Xcp6VZoP0kuD28bpReob3rSWmDCxiB/5kS067Dq4IIZ+xBdLSzz33ApYQ==","signatures":[{"sig":"MEUCIH50WaJjg8oxxLRUluP+VtUOu48xFKeXiOhZ3SKCLPAEAiEAlE2+2GTcr659cGzJZTw8PHBuwcDYQROgDC4rbrhJibQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5439008},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"04830c958f8d928a73d17e66fc4759f4d050ff83","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.js *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.js --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.js *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.js --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.4.0_1754991076028_0.3672432800783241","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.4.1","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.4.1","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"e03977d73fb6d8aaf332cec5d95ebb16b70d5e64","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.4.1.tgz","fileCount":468,"integrity":"sha512-xYM2Oyzf4ZUXaT3+tFfD1sY1n/ShL4Pxc+BUNZ/FL3vs+zQD0Z0v7TRMFD+U7FyIjhijKpzJxAZf45kZOr6+7w==","signatures":[{"sig":"MEUCIQD7VizjD0MNbdey7/+eJYGzBqFdgzOshL/f9nG9fxDlKQIgTITWuCpVODoOKR9EEbysUUUBrs1y1Mo2O0fHVZfSTfA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5442489},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"04830c958f8d928a73d17e66fc4759f4d050ff83","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.js *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.js --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.js *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.js --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.4.1_1754992840772_0.8936350592025537","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.4.2","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.4.2","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"7ffc24430c0c89ede9525d97a3899fb004aa11a4","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.4.2.tgz","fileCount":468,"integrity":"sha512-5krQSR0V9d6gJ+H/dlMglMbJxSCIJddfOZokgqzHL63hUHcgi16Zh6Hu/nPrOf47efNjnh8PK+5hg82qXaf40w==","signatures":[{"sig":"MEUCIDcn3vfYflbkz65tSfTTTYbjnkZ3+AZunhfRll4/nJsTAiEA88WSytfiFWPHe+8PkVCSEHRmoFbpOEIsgj76TeMcFWQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5451402},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"04830c958f8d928a73d17e66fc4759f4d050ff83","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.js *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.js --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.js *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.js --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.4.2_1754994001525_0.02335588169373537","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.4.3","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.4.3","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"c2ff628b19c7ab25747a243995d58ddb945c6a8b","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.4.3.tgz","fileCount":468,"integrity":"sha512-LHy13+7JzqDV7GYo45mFEqLt8/Nj7yO/wQYxw6XGt4gP6QIShVhjd8eG4DSJ4bXc9g8KN0BXDnTLRD7E9+81gA==","signatures":[{"sig":"MEYCIQCrP3SCHWdTqpMHRJ+5LGMjeCWDsj2cTrdMm/PRwk4OMgIhAKdA57fYeojV3bnOpK9tvSQea4WBiKB48ohBdmBK/Xtw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5449953},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"04830c958f8d928a73d17e66fc4759f4d050ff83","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.js *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.js --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.js *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.js --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.4.3_1754994709321_0.1071668013581637","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.4.4","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.4.4","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"1c336d241fead4e92d034e2025162ec0b5b95962","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.4.4.tgz","fileCount":468,"integrity":"sha512-guKkcTkkv1PqChXuEb+yTYQC+NntuIy8jXzo1WnB0fV86VxY2Ytzur96qfIVlnhIflHt90sPoo9kPToOzk8KvQ==","signatures":[{"sig":"MEYCIQCNj5N+hK/P/Fzkz7UaAt+GXFF4GeK/1lupyWPlqluw7AIhALs1HtR3iOWW+6ngJmsfyvD1hAK9oiPK71qb/ZPno484","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5449536},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"04830c958f8d928a73d17e66fc4759f4d050ff83","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js *.tsx *.ts","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.js --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.js --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.js --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.js --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.js --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.js *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.js *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.js --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js *.tsx *.ts","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.js --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.js --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js *.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.js --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.js --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.js --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.js --fix *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.js --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.js *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.js --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.js --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.js --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.js --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.js --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.js --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.js --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.js --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.31.0","oxlint":"1.8.0","globals":"^16.3.0","typescript":"^5.8.3","@types/node":"^24.1.0","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.2","eslint-plugin-n":"^17.21.0","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@types/react-native":"^0.73.0","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.8.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.38.0","@typescript-eslint/utils":"^8.38.0","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.38.0","@total-typescript/ts-reset":"0.6.1","eslint-plugin-eslint-plugin":"^6.5.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/scope-manager":"^8.38.0","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.4.4_1754995627557_0.47578622807217763","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.5.0","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.5.0","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"fe7e855729a10a41a59a36997a3d47a59435403b","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.5.0.tgz","fileCount":497,"integrity":"sha512-z4gXDp279dGh/Zjm4u7oTB3GHXXkQ+ezBGlEiiZvSzpfm7vFrdb4mKATRGt6ubtthwpa9X/ZB2M7UNiIO4ku0Q==","signatures":[{"sig":"MEUCIQD0XNTVQJyLfKshkFo2AKlfEQd2OyPMFj1eXKcMsOsW0AIgc8ShkZYhRAA3B2SPDjThul0r7BNvsgadJakXJHeKesE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6270180},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"566850c154e583b35695c1a8d4b30cef88698401","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment && npm run test:forbid-signal-update-in-computed","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment && npm run test:fix:forbid-signal-update-in-computed","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple && npm run test:forbid-signal-update-in-computed:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple && npm run test:fix:forbid-signal-update-in-computed:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs *.tsx *.ts","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs *.tsx *.ts","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs --fix *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:assignment-only":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs assignment-only.test.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs --fix *.tsx","test:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs *.tsx","test:exhaustive-deps:optional-chains-duplicates":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs optional-chains-duplicates.test.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.33.0","oxlint":"^1.11.2","globals":"^16.3.0","typescript":"^5.9.2","@types/node":"^24.2.1","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.4","eslint-plugin-n":"^17.21.3","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.11.2","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.39.1","@typescript-eslint/utils":"^8.39.1","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.39.1","@total-typescript/ts-reset":"^0.6.1","eslint-plugin-eslint-plugin":"^7.0.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.39.1","@typescript-eslint/scope-manager":"^8.39.1","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.5.0_1755585916900_0.975769161824154","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.5.1","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.5.1","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"49f45f0e9d24d3d70d65b01c518c6bc86f477adc","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.5.1.tgz","fileCount":497,"integrity":"sha512-Y1TE1jMbzmybRKeBahDTQzw3RMwcJb1Qut3Nukqo93IBVrlEBRVu0Mi9IM/l4O1jYI5Apq3AAggIoBUt1tRltA==","signatures":[{"sig":"MEUCIDcvMMp/IFxW5Xrs4V/tYsCT1tvfWvNDcvdzg/1AhKZKAiEA/n/w4kaJ+3NZy9lYI2AvbtqXZu/Ap8MeDl7xClay1iY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6305669},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"566850c154e583b35695c1a8d4b30cef88698401","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment && npm run test:forbid-signal-update-in-computed","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment && npm run test:fix:forbid-signal-update-in-computed","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple && npm run test:forbid-signal-update-in-computed:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple && npm run test:fix:forbid-signal-update-in-computed:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs *.tsx *.ts","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs *.tsx *.ts","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs prefer-show-over-ternary.test.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:assignment-only":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs assignment-only.test.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs --fix *.tsx","test:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix prefer-show-over-ternary.test.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs *.tsx","test:exhaustive-deps:optional-chains-duplicates":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs optional-chains-duplicates.test.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.33.0","oxlint":"^1.11.2","globals":"^16.3.0","typescript":"^5.9.2","@types/node":"^24.2.1","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.4","eslint-plugin-n":"^17.21.3","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.11.2","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.39.1","@typescript-eslint/utils":"^8.39.1","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.39.1","@total-typescript/ts-reset":"^0.6.1","eslint-plugin-eslint-plugin":"^7.0.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.39.1","@typescript-eslint/scope-manager":"^8.39.1","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.5.1_1755598597487_0.664912258473225","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.5.2","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.5.2","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"7bdf2b5ead62dd95e214f17f997f2773878bdcd7","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.5.2.tgz","fileCount":497,"integrity":"sha512-y1sCgVYfnbI+UVpprbVEmRJWIr95dJc7TLesw6FNK80B+eNTvSY+TWFI2SZFpYXd41gMm2ZLK9rsYv8fMqQRWg==","signatures":[{"sig":"MEUCIQD+mfNsYLe19FrCqvmwtgzc4EVBqe17CgxK8TXWBKX3VAIgOP9/aqBdoRZHJwzL1vk2B/1+GxENqaaWyx9f7tEhIhA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6288849},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"566850c154e583b35695c1a8d4b30cef88698401","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment && npm run test:forbid-signal-update-in-computed","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment && npm run test:fix:forbid-signal-update-in-computed","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple && npm run test:forbid-signal-update-in-computed:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple && npm run test:fix:forbid-signal-update-in-computed:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs *.tsx *.ts","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs *.tsx *.ts","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs prefer-show-over-ternary.test.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:assignment-only":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs assignment-only.test.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs --fix *.tsx","test:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix prefer-show-over-ternary.test.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs *.tsx","test:exhaustive-deps:optional-chains-duplicates":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs optional-chains-duplicates.test.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.33.0","oxlint":"^1.11.2","globals":"^16.3.0","typescript":"^5.9.2","@types/node":"^24.2.1","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.4","eslint-plugin-n":"^17.21.3","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.11.2","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.39.1","@typescript-eslint/utils":"^8.39.1","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.39.1","@total-typescript/ts-reset":"^0.6.1","eslint-plugin-eslint-plugin":"^7.0.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.39.1","@typescript-eslint/scope-manager":"^8.39.1","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.5.2_1755599266111_0.6537927624188205","host":"s3://npm-registry-packages-npm-production"}},"1.5.3":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.5.3","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.5.3","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"3da9d5be07f65ab572f7ce9919b25cba80b4a117","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.5.3.tgz","fileCount":497,"integrity":"sha512-ac25B92+Pl1k04NfVjAEsCv3o5V9oEFl4EMb35WC6QSrAB9EE6NPGivQ911iX/WjjjSAOdxoJjfDAoWZ1sqkPg==","signatures":[{"sig":"MEYCIQDWUNgUCDSVyHQb0MCZ1TlntkuizXtfuJLQhW7ItkRCCQIhAKnxbUa5fI4eTi0oDo2XU9TD654fX4QQJNSm9m2xfYes","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6288849},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"171a762eeb6effb1d43b69d8f315ea0c30630995","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment && npm run test:forbid-signal-update-in-computed","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment && npm run test:fix:forbid-signal-update-in-computed","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple && npm run test:forbid-signal-update-in-computed:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple && npm run test:fix:forbid-signal-update-in-computed:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs *.tsx *.ts","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs *.tsx *.ts","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs prefer-show-over-ternary.test.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:assignment-only":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs assignment-only.test.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs --fix *.tsx","test:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix prefer-show-over-ternary.test.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs *.tsx","test:exhaustive-deps:optional-chains-duplicates":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs optional-chains-duplicates.test.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.33.0","oxlint":"^1.11.2","globals":"^16.3.0","typescript":"^5.9.2","@types/node":"^24.2.1","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.4","eslint-plugin-n":"^17.21.3","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.11.2","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.39.1","@typescript-eslint/utils":"^8.39.1","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.39.1","@total-typescript/ts-reset":"^0.6.1","eslint-plugin-eslint-plugin":"^7.0.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.39.1","@typescript-eslint/scope-manager":"^8.39.1","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.5.3_1755600755630_0.9970460188418901","host":"s3://npm-registry-packages-npm-production"}},"1.5.4":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.5.4","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.5.4","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"d6455c573c8215388e668ea304414cff1d2ad290","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.5.4.tgz","fileCount":497,"integrity":"sha512-T0KbCj1pBELKxzm03me5jlpk+Rruv7rePHvfgaVdDp9gWydRqCWFmNjFx2hEvaSK2bkU0b0Zvb8hu+axjge2rA==","signatures":[{"sig":"MEUCIQDdrx10W23celfUvA1zn7F4PIRqHuMMMWeH0VllmePVqAIgM1OvkZITWWHewzRJ+xkmLOJDVqAm1A4IoLhA7LeR5+s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6293746},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"171a762eeb6effb1d43b69d8f315ea0c30630995","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment && npm run test:forbid-signal-update-in-computed","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment && npm run test:fix:forbid-signal-update-in-computed","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple && npm run test:forbid-signal-update-in-computed:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple && npm run test:fix:forbid-signal-update-in-computed:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs *.tsx *.ts","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs *.tsx *.ts","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs prefer-show-over-ternary.test.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:assignment-only":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs assignment-only.test.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs --fix *.tsx","test:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix prefer-show-over-ternary.test.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs *.tsx","test:exhaustive-deps:optional-chains-duplicates":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs optional-chains-duplicates.test.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","dependencies":{"valibot":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.33.0","oxlint":"^1.11.2","globals":"^16.3.0","typescript":"^5.9.2","@types/node":"^24.2.1","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.4","eslint-plugin-n":"^17.21.3","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.11.2","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.39.1","@typescript-eslint/utils":"^8.39.1","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.39.1","@total-typescript/ts-reset":"^0.6.1","eslint-plugin-eslint-plugin":"^7.0.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.39.1","@typescript-eslint/scope-manager":"^8.39.1","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.5.4_1755601329752_0.37521184963052767","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.6.0","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.6.0","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"5c2d0bc3b9109ee657ed2c93a6dc5b0a1d355940","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.6.0.tgz","fileCount":525,"integrity":"sha512-zNpVMd7iUfoQNO1nzf0fB/jC7UL+2zL8MaxPrY2Yh+GJeapn02n7Ur4KakDu3DMDyNRgiqesNfNugfGae134SQ==","signatures":[{"sig":"MEQCIByUePsl05wQheEMfa142inXvkSLMfbR4tSnI2Fw8UfhAiB5xkjr8/4ti9Vm089nt8dPol7PhhmbxCFQ7FM44jEEgA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6495601},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"062d1b2e8e457f833a5886b7012fff5dc6f1e487","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-use-computed-in-react-component && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-use-signal-effect-in-react-component && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment && npm run test:forbid-signal-update-in-computed","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-use-computed-in-react-component && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-use-signal-effect-in-react-component && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment && npm run test:fix:forbid-signal-update-in-computed","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-use-computed-in-react-component:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-use-signal-effect-in-react-component:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple && npm run test:forbid-signal-update-in-computed:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-use-computed-in-react-component:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-use-signal-effect-in-react-component:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple && npm run test:fix:forbid-signal-update-in-computed:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs *.tsx *.ts","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs *.tsx *.ts","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs prefer-show-over-ternary.test.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:assignment-only":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs assignment-only.test.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs --fix *.tsx","test:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix prefer-show-over-ternary.test.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-computed-in-react-component":"cd tests/prefer-use-computed-in-react-component && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs *.tsx","test:exhaustive-deps:optional-chains-duplicates":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs optional-chains-duplicates.test.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-computed-in-react-component":"cd tests/prefer-use-computed-in-react-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-effect-in-react-component":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-computed-in-react-component:simple":"cd tests/prefer-use-computed-in-react-component && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-use-signal-effect-in-react-component":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-computed-in-react-component:simple":"cd tests/prefer-use-computed-in-react-component && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-effect-in-react-component:simple":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-use-signal-effect-in-react-component:simple":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config simple.config.mjs --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.33.0","oxlint":"^1.11.2","globals":"^16.3.0","typescript":"^5.9.2","@types/node":"^24.2.1","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.4","eslint-plugin-n":"^17.21.3","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.11.2","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.39.1","@typescript-eslint/utils":"^8.39.1","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.39.1","@total-typescript/ts-reset":"^0.6.1","eslint-plugin-eslint-plugin":"^7.0.0","eslint-plugin-optimize-regex":"^1.2.1","@typescript-eslint/eslint-plugin":"^8.39.1","@typescript-eslint/scope-manager":"^8.39.1","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.6.0_1755803089403_0.15911752858786055","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.6.1","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.6.1","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"bca650214677d419448f5e6295b2b5d5bb92ad67","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.6.1.tgz","fileCount":525,"integrity":"sha512-a5Trf170tx/GNJq8JxZfdECD226biY2ZLFT/OvlAGbG+Z/ed0NXLItmx8u27OWpOWvAf4iSVHfcuuujhLT+FIA==","signatures":[{"sig":"MEUCIGiDFOaNsAtd8e+famTRQWv6Z2HiogbarXEDjJJXmZNbAiEA4kaP1m2n2OCS3CJmKvWwXE07DEMg+f5LZXT7rlb40lw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6497540},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"5e8758e4a60bfa77c09779fb945e390585cc4b63","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-use-computed-in-react-component && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-use-signal-effect-in-react-component && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment && npm run test:forbid-signal-update-in-computed","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-use-computed-in-react-component && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-use-signal-effect-in-react-component && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment && npm run test:fix:forbid-signal-update-in-computed","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-use-computed-in-react-component:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-use-signal-effect-in-react-component:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple && npm run test:forbid-signal-update-in-computed:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-use-computed-in-react-component:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-use-signal-effect-in-react-component:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple && npm run test:fix:forbid-signal-update-in-computed:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs *.tsx *.ts","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs *.tsx *.ts","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs prefer-show-over-ternary.test.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:assignment-only":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs assignment-only.test.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs --fix *.tsx","test:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix prefer-show-over-ternary.test.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-computed-in-react-component":"cd tests/prefer-use-computed-in-react-component && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs *.tsx","test:exhaustive-deps:optional-chains-duplicates":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs optional-chains-duplicates.test.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-computed-in-react-component":"cd tests/prefer-use-computed-in-react-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-effect-in-react-component":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-computed-in-react-component:simple":"cd tests/prefer-use-computed-in-react-component && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-use-signal-effect-in-react-component":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-computed-in-react-component:simple":"cd tests/prefer-use-computed-in-react-component && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-effect-in-react-component:simple":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-use-signal-effect-in-react-component:simple":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config simple.config.mjs --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.33.0","oxlint":"^1.11.2","globals":"^16.3.0","typescript":"^5.9.2","@types/node":"^24.2.1","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.4","eslint-plugin-n":"^17.21.3","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.11.2","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.39.1","@typescript-eslint/utils":"^8.39.1","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.39.1","@total-typescript/ts-reset":"^0.6.1","eslint-plugin-eslint-plugin":"^7.0.0","eslint-plugin-optimize-regex":"^1.2.1","@ospm/eslint-plugin-eslint-rule":"workspace:*","@typescript-eslint/eslint-plugin":"^8.39.1","@typescript-eslint/scope-manager":"^8.39.1","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.6.1_1755805380436_0.7485866420725833","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.6.2","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.6.2","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"9e3f87e62ea7ab08a249f58a4e5b6127c3b3991a","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.6.2.tgz","fileCount":525,"integrity":"sha512-t/H69XXqDvkLbmWhfdmH/hGn2pdUR8hn4lGOVx9RMAeL27OHemhv60tLeKiObflfGInKqepN9WmEVSZpAiDXVw==","signatures":[{"sig":"MEYCIQDJV4J/R1c5/BfKmUMXlwMPgOfljt/HxOmtoss7PlsJnwIhAKGbrOMpczQLOqOtYOcw77iP2sggosw3IImYMrAWZU7/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6476325},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"d6c05a195cd241ccaf3161f45f4fa876e983cc89","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-use-computed-in-react-component && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-use-signal-effect-in-react-component && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment && npm run test:forbid-signal-update-in-computed","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-use-computed-in-react-component && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-use-signal-effect-in-react-component && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment && npm run test:fix:forbid-signal-update-in-computed","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-use-computed-in-react-component:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-use-signal-effect-in-react-component:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple && npm run test:forbid-signal-update-in-computed:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-use-computed-in-react-component:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-use-signal-effect-in-react-component:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple && npm run test:fix:forbid-signal-update-in-computed:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs *.tsx *.ts","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs *.tsx *.ts","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs prefer-show-over-ternary.test.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:assignment-only":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs assignment-only.test.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs --fix *.tsx","test:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix prefer-show-over-ternary.test.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-computed-in-react-component":"cd tests/prefer-use-computed-in-react-component && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs *.tsx","test:exhaustive-deps:optional-chains-duplicates":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs optional-chains-duplicates.test.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-computed-in-react-component":"cd tests/prefer-use-computed-in-react-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-effect-in-react-component":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-computed-in-react-component:simple":"cd tests/prefer-use-computed-in-react-component && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-use-signal-effect-in-react-component":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-computed-in-react-component:simple":"cd tests/prefer-use-computed-in-react-component && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-effect-in-react-component:simple":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-use-signal-effect-in-react-component:simple":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config simple.config.mjs --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.33.0","oxlint":"^1.11.2","globals":"^16.3.0","typescript":"^5.9.2","@types/node":"^24.2.1","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.4","eslint-plugin-n":"^17.21.3","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.11.2","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.39.1","@typescript-eslint/utils":"^8.39.1","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.39.1","@total-typescript/ts-reset":"^0.6.1","eslint-plugin-eslint-plugin":"^7.0.0","eslint-plugin-optimize-regex":"^1.2.1","@ospm/eslint-plugin-eslint-rule":"workspace:*","@typescript-eslint/eslint-plugin":"^8.39.1","@typescript-eslint/scope-manager":"^8.39.1","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.6.2_1755806302143_0.05069414389151072","host":"s3://npm-registry-packages-npm-production"}},"1.6.3":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.6.3","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.6.3","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"8bc2665cda5d31b8d8d2d51a5dc09109bc24d7df","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.6.3.tgz","fileCount":525,"integrity":"sha512-N7frd9jN+1G99En9CRmF1jE5ITEoNd82aie0Sk7KdUe9tgmvws0uwiJMP0mAxELwce0DGhGSPiXJUNIq4jm4Xw==","signatures":[{"sig":"MEQCIGA5h6/i7js8uQUoQ9/v5FgLXDkayBpCCqYbMURJT0wUAiBixmV8szJRj5o5qGLlPp17ohH37J2ZQEkvpVxyeqxzfQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6454787},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"dccf6e8b1ae6ab1f2aa62b512ea64344e2f51074","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-use-computed-in-react-component && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-use-signal-effect-in-react-component && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment && npm run test:forbid-signal-update-in-computed","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-use-computed-in-react-component && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-use-signal-effect-in-react-component && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment && npm run test:fix:forbid-signal-update-in-computed","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-use-computed-in-react-component:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-use-signal-effect-in-react-component:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple && npm run test:forbid-signal-update-in-computed:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-use-computed-in-react-component:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-use-signal-effect-in-react-component:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple && npm run test:fix:forbid-signal-update-in-computed:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs *.tsx *.ts","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs *.tsx *.ts","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs prefer-show-over-ternary.test.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:assignment-only":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs assignment-only.test.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs --fix *.tsx","test:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix prefer-show-over-ternary.test.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-computed-in-react-component":"cd tests/prefer-use-computed-in-react-component && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs *.tsx","test:exhaustive-deps:optional-chains-duplicates":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs optional-chains-duplicates.test.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-computed-in-react-component":"cd tests/prefer-use-computed-in-react-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-effect-in-react-component":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-computed-in-react-component:simple":"cd tests/prefer-use-computed-in-react-component && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-use-signal-effect-in-react-component":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-computed-in-react-component:simple":"cd tests/prefer-use-computed-in-react-component && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-effect-in-react-component:simple":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-use-signal-effect-in-react-component:simple":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config simple.config.mjs --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.33.0","oxlint":"^1.11.2","globals":"^16.3.0","typescript":"^5.9.2","@types/node":"^24.2.1","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.4","eslint-plugin-n":"^17.21.3","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.11.2","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.39.1","@typescript-eslint/utils":"^8.39.1","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.39.1","@total-typescript/ts-reset":"^0.6.1","eslint-plugin-eslint-plugin":"^7.0.0","eslint-plugin-optimize-regex":"^1.2.1","@ospm/eslint-plugin-eslint-rule":"workspace:*","@typescript-eslint/eslint-plugin":"^8.39.1","@typescript-eslint/scope-manager":"^8.39.1","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.6.3_1755806667161_0.5506184084030734","host":"s3://npm-registry-packages-npm-production"}},"1.6.4":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.6.4","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"url":"https://github.com/JustFly1984","name":"Alexey Lyakhov","email":"justfly1984@gmail.com"},"license":"MIT","_id":"@ospm/eslint-plugin-react-signals-hooks@1.6.4","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"dist":{"shasum":"2e9ea212c8d4240d2817e7f5338921dedfa9b310","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.6.4.tgz","fileCount":525,"integrity":"sha512-CUyjxqxGxSR3trk/9AuCV4nFj0McoTLEPANKEjTT8sB66z3OHFlGfxqsQ6PfDbuqWbBckrr8XHWBRSSmg0Qbmw==","signatures":[{"sig":"MEUCIFgepEVB5/aTYe7zyWyhAEvGg0VglILlHoxIxbq9aUdfAiEA0zjgU86sRFiyiL+25SaH//3GJN7TBie5yRbzC7oXias=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6452563},"main":"dist/cjs/index.js","type":"module","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./rules":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js"},"./package.json":"./package.json"},"gitHead":"28add4278d51394b372fd8f8e68d73b702b3dab0","scripts":{"tc":"tsc --project tsconfig.json --noEmit","lint":"npx eslint src/ --ext .ts","test":"npm run build && npm run test:all-rules","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","clean":"rm -rf dist/","deploy":"npm run build && npm publish --access public","lint:fix":"npx eslint src/ --ext .ts --fix","prebuild":"npm run clean","test:fix":"npm run build && npm run test:fix:all-rules","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","deploy:dry":"npm pack --dry-run","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","test:simple":"npm run test:all-rules:simple","postbuild:esm":"node scripts/rename-to-mjs.mjs","prepublishOnly":"npm run build","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-use-computed-in-react-component && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-use-signal-effect-in-react-component && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment && npm run test:forbid-signal-update-in-computed","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-use-computed-in-react-component && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-use-signal-effect-in-react-component && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment && npm run test:fix:forbid-signal-update-in-computed","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs *.tsx","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-use-computed-in-react-component:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-use-signal-effect-in-react-component:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple && npm run test:forbid-signal-update-in-computed:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs *.tsx","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-use-computed-in-react-component:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-use-signal-effect-in-react-component:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple && npm run test:fix:forbid-signal-update-in-computed:simple","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs *.tsx *.ts","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs --fix *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs *.tsx *.ts","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs --fix *.tsx","test:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs prefer-show-over-ternary.test.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:assignment-only":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs assignment-only.test.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs --fix *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs --fix *.tsx","test:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs *.tsx","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix prefer-show-over-ternary.test.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs --fix *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs --fix *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-computed-in-react-component":"cd tests/prefer-use-computed-in-react-component && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs *.tsx","test:exhaustive-deps:optional-chains-duplicates":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs optional-chains-duplicates.test.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-computed-in-react-component":"cd tests/prefer-use-computed-in-react-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-effect-in-react-component":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config eslint.config.mjs *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-computed-in-react-component:simple":"cd tests/prefer-use-computed-in-react-component && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-use-signal-effect-in-react-component":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-computed-in-react-component:simple":"cd tests/prefer-use-computed-in-react-component && npx eslint --config simple.config.mjs --fix *.tsx","test:prefer-use-signal-effect-in-react-component:simple":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config simple.config.mjs *.tsx","test:fix:prefer-use-signal-effect-in-react-component:simple":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config simple.config.mjs --fix *.tsx"},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"repository":{"url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main","type":"git"},"_npmVersion":"11.4.2","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"knip":"^5.62.0","eslint":"^9.33.0","oxlint":"^1.11.2","globals":"^16.3.0","typescript":"^5.9.2","@types/node":"^24.2.1","@types/react":"^19.0.0","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@biomejs/biome":"2.1.4","eslint-plugin-n":"^17.21.3","@types/react-dom":"^19.0.0","eslint-plugin-es":"^4.1.0","@babel/preset-env":"7.28.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-json":"^4.0.1","@babel/eslint-parser":"^7.28.0","eslint-plugin-import":"^2.32.0","eslint-plugin-oxlint":"^1.11.2","eslint-plugin-promise":"^7.2.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-security":"^3.0.1","@typescript-eslint/types":"^8.39.1","@typescript-eslint/utils":"^8.39.1","eslint-config-typescript":"^3.0.0","@typescript-eslint/parser":"^8.39.1","@total-typescript/ts-reset":"^0.6.1","eslint-plugin-eslint-plugin":"^7.0.0","eslint-plugin-optimize-regex":"^1.2.1","@ospm/eslint-plugin-eslint-rule":"workspace:*","@typescript-eslint/eslint-plugin":"^8.39.1","@typescript-eslint/scope-manager":"^8.39.1","@babel/plugin-syntax-import-assertions":"^7.27.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react-dom":"^18.2.0 || ^19.0.0","@types/react":"^18.2.0 || ^19.0.0","@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-react-signals-hooks_1.6.4_1755808223243_0.1590388255648374","host":"s3://npm-registry-packages-npm-production"}},"1.6.5":{"name":"@ospm/eslint-plugin-react-signals-hooks","version":"1.6.5","type":"module","description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","main":"dist/cjs/index.js","module":"dist/esm/index.mjs","types":"dist/types/index.d.ts","exports":{".":{"import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js","types":"./dist/types/index.d.ts"},"./rules":{"import":"./dist/esm/index.mjs","require":"./dist/cjs/index.js","types":"./dist/types/index.d.ts"},"./package.json":"./package.json"},"scripts":{"deploy":"npm run build && npm publish --access public","deploy:dry":"npm pack --dry-run","build":"npm run clean && npm run build:cjs && npm run build:esm && npm run postbuild:esm && npm run build:types","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","postbuild:esm":"node scripts/rename-to-mjs.mjs","build:types":"tsc --project tsconfig.types.json","build:watch":"npm run build:cjs -- --watch & npm run build:esm -- --watch & npm run build:types -- --watch","clean":"rm -rf dist/","prebuild":"npm run clean","tc":"tsc --project tsconfig.json --noEmit","test":"npm run build && npm run test:all-rules","test:all-rules":"npm run test:exhaustive-deps && npm run test:no-mutation-in-render && npm run test:no-non-signal-with-signal-suffix && npm run test:no-signal-assignment-in-effect && npm run test:no-signal-creation-in-component && npm run test:prefer-batch-updates && npm run test:prefer-computed && npm run test:prefer-use-computed-in-react-component && npm run test:prefer-for-over-map && npm run test:prefer-show-over-ternary && npm run test:prefer-signal-effect && npm run test:prefer-use-signal-effect-in-react-component && npm run test:prefer-signal-in-jsx && npm run test:prefer-signal-methods && npm run test:prefer-signal-reads && npm run test:prefer-use-signal-over-use-state && npm run test:prefer-use-signal-ref-over-use-ref && npm run test:require-use-signals && npm run test:restrict-signal-locations && npm run test:signal-variable-name && npm run test:warn-on-unnecessary-untracked && npm run test:forbid-signal-destructuring && npm run test:forbid-signal-re-assignment && npm run test:forbid-signal-update-in-computed","test:simple":"npm run test:all-rules:simple","test:all-rules:simple":"npm run test:exhaustive-deps:simple && npm run test:no-mutation-in-render:simple && npm run test:no-non-signal-with-signal-suffix:simple && npm run test:no-signal-assignment-in-effect:simple && npm run test:no-signal-creation-in-component:simple && npm run test:prefer-batch-updates:simple && npm run test:prefer-computed:simple && npm run test:prefer-use-computed-in-react-component:simple && npm run test:prefer-for-over-map:simple && npm run test:prefer-show-over-ternary:simple && npm run test:prefer-signal-effect:simple && npm run test:prefer-use-signal-effect-in-react-component:simple && npm run test:prefer-signal-in-jsx:simple && npm run test:prefer-signal-methods:simple && npm run test:prefer-signal-reads:simple && npm run test:prefer-use-signal-over-use-state:simple && npm run test:prefer-use-signal-ref-over-use-ref:simple && npm run test:require-use-signals:simple && npm run test:restrict-signal-locations:simple && npm run test:signal-variable-name:simple && npm run test:warn-on-unnecessary-untracked:simple && npm run test:forbid-signal-destructuring:simple && npm run test:forbid-signal-re-assignment:simple && npm run test:forbid-signal-update-in-computed:simple","test:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs *.tsx","test:exhaustive-deps:optional-chains-duplicates":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs optional-chains-duplicates.test.tsx","test:exhaustive-deps:assignment-only":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs assignment-only.test.tsx","test:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs *.tsx","test:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs *.tsx *.ts","test:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs *.tsx *.ts","test:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs *.tsx","test:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs *.tsx","test:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs *.tsx","test:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs *.tsx","test:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs *.tsx","test:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs *.tsx","test:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs *.tsx","test:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs *.tsx","test:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs *.tsx","test:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-computed-in-react-component":"cd tests/prefer-use-computed-in-react-component && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-computed-in-react-component:simple":"cd tests/prefer-use-computed-in-react-component && npx eslint --config simple.config.mjs *.tsx","test:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs *.tsx","test:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs *.tsx","test:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs *.tsx","test:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs *.tsx","test:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs prefer-show-over-ternary.test.tsx","test:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-effect-in-react-component":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-effect-in-react-component:simple":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs *.tsx","test:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs *.tsx","test:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs *.tsx","test:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs *.tsx","test:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs *.tsx","test:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs *.tsx","test:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs *.tsx","test:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs *.tsx","test:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs *.tsx","test:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs *.tsx","test:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs *.tsx","test:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs *.tsx","test:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs *.tsx","test:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs *.tsx","test:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs *.tsx","test:fix":"npm run build && npm run test:fix:all-rules","test:fix:all-rules":"npm run test:fix:exhaustive-deps && npm run test:fix:no-mutation-in-render && npm run test:fix:no-non-signal-with-signal-suffix && npm run test:fix:no-signal-assignment-in-effect && npm run test:fix:no-signal-creation-in-component && npm run test:fix:prefer-batch-updates && npm run test:fix:prefer-computed && npm run test:fix:prefer-use-computed-in-react-component && npm run test:fix:prefer-for-over-map && npm run test:fix:prefer-show-over-ternary && npm run test:fix:prefer-signal-effect && npm run test:fix:prefer-use-signal-effect-in-react-component && npm run test:fix:prefer-signal-in-jsx && npm run test:fix:prefer-signal-methods && npm run test:fix:prefer-signal-reads && npm run test:fix:prefer-use-signal-over-use-state && npm run test:fix:prefer-use-signal-ref-over-use-ref && npm run test:fix:require-use-signals && npm run test:fix:restrict-signal-locations && npm run test:fix:signal-variable-name && npm run test:fix:warn-on-unnecessary-untracked && npm run test:fix:forbid-signal-destructuring && npm run test:fix:forbid-signal-re-assignment && npm run test:fix:forbid-signal-update-in-computed","test:fix:simple":"npm run test:fix:all-rules:simple","test:fix:all-rules:simple":"npm run test:fix:exhaustive-deps:simple && npm run test:fix:no-mutation-in-render:simple && npm run test:fix:no-non-signal-with-signal-suffix:simple && npm run test:fix:no-signal-assignment-in-effect:simple && npm run test:fix:no-signal-creation-in-component:simple && npm run test:fix:prefer-batch-updates:simple && npm run test:fix:prefer-computed:simple && npm run test:fix:prefer-use-computed-in-react-component:simple && npm run test:fix:prefer-for-over-map:simple && npm run test:fix:prefer-show-over-ternary:simple && npm run test:fix:prefer-signal-effect:simple && npm run test:fix:prefer-use-signal-effect-in-react-component:simple && npm run test:fix:prefer-signal-in-jsx:simple && npm run test:fix:prefer-signal-methods:simple && npm run test:fix:prefer-signal-reads:simple && npm run test:fix:prefer-use-signal-over-use-state:simple && npm run test:fix:prefer-use-signal-ref-over-use-ref:simple && npm run test:fix:require-use-signals:simple && npm run test:fix:restrict-signal-locations:simple && npm run test:fix:signal-variable-name:simple && npm run test:fix:warn-on-unnecessary-untracked:simple && npm run test:fix:forbid-signal-destructuring:simple && npm run test:fix:forbid-signal-re-assignment:simple && npm run test:fix:forbid-signal-update-in-computed:simple","test:fix:exhaustive-deps":"cd tests/exhaustive-deps && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:exhaustive-deps:simple":"cd tests/exhaustive-deps && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-mutation-in-render":"cd tests/no-mutation-in-render && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-mutation-in-render:simple":"cd tests/no-mutation-in-render && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-non-signal-with-signal-suffix:simple":"cd tests/no-non-signal-with-signal-suffix && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect":"cd tests/no-signal-assignment-in-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-signal-assignment-in-effect:simple":"cd tests/no-signal-assignment-in-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:no-signal-creation-in-component":"cd tests/no-signal-creation-in-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:no-signal-creation-in-component:simple":"cd tests/no-signal-creation-in-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-batch-updates":"cd tests/prefer-batch-updates && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-batch-updates:simple":"cd tests/prefer-batch-updates && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-computed":"cd tests/prefer-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-computed:simple":"cd tests/prefer-computed && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-computed-in-react-component":"cd tests/prefer-use-computed-in-react-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-computed-in-react-component:simple":"cd tests/prefer-use-computed-in-react-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-for-over-map":"cd tests/prefer-for-over-map && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-for-over-map:simple":"cd tests/prefer-for-over-map && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary:simple":"cd tests/prefer-show-over-ternary && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-show-over-ternary:file":"cd tests/prefer-show-over-ternary && npx eslint --config eslint.config.mjs --fix prefer-show-over-ternary.test.tsx","test:fix:prefer-signal-effect":"cd tests/prefer-signal-effect && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-effect:simple":"cd tests/prefer-signal-effect && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-effect-in-react-component":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-effect-in-react-component:simple":"cd tests/prefer-use-signal-effect-in-react-component && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx":"cd tests/prefer-signal-in-jsx && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-in-jsx:simple":"cd tests/prefer-signal-in-jsx && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-methods":"cd tests/prefer-signal-methods && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-methods:simple":"cd tests/prefer-signal-methods && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-signal-reads":"cd tests/prefer-signal-reads && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-signal-reads:simple":"cd tests/prefer-signal-reads && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state":"cd tests/prefer-use-signal-over-use-state && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-over-use-state:simple":"cd tests/prefer-use-signal-over-use-state && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:prefer-use-signal-ref-over-use-ref:simple":"cd tests/prefer-use-signal-ref-over-use-ref && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:require-use-signals":"cd tests/require-use-signals && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:require-use-signals:simple":"cd tests/require-use-signals && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:restrict-signal-locations":"cd tests/restrict-signal-locations && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:restrict-signal-locations:simple":"cd tests/restrict-signal-locations && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:signal-variable-name":"cd tests/signal-variable-name && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:signal-variable-name:simple":"cd tests/signal-variable-name && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:warn-on-unnecessary-untracked":"cd tests/warn-on-unnecessary-untracked && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:warn-on-unnecessary-untracked:simple":"cd tests/warn-on-unnecessary-untracked && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-destructuring":"cd tests/forbid-signal-destructuring && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-destructuring:simple":"cd tests/forbid-signal-destructuring && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment":"cd tests/forbid-signal-re-assignment && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-re-assignment:simple":"cd tests/forbid-signal-re-assignment && npx eslint --config simple.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed":"cd tests/forbid-signal-update-in-computed && npx eslint --config eslint.config.mjs --fix *.tsx","test:fix:forbid-signal-update-in-computed:simple":"cd tests/forbid-signal-update-in-computed && npx eslint --config simple.config.mjs --fix *.tsx","lint":"npx eslint src/ --ext .ts","lint:fix":"npx eslint src/ --ext .ts --fix","prepublishOnly":"npm run build"},"keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"author":{"name":"Alexey Lyakhov","email":"justfly1984@gmail.com","url":"https://github.com/JustFly1984"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main"},"bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","peerDependencies":{"@preact/signals-core":"^1.11.0","@preact/signals-react":"^3.2.1","@types/react":"^18.2.0 || ^19.0.0","eslint":"^8.57.1 || ^9.0.0","react":"^18.2.0 || ^19.0.0","react-dom":"^18.2.0 || ^19.0.0"},"devDependencies":{"@babel/eslint-parser":"^7.28.0","@babel/plugin-syntax-import-assertions":"^7.27.1","@ospm/eslint-plugin-eslint-rule":"workspace:*","@babel/preset-env":"7.28.0","@biomejs/biome":"2.1.4","@total-typescript/ts-reset":"^0.6.1","@types/eslint":"^9.6.1","@types/estree":"^1.0.8","@types/node":"^24.2.1","@typescript-eslint/types":"^8.39.1","@typescript-eslint/eslint-plugin":"^8.39.1","@typescript-eslint/parser":"^8.39.1","@typescript-eslint/scope-manager":"^8.39.1","@typescript-eslint/utils":"^8.39.1","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","eslint":"^9.33.0","eslint-config-typescript":"^3.0.0","eslint-plugin-es":"^4.1.0","eslint-plugin-es-x":"^9.0.0","eslint-plugin-eslint-plugin":"^7.0.0","eslint-plugin-import":"^2.32.0","eslint-plugin-json":"^4.0.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-n":"^17.21.3","eslint-plugin-optimize-regex":"^1.2.1","eslint-plugin-oxlint":"^1.11.2","eslint-plugin-promise":"^7.2.1","eslint-plugin-security":"^3.0.1","globals":"^16.3.0","knip":"^5.62.0","oxlint":"^1.11.2","typescript":"^5.9.2"},"optionalDependencies":{"react-native":"^0.79.5","@preact/signals-react":"^3.2.1"},"_id":"@ospm/eslint-plugin-react-signals-hooks@1.6.5","gitHead":"7563f92a1f2d15817ff5f6aa295056dc6855ece8","_nodeVersion":"22.14.0","_npmVersion":"11.4.2","dist":{"integrity":"sha512-Ik6fBYHBx/bQUCdIGQP0OK/76pOWBjGy/ZhND1tFZH7QskHQE9Umr9D6AvU7a0vd4s2VJ3A7ibUR75Z/ycOp8g==","shasum":"308472c19fe049a0364bcf024c37731d8386b0dc","tarball":"https://registry.npmjs.org/@ospm/eslint-plugin-react-signals-hooks/-/eslint-plugin-react-signals-hooks-1.6.5.tgz","fileCount":525,"unpackedSize":6456578,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQChJNkO32bUg8i+IHNh/GZ2pmoO7tz5D/91l9nTc8YGpgIgQBRBfm6mKfBS04GP8f5Q2/zQ9imi9zZRMAt6CY8cvz0="}]},"_npmUser":{"name":"justfly1984","email":"justfly1984@gmail.com"},"directories":{},"maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-plugin-react-signals-hooks_1.6.5_1755808815387_0.8201727531665925"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-22T10:13:44.834Z","modified":"2025-08-21T20:40:15.819Z","1.0.0":"2025-07-22T10:13:45.089Z","1.0.1":"2025-07-22T10:55:22.794Z","1.1.0":"2025-07-29T17:09:53.457Z","1.1.1":"2025-07-29T18:21:03.306Z","1.2.0":"2025-08-08T04:37:33.833Z","1.2.1":"2025-08-08T11:56:26.810Z","1.2.2":"2025-08-08T12:42:03.223Z","1.2.3":"2025-08-08T13:19:54.395Z","1.2.4":"2025-08-08T14:17:09.912Z","1.2.5":"2025-08-08T16:46:26.985Z","1.2.6":"2025-08-09T22:10:51.427Z","1.2.7":"2025-08-09T22:19:12.378Z","1.2.8":"2025-08-09T22:59:20.909Z","1.2.9":"2025-08-09T23:03:27.846Z","1.2.10":"2025-08-09T23:14:20.665Z","1.2.11":"2025-08-09T23:23:50.256Z","1.2.12":"2025-08-09T23:30:55.072Z","1.2.13":"2025-08-09T23:41:37.965Z","1.2.14":"2025-08-10T00:41:45.727Z","1.2.15":"2025-08-10T00:53:34.463Z","1.2.16":"2025-08-10T01:03:05.798Z","1.2.17":"2025-08-10T01:12:07.566Z","1.2.18":"2025-08-10T01:20:52.683Z","1.2.19":"2025-08-10T07:38:50.603Z","1.2.20":"2025-08-10T11:39:19.436Z","1.2.21":"2025-08-10T11:54:11.623Z","1.2.22":"2025-08-10T12:10:16.209Z","1.2.23":"2025-08-10T12:21:49.576Z","1.3.0":"2025-08-10T16:10:40.634Z","1.3.1":"2025-08-11T03:04:29.319Z","1.3.2":"2025-08-11T03:13:31.096Z","1.3.3":"2025-08-11T03:20:46.887Z","1.3.4":"2025-08-11T05:04:06.248Z","1.3.5":"2025-08-11T05:21:16.284Z","1.3.6":"2025-08-11T05:37:37.060Z","1.3.7":"2025-08-11T05:54:19.267Z","1.3.8":"2025-08-11T06:18:33.440Z","1.3.9":"2025-08-11T10:26:03.920Z","1.3.10":"2025-08-11T10:46:30.983Z","1.3.11":"2025-08-11T10:59:16.755Z","1.3.12":"2025-08-11T11:11:16.836Z","1.3.13":"2025-08-11T11:31:48.887Z","1.3.14":"2025-08-11T13:42:14.424Z","1.4.0":"2025-08-12T09:31:16.279Z","1.4.1":"2025-08-12T10:00:41.054Z","1.4.2":"2025-08-12T10:20:01.826Z","1.4.3":"2025-08-12T10:31:49.545Z","1.4.4":"2025-08-12T10:47:07.745Z","1.5.0":"2025-08-19T06:45:17.192Z","1.5.1":"2025-08-19T10:16:37.748Z","1.5.2":"2025-08-19T10:27:46.506Z","1.5.3":"2025-08-19T10:52:35.896Z","1.5.4":"2025-08-19T11:02:10.025Z","1.6.0":"2025-08-21T19:04:49.673Z","1.6.1":"2025-08-21T19:43:00.800Z","1.6.2":"2025-08-21T19:58:22.424Z","1.6.3":"2025-08-21T20:04:27.425Z","1.6.4":"2025-08-21T20:30:23.583Z","1.6.5":"2025-08-21T20:40:15.619Z"},"bugs":{"url":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/issues"},"author":{"name":"Alexey Lyakhov","email":"justfly1984@gmail.com","url":"https://github.com/JustFly1984"},"license":"MIT","homepage":"https://github.com/ospm-app/eslint-plugin-react-signals-hooks/tree/main/packages/eslint-plugin-react-signals-hooks#readme","keywords":["eslint","eslint-plugin","react","signals","signals-react","react-signals","preact-signals","react-hooks","performance","reactivity","best-practices"],"repository":{"type":"git","url":"git+https://github.com/ospm-app/eslint-plugin-react-signals-hooks.git#main"},"description":"ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects","maintainers":[{"name":"justfly1984","email":"justfly1984@gmail.com"}],"readme":"# ESLint Plugin React Signals Hooks\n\nA comprehensive ESLint plugin for React applications using `@preact/signals-react`. This plugin provides specialized rules to ensure proper signal usage, optimal performance, and adherence to React signals best practices, along with support for popular validation libraries.\n\n## Features\n\n### 🎯 **Signal Validation**\n\n- 24 specialized rules for React signals\n- Complete replacement for `eslint-plugin-react-hooks/exhaustive-deps` rule\n- Enhanced `exhaustive-deps` with signal awareness\n\n### 🚀 **Performance Optimization**\n\n- Automatic batching of signal updates\n- Optimized dependency tracking\n- Efficient signal access patterns\n- Minimal runtime overhead\n\n## Rules Overview\n\nThis plugin provides 24 specialized ESLint rules for React signals:\n\n| Rule | Purpose | Autofix | Severity |\n|------|---------|---------|----------|\n| `exhaustive-deps` | Enhanced dependency detection for React hooks with @preact/signals-react support | ✅ | Error |\n| `require-use-signals` | Enforces `useSignals()` hook in components using signals | ✅ | Error |\n| `no-mutation-in-render` | Prevents signal mutations during render phase | ✅ | Error |\n| `no-signal-creation-in-component` | Prevents signal creation in render | ✅ | Error |\n| `no-signal-assignment-in-effect` | Prevents signal assignments in effects without deps | ✅ | Error |\n| `no-non-signal-with-signal-suffix` | Ensures variables with 'Signal' suffix are signals | ✅ | Warning |\n| `prefer-batch-updates` | Prefers batched updates for multiple signal changes | ✅ | Warning |\n| `prefer-computed` | Suggests `computed()` over `useMemo` | ✅ | Warning |\n| `prefer-for-over-map` | Suggests For component over `.map()` | ✅ | Warning |\n| `prefer-show-over-ternary` | Suggests Show component for ternaries | ✅ | Warning |\n| `prefer-signal-effect` | Prefers `effect()` over `useEffect` | ✅ | Warning |\n| `prefer-signal-in-jsx` | Prefers direct signal usage in JSX | ✅ | Warning |\n| `prefer-signal-methods` | Enforces signal methods over properties | ✅ | Warning |\n| `prefer-signal-reads` | Optimizes signal access patterns | ✅ | Warning |\n| `prefer-use-signal-over-use-state` | Suggests `useSignal` over `useState` | ✅ | Warning |\n| `prefer-use-signal-ref-over-use-ref` | Suggests `useSignalRef` over `useRef` when `.current` is read during render | ✅ | Warning |\n| `restrict-signal-locations` | Controls where signals can be created | ✅ | Error |\n| `signal-variable-name` | Enforces signal naming conventions | ✅ | Error |\n| `warn-on-unnecessary-untracked` | Warns about unnecessary `untracked()` usage | ✅ | Warning |\n| `prefer-use-computed-in-react-component` | Encourages using `useComputed(...)` inside React components | ✅ | Warning |\n| `prefer-use-signal-effect-in-react-component` | Encourages using `useSignalEffect(...)` inside React components | ✅ | Warning |\n| `forbid-signal-re-assignment` | Forbids aliasing or re-assigning variables that hold a signal | ❌ | Error |\n| `forbid-signal-destructuring` | Forbids destructuring signals into aliases (e.g., `{ value } = signal`) | ❌ | Error |\n| `forbid-signal-update-in-computed` | Forbids updating signals inside `computed(...)` callbacks to keep them pure/read-only | ❌ | Error |\n\nFor detailed examples and options for each rule, see the docs in `docs/rules/`.\n\n- [`prefer-use-signal-ref-over-use-ref` docs](./docs/rules/prefer-use-signal-ref-over-use-ref.md)\n- [`prefer-for-over-map` docs](./docs/rules/prefer-for-over-map.md)\n- [`forbid-signal-re-assignment` docs](./docs/rules/forbid-signal-re-assignment.md)\n- [`forbid-signal-destructuring` docs](./docs/rules/forbid-signal-destructuring.md)\n- [`forbid-signal-update-in-computed` docs](./docs/rules/forbid-signal-update-in-computed.md)\n- [`prefer-use-computed-in-react-component` docs](./docs/rules/prefer-use-computed-in-react-component.md)\n- [`prefer-use-signal-effect-in-react-component` docs](./docs/rules/prefer-use-signal-effect-in-react-component.md)\n\n### `forbid-signal-destructuring` options (summary)\n\n- `modules?: string[]`\n  - Additional module specifiers to treat as exporting signal creators.\n  - Works with aliased and namespaced imports.\n\n- `enableSuffixHeuristic?: boolean` (default: `false`)\n  - When `true`, enables suffix-based detection (e.g., variables ending with `Signal`) as a fallback.\n  - Can increase false positives; keep off unless needed.\n\n### `forbid-signal-re-assignment` options (summary)\n\n- `modules?: string[]`\n  - Additional module specifiers to treat as exporting signal creators. Merged with defaults (`@preact/signals-react`, `@preact/signals-core`).\n\n- `allowBareNames?: boolean` (default: `false`)\n  - When `true`, treats bare identifiers `signal`/`computed`/`effect` as creators even without imports. Can increase false positives; keep disabled unless needed.\n\n- `suffix?: string` (default: `\"Signal\"`)\n  - Variable-name suffix used as a heuristic when identifying signal-like variables.\n\n### Rule spotlight: `prefer-use-signal-ref-over-use-ref`\n\nEncourages `useSignalRef` from `@preact/signals-react/utils` instead of `useRef` when `.current` is read during render/JSX.\n\n❌ Incorrect\n\n```tsx\nimport { useRef } from 'react';\n\nfunction Example() {\n  const divRef = useRef<HTMLDivElement | null>(null);\n  return <div ref={divRef}>{divRef.current}</div>; // render read\n}\n```\n\n✅ Correct\n\n```tsx\nimport { useSignalRef } from '@preact/signals-react/utils';\n\nfunction Example() {\n  const divRef = useSignalRef<HTMLDivElement | null>(null);\n  return <div ref={divRef}>{divRef.current}</div>;\n}\n```\n\nAutofix performs:\n\n- Add import: `useSignalRef` from `@preact/signals-react/utils` (augments existing import when possible)\n- Replace call: `useRef(...)` → `useSignalRef(...)`\n- Rename variable and references: appends or replaces suffix with `SignalRef`\n\nExample rename (autofixed):\n\n```tsx\n// Before\nconst inputRef = useRef<HTMLInputElement | null>(null);\n<input ref={inputRef} onFocus={() => inputRef.current?.select()} />\n\n// After (autofixed)\nimport { useSignalRef } from '@preact/signals-react/utils';\nconst inputSignalRef = useSignalRef<HTMLInputElement | null>(null);\n<input ref={inputSignalRef} onFocus={() => inputSignalRef.current?.select()} />\n```\n\nOption:\n\n- `onlyWhenReadInRender` (default: `true`) — only warn when `.current` is read in render/JSX. Imperative-only usage (effects/handlers) is ignored.\n\n## Key Features\n\n### 🎯 **Smart Signal Detection**\n\n- Detects signal usage patterns across all React hooks\n- Handles complex property chains and computed member expressions\n- Excludes inner-scope variables from dependency requirements\n- Supports both direct signals and `.value` property access\n\n### 🔧 **Comprehensive Autofix**\n\n- Automatically fixes missing dependencies\n- Removes redundant and unnecessary dependencies\n- Adds required imports (`useSignals`, `Show`, `For`)\n- Transforms variable names to follow conventions\n\n### 🛡️ **Context-Aware Analysis**\n\n- Distinguishes between JSX and hook contexts\n- Detects render vs. effect contexts for mutation rules\n- Handles event handlers, callbacks, and nested functions\n- Supports both React hooks and signals-core patterns\n\n## Installation\n\nInstall the plugin alongside `@preact/signals-react`:\n\n```bash\n# npm\nnpm install --save-dev @ospm/eslint-plugin-react-signals-hooks @preact/signals-react\n\n# yarn\nyarn add --dev @ospm/eslint-plugin-react-signals-hooks @preact/signals-react\n\n# pnpm\npnpm add -D @ospm/eslint-plugin-react-signals-hooks @preact/signals-react\n```\n\nYou must disable the `react-hooks/exhaustive-deps` rule when using this plugin, since this plugin provides a signal-aware replacement:\n\n```json\n{\n  \"rules\": {\n    \"react-hooks/exhaustive-deps\": \"off\"\n  }\n}\n```\n\n## Configuration\n\n### ESLint Flat Config (Recommended)\n\n```javascript\n// eslint.config.js\nimport reactSignalsHooks from '@ospm/eslint-plugin-react-signals-hooks';\n\nexport default [\n  {\n    plugins: {\n      'react-signals-hooks': reactSignalsHooks,\n    },\n    rules: {\n      // Enhanced dependency detection\n      'react-signals-hooks/exhaustive-deps': [\n        'error',\n        {\n          enableAutoFixForMemoAndCallback: true,\n          enableDangerousAutofixThisMayCauseInfiniteLoops: false,\n        },\n      ],\n      \n      // Signal usage enforcement\n      'react-signals-hooks/require-use-signals': 'error',\n      'react-signals-hooks/signal-variable-name': 'error',\n      'react-signals-hooks/no-mutation-in-render': 'error',\n      \n      // Performance and best practices\n      'react-signals-hooks/prefer-signal-in-jsx': 'warn',\n      'react-signals-hooks/prefer-show-over-ternary': 'warn',\n      'react-signals-hooks/prefer-for-over-map': 'warn',\n      'react-signals-hooks/prefer-signal-effect': 'warn',\n      'react-signals-hooks/prefer-computed': 'warn',\n      'react-signals-hooks/prefer-use-signal-ref-over-use-ref': 'warn',\n    },\n  },\n];\n```\n\n### Legacy ESLint Config\n\n```javascript\n// .eslintrc.js\nmodule.exports = {\n  plugins: ['react-signals-hooks'],\n  rules: {\n    // Enhanced dependency detection\n    'react-signals-hooks/exhaustive-deps': [\n      'error',\n      {\n        enableAutoFixForMemoAndCallback: true,\n        enableDangerousAutofixThisMayCauseInfiniteLoops: false,\n      },\n    ],\n    \n    // Signal usage enforcement\n    'react-signals-hooks/require-use-signals': 'error',\n    'react-signals-hooks/signal-variable-name': 'error',\n    'react-signals-hooks/no-mutation-in-render': 'error',\n    \n    // Performance and best practices\n    'react-signals-hooks/prefer-signal-in-jsx': 'warn',\n    'react-signals-hooks/prefer-show-over-ternary': 'warn',\n    'react-signals-hooks/prefer-for-over-map': 'warn',\n    'react-signals-hooks/prefer-signal-effect': 'warn',\n    'react-signals-hooks/prefer-computed': 'warn',\n  },\n};\n```\n\n## Rule Documentation\n\n### 1. `exhaustive-deps` - Enhanced Dependency Detection\n\nExtends React's exhaustive-deps rule with signal-aware dependency detection.\n\n**Options:**\n\n- `enableAutoFixForMemoAndCallback` (boolean, default: `false`) - Enable autofix for safe hooks\n- `enableDangerousAutofixThisMayCauseInfiniteLoops` (boolean, default: `false`) - Enable autofix for effect hooks\n\n```tsx\n// ❌ Missing signal dependency\nconst value = useMemo(() => countSignal.value * 2, []);\n// ✅ Fixed\nconst value = useMemo(() => countSignal.value * 2, [countSignal.value]);\n```\n\n### 2. `require-use-signals` - Enforce useSignals Hook\n\nRequires components using signals to call `useSignals()` for optimal performance.\n\n```tsx\n// ❌ Missing useSignals()\nfunction Component() {\n  return <div>{countSignal.value}</div>;\n}\n\n// ✅ With useSignals()\nfunction Component() {\n  const store = useSignals(1);\n\n  try {\n    return <div>{countSignal.value}</div>;\n  } finally {\n    store.f();\n  }\n}\n```\n\n### 3. `no-mutation-in-render` - Prevent Render Mutations\n\nPrevents signal mutations during component render phase.\n\n```tsx\n// ❌ Mutation during render\nfunction Component() {\n  countSignal.value++; // Error: mutation in render\n  return <div>{countSignal.value}</div>;\n}\n\n// ✅ Mutation in effect\nfunction Component() {\n  useEffect(() => {\n    countSignal.value++; // OK: mutation in effect\n  }, []);\n  return <div>{countSignal.value}</div>;\n}\n```\n\n### 4. `no-signal-creation-in-component` - Prevent Signal Creation in Render\n\nPrevents signal creation inside component render functions.\n\n```tsx\n// ❌ Signal creation in render\nfunction Component() {\n  const countSignal = signal(0); // Error: signal created in render\n  return <div>{countSignal.value}</div>;\n}\n\n// ✅ Signal created at module level or in hooks\nconst countSignal = signal(0);\nfunction Component() {\n  return <div>{countSignal.value}</div>;\n}\n```\n\n### 5. `no-signal-assignment-in-effect` - Safe Effect Dependencies\n\nPrevents signal assignments in effects without proper dependency tracking.\n\n```tsx\n// ❌ Unsafe signal assignment in effect\nuseEffect(() => {\n  countSignal.value = 42; // Missing dependency\n}, []);\n\n// ✅ With proper dependency\nuseEffect(() => {\n  countSignal.value = 42;\n}, [someDependency]);\n```\n\n### 6. `no-non-signal-with-signal-suffix` - Consistent Naming\n\nEnsures variables with 'Signal' suffix are actual signal instances.\n\n```tsx\n// ❌ Incorrect usage of Signal suffix\nconst dataSignal = { value: 42 }; // Not a real signal\n\n// ✅ Correct usage\nconst dataSignal = signal(42);\n```\n\n### 7. `prefer-batch-updates` - Batch Signal Updates\n\nEncourages batching multiple signal updates.\n\n```tsx\n// ❌ Separate updates\nfunction handleClick() {\n  setA(a + 1);\n  setB(b + 1);\n}\n\n// ✅ Batched updates (autofixed)\nfunction handleClick() {\n  batch(() => {\n    setA(a + 1);\n    setB(b + 1);\n  });\n}\n```\n\n### 8. `prefer-computed` - Computed Values\n\nPrefers `computed()` over `useMemo` for signal-derived values.\n\n```tsx\n// ❌ useMemo with only signal dependencies\nconst doubled = useMemo(() => countSignal.value * 2, [countSignal.value]);\n\n// ✅ Using computed() (autofixed)\nconst doubled = computed(() => countSignal.value * 2);\n```\n\nNote: inside React components, prefer `useComputed()` to avoid creating a new signal on each render:\n\n```tsx\n// ✅ In components, use the hook variant\nconst doubled = useComputed(() => countSignal.value * 2);\n```\n\n### 9. `prefer-for-over-map` - For Component\n\nSuggests using For component over `.map()` for better performance with signal arrays.\n\n```tsx\n// ❌ Using .map() in JSX\n{itemsSignal.value.map(item => <div key={item.id}>{item.name}</div>)}\n\n// ✅ Using For component (autofixed)\n<For each={itemsSignal}>\n  {item => <div>{item.name}</div>}\n</For>\n```\n\n### 10. `prefer-show-over-ternary` - Show Component\n\nSuggests using Show component for conditional rendering with signals.\n\n```tsx\n// ❌ Complex ternary with signal\n{visibleSignal.value ? (\n  <div>Content</div>\n) : null}\n\n// ✅ Using Show component (autofixed)\n<Show when={visibleSignal.value}>\n  <div>Content</div>\n</Show>\n```\n\n### 11. `prefer-signal-effect` - Signal Effects\n\nPrefers `effect()` over `useEffect` when dependencies are only signals.\n\n```tsx\n// ❌ useEffect with only signal dependencies\nuseEffect(() => {\n  console.log(countSignal.value);\n}, [countSignal.value]);\n\n// ✅ Using effect() (autofixed)\neffect(() => {\n  console.log(countSignal.value);\n});\n```\n\nNote: inside React components, prefer `useSignalEffect()` to integrate with React lifecycle:\n\n```tsx\n// ✅ In components, use the hook variant\nuseSignalEffect(() => {\n  console.log(countSignal.value);\n});\n```\n\n### 12. `prefer-signal-in-jsx` - Direct Signal Usage\n\nPrefers direct signal usage over `.value` in JSX.\n\n```tsx\n// ❌ Using .value in JSX\n<div>{messageSignal.value}</div>\n\n// ✅ Direct signal usage (autofixed)\n<div>{messageSignal}</div>\n```\n\n### 13. `prefer-signal-methods` - Signal Methods\n\nEncourages using signal methods over direct property access.\n\n```tsx\n// ❌ Direct property access\nconst value = signal(0);\nvalue.value = 1;\n\n// ✅ Using methods (autofixed)\nconst value = signal(0);\nvalue.set(1);\n```\n\n### 14. `prefer-signal-reads` - Optimized Signal Reading\n\nOptimizes signal access patterns for better performance.\n\n```tsx\n// ❌ Multiple signal reads\nfunction double() {\n  return countSignal.value * 2;\n}\n\n// ✅ Single read (autofixed)\nfunction double() {\n  const count = countSignal.value;\n  return count * 2;\n}\n```\n\n### 15. `prefer-use-signal-over-use-state` - Signal State\n\nSuggests `useSignal` over `useState` for primitive values.\n\n```tsx\n// ❌ Using useState for primitive\nconst [count, setCount] = useState(0);\n\n// ✅ Using useSignal (autofixed)\nconst countSignal = useSignal(0);\n```\n\n### 16. `restrict-signal-locations` - Signal Scope Control\n\nControls where signals can be created in the codebase.\n\n**Options:**\n\n- `allowedPaths`: Array of glob patterns where signals can be created\n- `disallowedPaths`: Array of glob patterns where signals cannot be created\n\n```tsx\n// ❌ Signal creation in disallowed location\nfunction Component() {\n  const signal = createSignal(0); // Error: Signal creation not allowed here\n  return <div>{signal.value}</div>;\n}\n```\n\n### 17. `signal-variable-name` - Naming Conventions\n\nEnforces consistent naming for signal variables.\n\n**Rules:**\n\n- Must end with 'Signal'\n- Must start with lowercase\n- Must not start with 'use'\n\n```tsx\n// ❌ Incorrect naming\nconst counter = signal(0);\nconst useDataSignal = signal('');\n\n// ✅ Correct naming (autofixed)\nconst counterSignal = signal(0);\nconst dataSignal = signal('');\n```\n\n### 18. `warn-on-unnecessary-untracked` - Optimize Untracked Usage\n\nWarns about unnecessary `untracked()` usage.\n\n```tsx\n// ❌ Unnecessary untracked\nconst value = untracked(() => countSignal.value);\n\n// ✅ Direct access is sufficient\nconst value = countSignal.value;\n```\n\n## Usage Examples\n\n### ✅ **Correct Usage**\n\n```tsx\nimport { useCallback, useMemo, useEffect } from 'react';\nimport { counterSignal, nameSignal } from './signals';\n\nfunction MyComponent() {\n  const count = counterSignal.value;\n  const name = nameSignal.value;\n\n  // ✅ Correct: includes signal.value dependencies\n  const memoizedValue = useMemo(() => {\n    return count * 2 + name.length;\n  }, [count, name]); // or [counterSignal.value, nameSignal.value]\n\n  // ✅ Correct: useRef is stable, no dependency needed\n  const ref = useRef(null);\n  const callback = useCallback(() => {\n    ref.current?.focus();\n  }, []); // useRef values are stable\n\n  // ✅ Correct: computed member expressions\n  const data = useMemo(() => {\n    return items.find(item => item.id === selectedId);\n  }, [items, selectedId]); // selectedId from outer scope\n\n  return <div>{memoizedValue}</div>;\n}\n```\n\n### ❌ **Incorrect Usage (Will be flagged)**\n\n```tsx\n// ❌ Missing signal.value dependencies\nconst memoizedValue = useMemo(() => {\n  return counterSignal.value * 2;\n}, []); // Missing: counterSignal.value\n\n// ❌ Using base signal instead of .value\nconst memoizedValue = useMemo(() => {\n  return counterSignal.value * 2;\n}, [counterSignal]); // Should be: [counterSignal.value]\n\n// ❌ Redundant base dependency\nconst memoizedValue = useMemo(() => {\n  return counterSignal.value * 2;\n}, [counterSignal, counterSignal.value]); // counterSignal is redundant\n\n// ❌ Including useRef unnecessarily\nconst ref = useRef(null);\nconst callback = useCallback(() => {\n  ref.current?.focus();\n}, [ref]); // useRef values should not be dependencies\n```\n\n## Advanced Patterns\n\n### Complex Signal Dependencies\n\n```tsx\n// ✅ Handles deep property access and computed members\nconst value = useMemo(() => {\n  return hexagonsSignal.value[hexId].neighbors?.top?.id;\n}, [hexagonsSignal.value[hexId].neighbors?.top?.id, hexId]);\n\n// ✅ Inner-scope variable exclusion\nconst filtered = useMemo(() => {\n  return items.filter((item) => {\n    return signalMap.value[item.id]; // item.id is inner-scope\n  });\n}, [signalMap.value, items]); // item.id not required\n```\n\n### Assignment vs. Read Detection\n\n```tsx\n// ✅ Assignment-only: no signal dependency needed\nconst updateData = useCallback(() => {\n  dataSignal.value[key] = newValue;\n}, [key, newValue]);\n\n// ✅ Read + assignment: signal dependency required\nconst conditionalUpdate = useCallback(() => {\n  if (!dataSignal.value[key]) {\n    dataSignal.value[key] = newValue;\n  }\n}, [dataSignal.value[key], key, newValue]);\n```\n\n## Supported Hooks and Patterns\n\n- ✅ `useMemo`, `useCallback`, `useEffect`, `useLayoutEffect`\n- ✅ Custom hooks following the `use*` pattern\n- ✅ `effect()` and `computed()` from `@preact/signals-core`\n- ✅ Signal property chains and computed member expressions\n- ✅ Inner-scope variable detection in callbacks\n\n## TypeScript Support\n\nFully compatible with TypeScript and `@typescript-eslint/parser`.\n\n- Works with both Flat config (`eslint.config.js`) and legacy `.eslintrc`.\n- Understands TS syntax features (generics, `as const`, enums, type-only imports).\n- Analyzes computed members and property chains with proper type info when available.\n\nParser setup example (legacy config):\n\n```js\n// .eslintrc.js\nmodule.exports = {\n  parser: '@typescript-eslint/parser',\n  parserOptions: { project: ['./tsconfig.json'] }, // optional but recommended for best type-aware results\n  plugins: ['react-signals-hooks'],\n  rules: {\n    'react-signals-hooks/exhaustive-deps': 'error',\n  },\n};\n```\n\nFlat config example:\n\n```js\n// eslint.config.js\nimport tseslint from 'typescript-eslint';\nimport reactSignalsHooks from '@ospm/eslint-plugin-react-signals-hooks';\n\nexport default [\n  ...tseslint.config({\n    parserOptions: { project: ['./tsconfig.json'] }, // optional\n  }),\n  {\n    plugins: { 'react-signals-hooks': reactSignalsHooks },\n    rules: { 'react-signals-hooks/exhaustive-deps': 'error' },\n  },\n];\n```\n\nNote: a `project` reference is not strictly required, but it can improve precision for complex expressions.\n\n## Compatibility\n\n- React 18+\n- `@preact/signals-react` 2.x+\n- Node.js 18+\n- ESLint 8.56+ (legacy) or 9+ (Flat config)\n\n## IDE Integration\n\n- Works out of the box with VS Code ESLint extension.\n- Autofixes are safe-by-default. For aggressive fixes in effects, enable: `enableDangerousAutofixThisMayCauseInfiniteLoops` in `exhaustive-deps` options.\n- Many rules provide code actions and rename-safe fixes (imports/identifiers updated consistently).\n\n## Performance\n\n- Uses targeted AST visitors and avoids repeated traversal.\n- Skips inner-scope variables for dependency inference to reduce noise.\n- Provides internal performance tracking hooks in rule implementations.\n\nTips:\n\n- Run ESLint with `--cache` in CI and locally.\n- Prefer Flat config for faster startup in ESLint 9+.\n\n## Limitations\n\n- The plugin does not execute code; dynamic patterns may require manual review.\n- If you heavily customize signal creators or use unusual abstractions, consider enabling `modules` and/or `enableSuffixHeuristic` options in relevant rules.\n- Aggressive autofix for effects can introduce loops if your effect writes to values it also reads; keep `enableDangerousAutofixThisMayCauseInfiniteLoops` off unless you know the codebase patterns.\n\n## FAQ\n\n- Why replace `react-hooks/exhaustive-deps`? — React Hooks rules are not signal-aware. This plugin understands `.value`, computed chains, and signal semantics to provide accurate deps and safer fixes.\n- Can I keep both rules on? — No. Disable `react-hooks/exhaustive-deps` to avoid conflicts and duplicate/contradictory diagnostics.\n- Does it support custom hooks? — Yes. Any `use*` function is analyzed as a hook callback site for dependency inference.\n\n## Contributing\n\nContributions are welcome! Please open an issue or PR. Follow the repository’s lint/test conventions, and add rule docs under `packages/eslint-plugin-react-signals-hooks/docs/rules/` following the structure described in `rules.md`.\n\n## License\n\nMIT © OSPM\n","readmeFilename":"README.md"}