{"_id":"@exadev/eslint-config","_rev":"74-6638f2453652210a95ed5f877502667b","name":"@exadev/eslint-config","dist-tags":{"latest":"2.30.0"},"versions":{"0.0.0":{"name":"@exadev/eslint-config","version":"0.0.0","_id":"@exadev/eslint-config@0.0.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"dist":{"shasum":"3831eefe12d6a126f0cee1c3586394216a3449d4","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-0.0.0.tgz","fileCount":1,"integrity":"sha512-FbybQxY3GpcVw69CBJBIvZ6TajZMPKyhzJoOgqyvtPDzPVuTEaxN9oZK7nXlM/sbRJOfAceCwfH1Gl9sSPsl2Q==","signatures":[{"sig":"MEUCIGyghd0ZHtJ5W7XaxExMZe8+iVJFGg72kk9iHpUXDIddAiEA5JssBsHAqmjD6wlWvPbJJLIyuHpNxcXc7pDe0ExMm7w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80},"private":false,"_npmUser":{"name":"jmearman","email":"joseph@mearman.co.uk"},"_npmVersion":"11.17.0","directories":{},"_nodeVersion":"26.1.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.0.0_1786081303262_0.7436291598229161","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@exadev/eslint-config","version":"1.0.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@1.0.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"09c1af5f26bbe35e4955a1bf2dcffdf60b4cd419","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-1.0.0.tgz","fileCount":23,"integrity":"sha512-dlKQTDcC6tHZAwO8aK9+xFRSglzpwtPRK2HbF87DcbrOberj80N6sn8zs7QRt30D8lOef470VHJW2o24wEKBmw==","signatures":[{"sig":"MEUCIQCoO4A/aU4l/NoIt9oZnGV2qdErCHOVPkRoNUO3Q3W/6wIgLG5AV69LUOV7j71r+1QQ2pwzdOtHRILEp8XG+fM383Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28115},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"},"./*":{"types":{"import":"./dist/*.d.ts","require":"./dist/*.d.cts"},"import":"./dist/*.js","require":"./dist/*.cjs"}},"gitHead":"afbf3d724037716bf351f8430fc7a5fa3bf68921","scripts":{"lint":"turbo run _lint","_lint":"eslint . --fix --cache --max-warnings 0","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules for ExaDev projects, starting with the documents.js family","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.0.0_1786082581374_0.01847770634890944","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@exadev/eslint-config","version":"1.0.1","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@1.0.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"325d17a27171923471713df693db7095fc1a66c2","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-1.0.1.tgz","fileCount":23,"integrity":"sha512-9tGyDh89o3GnDViHmkwQ5s0TMgB8EoaMu8g0yx0dIO35qMHJO2XHFmV+wwGx6EbxoWBoHZxNT50X8b5Efn8M2Q==","signatures":[{"sig":"MEUCIGtj4oYLF6glrP0VJMkrT+NDhWn4jcBkCtmElVhj67jnAiEA8vXaaR+DgNuPx0bTSmUZ87Hebv5Gbtp5Csd0OjsenRI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":27908},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"},"./*":{"types":{"import":"./dist/*.d.ts","require":"./dist/*.d.cts"},"import":"./dist/*.js","require":"./dist/*.cjs"}},"gitHead":"d3aacc1c25c5cb4c4669f07acbec503a52a21cc5","scripts":{"lint":"turbo run _lint","_lint":"eslint . --fix --cache --max-warnings 0","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.0.1_1786082794460_0.6364234904526327","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@exadev/eslint-config","version":"1.1.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@1.1.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"c4c0fd2105163a84ac9e038e6e04a11ebf15f341","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-1.1.0.tgz","fileCount":23,"integrity":"sha512-XZ+ApGeM4K377lNuKtSp47naDr4/bdIvfY4uY1aKHgzVcaQt4FodMmK1NWkUZDD/o6/y3WgBmSYaW7yfWYbZIw==","signatures":[{"sig":"MEUCIDuJrBuvjJDMLCN1KDthDk4j0pTiy5HY58e8gDYZ3s1DAiEAhbovBvYEfi2dtLnkbC/wpeIVqe0kt1rZdl6rq3wC3I4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29105},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"},"./*":{"types":{"import":"./dist/*.d.ts","require":"./dist/*.d.cts"},"import":"./dist/*.js","require":"./dist/*.cjs"}},"gitHead":"be5657163a072f51b8c2fb72e86bc26c4d6622ec","scripts":{"lint":"turbo run _lint","_lint":"eslint . --fix --cache --max-warnings 0","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.1.0_1786083221613_0.1646971094785199","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@exadev/eslint-config","version":"1.1.1","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@1.1.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"21b5e2c0529326d6dde99882790b98de633356e1","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-1.1.1.tgz","fileCount":29,"integrity":"sha512-I0axEA9roUw6hNtgOnoBz7STW3Wj1+LW966/9nAGG5z7Y8AUbTXCEcN8rq38gPoySthFUYQ6mgCX8YKzlyzjig==","signatures":[{"sig":"MEQCIDI/SlGlrEMAexGdc797XId+i3Oldg9xdM5uuLgTEnBRAiBe5Eit8oX4V6O4RqSNNXSXOa3FQhtM2A3XIGiD7zAm5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29655},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"},"./*":{"types":{"import":"./dist/*.d.ts","require":"./dist/*.d.cts"},"import":"./dist/*.js","require":"./dist/*.cjs"}},"gitHead":"01b0c6b88b3abcb756af6b7f1281e6dd1f9fb731","scripts":{"lint":"turbo run _lint","_lint":"eslint . --fix --cache --max-warnings 0","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.1.1_1786083753486_0.09883312310085568","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@exadev/eslint-config","version":"1.1.2","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@1.1.2","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"a26fd7ebbaf2ff55e45611fbe56876dcf58e0ebd","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-1.1.2.tgz","fileCount":29,"integrity":"sha512-GPZ2HPNmn2IX+72E0FT2Qk5W/nalMHiI7MqqVojNatnI1S9iwXjPicRiCRQt3qb9dBtz7HWIMvE1lxrUI6aQvQ==","signatures":[{"sig":"MEUCIDmhNR0Ng6yX8GzFozJ79TP/V4tibj5CHqDjEw95A+ptAiEAk4PthvJJBplDO9SWAPSVFI6OMFG7WvYNtaSfHr2zlT0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":34345},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"},"./*":{"types":{"import":"./dist/*.d.ts","require":"./dist/*.d.cts"},"import":"./dist/*.js","require":"./dist/*.cjs"}},"gitHead":"3fe4122c5d28bcdeae1dd664f2e2a83d9b571b71","scripts":{"lint":"turbo run _lint","_lint":"eslint . --fix --cache --max-warnings 0","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.1.2_1786084085177_0.9809150107961153","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@exadev/eslint-config","version":"1.2.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@1.2.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"a112aa916d1fe7e9a437a044eec9a57b91da3278","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-1.2.0.tgz","fileCount":33,"integrity":"sha512-q8tEBX3a8L0fID7o9kfiJejSijXjx8CsecddnK9vMJa2x2d68I/d1hoKLy3qGn6JZ3XGwem9JfAuRTPjnHkWKg==","signatures":[{"sig":"MEUCIQDqp8abFEW+B9Ql3Qlc1UZPJzQADuT0XaLyCn+Qaf/qbAIgd74Vg+AhjtyAX/3sPtL/onJEtrH1n9s06AmtkxU/V14=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":40275},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"},"./*":{"types":{"import":"./dist/*.d.ts","require":"./dist/*.d.cts"},"import":"./dist/*.js","require":"./dist/*.cjs"}},"gitHead":"00eb18a23332bc73b9fc2b6226eba66e3f8922d7","scripts":{"lint":"turbo run _lint","_lint":"eslint . --fix --cache --max-warnings 0","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript-eslint":">=8.0.0"},"peerDependenciesMeta":{"typescript-eslint":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.2.0_1786085332681_0.7514073669015633","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@exadev/eslint-config","version":"1.2.1","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@1.2.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"e61ed7707bc54b107dfb2174385f8b61b7f1561c","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-1.2.1.tgz","fileCount":33,"integrity":"sha512-xc7K6KR+h7hdkK91ig5cw0REuCf894VoDYwXS9y2b+A4nPFPZI6Ch67qw/ejpxt9RhS0ZID0YHIGqGCw9pvgLA==","signatures":[{"sig":"MEUCIHl5MnpU39H4A8BOzENI0IYLiHlP87bdeG+EgeEJ7lLcAiEAipyIaaStZSrboiNJMPtkdoEY+MhzABQI2fF0pPc54rc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":41473},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"},"./*":{"types":{"import":"./dist/*.d.ts","require":"./dist/*.d.cts"},"import":"./dist/*.js","require":"./dist/*.cjs"}},"gitHead":"39f9b3ba564b3e025a9bf231fef5c49da4e452b8","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript-eslint":">=8.0.0"},"peerDependenciesMeta":{"typescript-eslint":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.2.1_1786086159497_0.6364023941143233","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@exadev/eslint-config","version":"1.2.2","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@1.2.2","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"68d9e7fb4f27c025ba1499cbab16a51605bd40bb","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-1.2.2.tgz","fileCount":33,"integrity":"sha512-ZjyyB3UeiJv8YStVypDYPBWgEN9cnTgqTOlhyDML8dOVt9PPa9aD9xp1gyY7leSwmcbBZlHv0S3h1qNeRjP3lQ==","signatures":[{"sig":"MEUCICkkr6jOdHsMs1SLl81yisfW/y6MF7HI2+FLfpJ/H5iYAiEAzzlXY17gcN9OROsJvaW23XZpZepqsFmdevxka2Vii0Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@1.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":43107},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"},"./*":{"types":{"import":"./dist/*.d.ts","require":"./dist/*.d.cts"},"import":"./dist/*.js","require":"./dist/*.cjs"}},"gitHead":"635e41d7f3e2fdabe04cd03666e5d7c6a4863f63","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript-eslint":">=8.0.0"},"peerDependenciesMeta":{"typescript-eslint":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.2.2_1786087324871_0.3009537787523211","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@exadev/eslint-config","version":"1.2.3","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@1.2.3","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"95cbad15f70f524319f3b8584ac422a4e6f8630f","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-1.2.3.tgz","fileCount":33,"integrity":"sha512-gT/pQ2WNPzRhOOq3NebsSNb+SE7hDrCYBGcMwUgDDipNcBzdZl7OBObIiOZ82TqruxENZiyPJXQ461ESi2o28w==","signatures":[{"sig":"MEUCIHa021fimJ0NT3YYlqI/arYTSGwqlhvfqf0iGgZDQ9WBAiEAseCY/07Kb1xNa3sY4wrS/yvUxRRten0zlS03t77St9U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@1.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44033},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"},"./*":{"types":{"import":"./dist/*.d.ts","require":"./dist/*.d.cts"},"import":"./dist/*.js","require":"./dist/*.cjs"}},"gitHead":"378507f761afa7fc966b9b59a6fd8daaf73aaafa","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript-eslint":">=8.0.0"},"peerDependenciesMeta":{"typescript-eslint":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.2.3_1786088519497_0.5842683096007579","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@exadev/eslint-config","version":"1.3.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@1.3.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"dd62e4be298fddaa7240cf7bd50b4f614da840ca","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-1.3.0.tgz","fileCount":33,"integrity":"sha512-49pY2QVfH1pOs67SijyLdN5kKvXK732m+UteznJPLkHhf4n+NqUVtcrEAOqm99Qx86kFg0/92UXBlTsuhT+Yjw==","signatures":[{"sig":"MEYCIQDXkfo5SGJoqfJ4fxipVtKzxlMxHbv2dPf0VpkTdgqU5gIhAIj702LeJwsPJqfXcpE/DUrXWo9lbIdDoZJrVl7k1GtK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44193},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"},"./*":{"types":{"import":"./dist/*.d.ts","require":"./dist/*.d.cts"},"import":"./dist/*.js","require":"./dist/*.cjs"}},"gitHead":"fa0f30456d8576aca0f9d53225bcf33f49f3129c","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript-eslint":">=8.0.0"},"peerDependenciesMeta":{"typescript-eslint":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.3.0_1786089034601_0.8753793341857232","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@exadev/eslint-config","version":"1.4.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@1.4.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"2b571cc83b309db730813b80336f4759ed73d036","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-1.4.0.tgz","fileCount":33,"integrity":"sha512-dC41Usjqb2n7GqZocQG3oP3tRzhQtSRnbpUVbxpXsHdvxS/RO87DxR2SdQEs35DzfuaL/bKcUYSTS0DgymrAmw==","signatures":[{"sig":"MEYCIQD2SZCEagRzHWbS2/I4bo88bcKVKWBq0o0Sr9kfgkkuvgIhAI2fovfCyamzkrbw8sfcoUG1Y6fgu0SFIx3RCI/gliy+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46306},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"},"./*":{"types":{"import":"./dist/*.d.ts","require":"./dist/*.d.cts"},"import":"./dist/*.js","require":"./dist/*.cjs"}},"gitHead":"edd4815164914ba6fccdbf8276880efd56b8a80a","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript-eslint":">=8.0.0"},"peerDependenciesMeta":{"typescript-eslint":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.4.0_1786089922382_0.2528514491911149","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@exadev/eslint-config","version":"1.4.1","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@1.4.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"58d2ff0eb0d470105628aefac70fc5ddea02aeb8","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-1.4.1.tgz","fileCount":33,"integrity":"sha512-AKU0e6qbnXC4wWx5b3lTY2mwIy27cx2I+N+g/HGg8nJK41pAe0cV4O548e1sgJu3W97RcZ4j0W93xaKQ7l5QRw==","signatures":[{"sig":"MEYCIQC44pajTYxFVO42HJIgj9zJMnUn5ZYConCCO6Gx4mWAeAIhALVrofhIgnjBWQP8IFLrf9yvwGG8yxFD68X704Wfy545","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46306},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"},"./*":{"types":{"import":"./dist/*.d.ts","require":"./dist/*.d.cts"},"import":"./dist/*.js","require":"./dist/*.cjs"}},"gitHead":"c236cc10ea9201e1196cb2582b6d73cb5fa816e0","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript-eslint":">=8.0.0"},"peerDependenciesMeta":{"typescript-eslint":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.4.1_1786090405270_0.7501348061518573","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@exadev/eslint-config","version":"2.0.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.0.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"8a43c28c23a68ef554c2bd11275f5714ae4023ea","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.0.0.tgz","fileCount":7,"integrity":"sha512-Y5+FOmhek6VpxrVgP5c46yqXbF/6PsNtgl26ptBsW0MjYXfkZz5uR9jBvqWz58fbPUBmeQxGXrX1D5JE+gilgA==","signatures":[{"sig":"MEYCIQDhYfs/rR6Q9CsnteDFYXmJ+7xt43l8nLHiG8e5wHiilAIhALjAZ0sXLSk/1z4+uUuDa2WFpc1ll2jPjZjujv9O0p0I","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":45991},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"aa48d528017b1a2d21592caa715a7a67c781ebcf","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.0.0_1786094115314_0.6558454944652146","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@exadev/eslint-config","version":"2.1.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.1.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"be4fa71f41bea34e2693beedfec999e06727498f","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.1.0.tgz","fileCount":7,"integrity":"sha512-5GfW5xYo3vIEmT/jhO4YRZck+nBlLcuZql/i1CmwQxcCOq1mY9PWhTqT4/WbbT7nhY3bHlnS2ShVvm9AJUTGhw==","signatures":[{"sig":"MEUCIQCF377EW6pwcAVM+aPqbGrwjaICaxHa11oRcOZGgyu5qQIgYqJtvBUXVHu1tpx5+ijmtcX5iAjJjUWB3fsGcNlm0yU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63912},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"3394da206253c8c932efa468b68650061f1f3091","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.1.0_1786102130065_0.3957068008100353","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@exadev/eslint-config","version":"2.1.1","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.1.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"c7de7e72d499f1aa358f6f85db25c9c707b72fb1","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.1.1.tgz","fileCount":7,"integrity":"sha512-jBQHIgLSJdaIaVPqVGo+CUaZg8ytpzE35ZsOrJZMw3GN17v6ry65KDhEQbeH9Vag/or5Tcf15C8PSHwLjArlLA==","signatures":[{"sig":"MEUCIG6zQ2AZ62VMGqj4a8di2ggVNmrFz1QeNsmkXgcZym6AAiEAxBaZaJxotOD5h8YnJsxv4FbaaKTFvX7c96Edo7acwfc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":54542},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"6724c01c3a4e8b84f839115072f50d31307af04e","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.1.1_1786181143891_0.9477144175130034","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@exadev/eslint-config","version":"2.1.2","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.1.2","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"135332f147ca06fb06f313d7a2c37ab69dcc176c","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.1.2.tgz","fileCount":7,"integrity":"sha512-isLVdlJ10wPn+O6iHAUQf+UQAfHvlaOfQYQVM2mUoPXsxKnDn66EvgFdWJUM9FrI/iFRI+bGzm3FfYJu/N+DTg==","signatures":[{"sig":"MEUCIChVUDcKttiJVZ3bRKJZYj4xswPzNpw69+JLVqi+kn9OAiEA63DjRXjmeYxcyqXpfZ5oqOH0jlhknZCZ/wtJPzPdZCI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":56210},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"e65610f96b566aadfbe6cdf72936c8dbd5ec834f","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.65.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.1.2_1787544452122_0.24291426288763596","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@exadev/eslint-config","version":"2.2.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.2.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"848755e15758ef7e6bd1af4f2cfbeba18bc18e14","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.2.0.tgz","fileCount":7,"integrity":"sha512-KK1yfF0QvvkR2XkRxPX1sEzEgjHfrHotnnEFgrRSCuoJYXmnbpeL7LuY3U/DFhq+1y+qk5+NRTx3+I36pRHQdQ==","signatures":[{"sig":"MEUCIQDkm1H6ibXb23b4O/A0mo631gffv7aABzRBWTwgMEiGRwIgFxRtUh884QTTEGCp3GYsmzcI996vIR0+DED0E9b0+rY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":77087},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"becbe26e4debeb32206e11b860b361dc22a99eed","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.2.0_1787730013809_0.9839424694622141","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@exadev/eslint-config","version":"2.3.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.3.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"af602f6e2811ea772371f88821d4ee664f0fd4ff","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.3.0.tgz","fileCount":7,"integrity":"sha512-q37py3xv2e1oddIr30vj1gnCbkfnis6X7WPXXNKdKEITXGHUjA2u7nkpEfKRjwvVitcf2Ccyov2iMe4tgWnCVw==","signatures":[{"sig":"MEUCIQChODfizd6r2RhwfqP9VVTYUPdNos9E83UsHBDkqIQjSgIgZqY64Z2HCebVXcmKmuk3ZLpRw0qENL3xxTF9DWvpTTM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":77356},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"9bf812c2bd55bb41b4254db99d2fd658a12e3a96","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.3.0_1787732499383_0.6598566458096795","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@exadev/eslint-config","version":"2.4.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.4.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"4bf1b08e20274f3a062a04099f4d7ae2f2b96dca","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.4.0.tgz","fileCount":7,"integrity":"sha512-GbvMHZiYK5Bj58/JqwkiFt+djSstqjAMc3BuxyUmu1lhaT5YJBuNmCWlzks5G/RF/6K1hXt+0fVGP3bdutL5lA==","signatures":[{"sig":"MEUCIQDNFgmv7rMaqjr+RNihpC368qJF5r2E+WB+vdiD/QKMeQIgCJLoWGrC0uIHggTrsDHVEi7Xebga2YCsXt61akSio3c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":101137},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ed393d7391fcd2894d6d5386de7defee6b0b4920","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.4.0_1787736963140_0.5426242912780954","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@exadev/eslint-config","version":"2.5.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.5.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"b45041677fc7f71dc948b21803db4a01f4373dc2","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.5.0.tgz","fileCount":7,"integrity":"sha512-dzXC0RGV/sz5jK5gfx/pujtwEPPbOmqdC+zXpFOIkaWUQcA4Q/72Smm8C1iwIyq+uS9uJzmY/M8KmyjaBGSlyQ==","signatures":[{"sig":"MEQCIBQu8SFf2D6QczT+UEWHSK+OekTc6PsKT3nwda9rA404AiBf6slhtFMXRh9LgQcVovEfEfiJBaffvQY2EG4QWYkcQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":142182},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"023c3804d0c79dae0fcaad5f964652a60dd0244c","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.5.0_1787741384666_0.18649082577216802","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"@exadev/eslint-config","version":"2.6.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.6.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"f14e80fc3f4d2cdb8c821f2b52fa06000ae6b7ca","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.6.0.tgz","fileCount":7,"integrity":"sha512-3oOXa/CJ1G3+vKkgYWbOEYWaJuRVCxfIXD3Pgr3Z804LKBhCto5K8f1eyqJd1VIRc/5dQdqpG2qf/1pfz1sDnA==","signatures":[{"sig":"MEQCICdSymgZsMiwDR0yQGHryrb1t7G4h+JppQQb4jLcfc5hAiBME7xbtBfJywRmbDf+TkBeiBU4UfMwK0YURthL7Eyr+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":155281},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"a9c6e3ebcf7b0ea943fb0bd5cf0b83d82a6271c6","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.6.0_1787745494733_0.8574581877712708","host":"s3://npm-registry-packages-npm-production"}},"2.6.1":{"name":"@exadev/eslint-config","version":"2.6.1","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.6.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"610320d0515cbce23ed9422f88d725592e950a2e","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.6.1.tgz","fileCount":7,"integrity":"sha512-0p8NUiPfIQ6+W2TAREK7WXNfEYE2tOGdQC+4OQ8HQRbsUDTLvpd/88JSXqZH1UqRy4Ve6g1RwL5j1IcP89p/PQ==","signatures":[{"sig":"MEQCIH26NBouBX4GvvotXAx3AyfUbpI79alDuYrTGFhKkJsRAiBsJwrUtFSLWgONomdS2JMxUVLM95A/hUzZSXtMqNqHxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":155281},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"5468f2b53d45ea97c813799b61a0cf9abae96967","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.6.1_1787746492336_0.3363198794639055","host":"s3://npm-registry-packages-npm-production"}},"2.6.2":{"name":"@exadev/eslint-config","version":"2.6.2","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.6.2","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"7a52b99610df2760b265cf62c496d6b9831eec75","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.6.2.tgz","fileCount":7,"integrity":"sha512-M1IB/s2MkHAxYrKAKnKy7M9l4Z8u6DKHZm/F4MNsP6nLNbWUu+7lXYmhbH0RxmBmFJkUcaiqdvJzmaHAjXomZA==","signatures":[{"sig":"MEUCIQDcTzFKeCUQEyL+66vlyk842yorLD6J3NurYKpWLsMQvgIgIKXGxjIn7OehqcPvjEnBNhRVmzQcRsIGmL0dHBhPYZc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":155281},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ff4620af5788dcd716f024febfe1b85741ccbfa7","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.6.2_1787750455546_0.08519330541693959","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"@exadev/eslint-config","version":"2.7.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.7.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"95b47b2a3eab9093325628ef306289ac642137f9","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.7.0.tgz","fileCount":7,"integrity":"sha512-IwGCRCconIiBtI3lBiUAd9t8RNaVT+qqqZsg9ov4GMuKP1AMc04yA5b2/Vmu3FN21MAqwxWZeTHA0NLvddy6mQ==","signatures":[{"sig":"MEQCIFFF8yAI66x9aG1a0F86DLRyaR1Rz6opybcPEL+qwZBDAiAg7vuMFOJccWv4nOEPpAZgehLixO88he5qqy6g03l/vQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":154968},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"c2dd23aff521448c84b466b98f45b5f5354d2355","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.7.0_1787752899940_0.9551048325562066","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"@exadev/eslint-config","version":"2.8.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.8.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"fd3ab274fd9f3899950ab6bba0fcd0383db48550","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.8.0.tgz","fileCount":7,"integrity":"sha512-hySxDmAq/p4l8ED5VfRk5RFH7+9dbVRXMfeIo8tXVOl/9Kgo8jjZLWAeEK+aiDGpig5kCPS8VU2s6ySTSQIeyw==","signatures":[{"sig":"MEQCIEHgQVtCAQHEbtmyqmDWNldkFHwVKARg1EpbySlD7KxLAiBJsZkAjPOt5pVanfN3jHMkcOcNC7kDCP2LmQ4W0n0UIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":155364},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"2f4860d2e00f1e57e965b5c7737543e929b94ced","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.8.0_1787780592167_0.39625901193845214","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"@exadev/eslint-config","version":"2.9.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.9.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"00b7eab9862083cc3ba9b2809d91d693d56dfff7","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.9.0.tgz","fileCount":7,"integrity":"sha512-jxPXv1NcBL8Dm/fYkYJ/7agGhlfFjq6BzGz8hGM7ZVPl5yeI0nUh4cEqxNeBtYrk8PCol8kLpUvULPNE8hZzzQ==","signatures":[{"sig":"MEUCIQD/RpBIy/zBJx+DO+zFtFPPhfvXti5PZ4PO3HbdQd1FwQIgWCpqgaTdRGdWDw5DU5gPaZmcuuiE+tc+ICyyu3SY8rc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":156453},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b5ab8bbc3b614dd80969ade0d3dbcb4ca2130330","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.9.0_1787781808371_0.44689394654165393","host":"s3://npm-registry-packages-npm-production"}},"2.9.1":{"name":"@exadev/eslint-config","version":"2.9.1","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.9.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"29157d18a386e75fc811e1bb8cba0932760d8c4e","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.9.1.tgz","fileCount":7,"integrity":"sha512-JXzkrGLsmsldEPrbfLPq+dEqZ9eYOPGr0IZ3S6H7wS3AjPwxCW2uxpFs3tDvEL3zAxIeKE3sNNIm6DDxZ6S/3w==","signatures":[{"sig":"MEUCIANnhKEka/w8ZwzSzX7TWESDdRbhM3WTT7AIFl5hHTSqAiEA3FZ18Re/hZwt7MjTlX1lwQYHXLCF7PjF3X/ek7kePwk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":156453},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"9efdf709ad788d297ce323179b3774023f3bb412","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.9.1_1787782537232_0.11429630587283413","host":"s3://npm-registry-packages-npm-production"}},"2.10.0":{"name":"@exadev/eslint-config","version":"2.10.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.10.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"a4fb661c9bcb3f9c241ce850f91449adc3c89a6b","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.10.0.tgz","fileCount":7,"integrity":"sha512-MRuo4UPctDNTwWdaZLY6VJuYA+GMlFz5R67cHgX2ekI7ZLk/od2KZqbX4bH8Kx6/SRtcJxbFGuIdwXaaPmVuMg==","signatures":[{"sig":"MEUCIAroVxUMG0Kfqkm0n7LWahGJb1btPkF74H9g/81rQ0KoAiEAl7csnXCKRjmzesIlEwiTsa8RS9pv7UmuwHNG2I/I69s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":171233},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"fcf9045000b5ca731968504bf9d9de432145c1a7","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.10.0_1787814393439_0.12203642311482454","host":"s3://npm-registry-packages-npm-production"}},"2.10.1":{"name":"@exadev/eslint-config","version":"2.10.1","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.10.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"17cbc45b10f3de7e6fe3c51e918b843b23de7534","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.10.1.tgz","fileCount":7,"integrity":"sha512-EI0/zHdxoQEWytxd6GUiZXptHFaEdnyaTBZ6OYFAHs6hebIJMT0hQU/JyfjkcmKJb00jas+D3cpEV9Be7MNoOQ==","signatures":[{"sig":"MEUCIQD82gfKWuGrKzj0wvxjE3E73rZIu/TohNUmuU4HdZ93twIgb8oyMEbv1VRwYJEyfx7KI/AuDzEoTIxk0YuY6M65joc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":171405},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"645a8ae8cb10f20b0184742b345b86ed20ad1a21","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.10.1_1788155930067_0.53270066608023","host":"s3://npm-registry-packages-npm-production"}},"2.10.2":{"name":"@exadev/eslint-config","version":"2.10.2","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.10.2","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"a8e047e19d4a9d2bd26cc25916da322101a8fde2","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.10.2.tgz","fileCount":7,"integrity":"sha512-UAGK9aPkpd2mC3x8XQbJcnmdhYhOdH2TQGzVD88QZRMKm9FlASXWcnJpwox8miV6RVVmzOaKhxZJCj8QGGDM6w==","signatures":[{"sig":"MEUCIHZ5j/RGF6j7ub8NQxguzaV1KKl2olj2R5S9qZQizkVfAiEAhdTAiwsCy4JfMpU3oDphzJ8aZrrUhbMfhi1c2P2FRik=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.10.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":171535},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"582dfa68986f9c505d6c0efa7e15988103faa3e8","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.10.2_1788161930895_0.6771248473795994","host":"s3://npm-registry-packages-npm-production"}},"2.10.3":{"name":"@exadev/eslint-config","version":"2.10.3","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.10.3","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"90350c8a3ebce9b1f439686d3e0572e046275fcf","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.10.3.tgz","fileCount":7,"integrity":"sha512-QXH7azy8sebrIszzMrTkhzMnuG5fmSa+jbFI10CCLX9ys0qU8a/HUXh2Uy+tZwRfjiUkl4OUXfBWlHZmLdw5Gg==","signatures":[{"sig":"MEQCIHjVNR8HQ0Kl9b6lRkUNH6tiHbGfEDhxZy6TALxNTHKYAiA3f/79N5iXSgtg/wYrazDEVfd/FIKnrlTiRbUrPNmt3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.10.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":172396},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"cda43aa9f088ae3e1815eeb818b559c9b2c08c88","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.10.3_1788409774643_0.12378594838866652","host":"s3://npm-registry-packages-npm-production"}},"2.10.4":{"name":"@exadev/eslint-config","version":"2.10.4","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.10.4","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"ea230c4e4bc4784ca0502bb8ae26125d67d06712","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.10.4.tgz","fileCount":7,"integrity":"sha512-E+YLfg3RbQ5DVfWMiRdpJo9sjYfwWzuRef6JidWbvoQxHMkEp7IWEPedfIvBvBPQPjK8hDVUMdnKPojdhxEpYA==","signatures":[{"sig":"MEUCIQDqXnrGFi/VcJMFVqVp8npnwoeLHGLlK8fTq0Hl4n1SYQIgWNjPTcy4etBDBzqQ3R+o+E3/ubPd+Y3EiE5T1UCNfVA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.10.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":173376},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"e4787614fbf161f3cedf36ba9571fb1b8fb1ae7b","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.10.4_1788410816795_0.1618031082260889","host":"s3://npm-registry-packages-npm-production"}},"2.10.5":{"name":"@exadev/eslint-config","version":"2.10.5","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.10.5","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"ecb7e325490dc1774542a87c0e304e6aa3f3355a","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.10.5.tgz","fileCount":7,"integrity":"sha512-F8DQdeMKq8GUm5shhW3aGrZvKAdlT7IYCFFJRGhmmYxASfJg+YTBUg/BuZ4CqWZtJDNCvd2OHOHe9ZSn4eG6xg==","signatures":[{"sig":"MEUCIHQMa1hnJ6trlSUSYhWjZLkrthV+K7Ij13u8iV4Acu6YAiEAw1C2VWWkPWc3Q4wphr5WA+bKKDL7CZiIqpI+sf6RRRE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDyTIyQwKAUsWCvy7p7/j0EXrk+FXFpue8A8tNyBgcoaAIhAPa95osiS3TXzp4Y+fBzyTb/k7PtkgXDSQi1i+d5AWk9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.10.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":173516},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"3c041bd1f43171e6c6e26db5015d40d5ecd2a52d","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.10.5_1788689023931_0.6897009799862743","host":"s3://npm-registry-packages-npm-production"}},"2.10.6":{"name":"@exadev/eslint-config","version":"2.10.6","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.10.6","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"40c48ec9af71a874ba166338f318c6b5cce833f5","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.10.6.tgz","fileCount":7,"integrity":"sha512-iU/0uHNqo9GLLpLzlBA9KN3233aKHOj7bQYsc4in1HCZaUHqjNmAdX8bPs99SxhNjsP7wOpBl7Inrh6w3JDlqw==","signatures":[{"sig":"MEQCID9VfKw22CB2Fj3IZ+BwIGGzjQO5jrpFUKIWVdjI5IiUAiBS0kGSMa22XLwj4m6Gw8CnsLEcU0zCJQFdtY0goiY87g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBgGXmDShYYGzYd/S6/5I3Wy52Gh0roCZqVyKYM3gT+KAiBrw9cplJOuVvld01+iOYvAF7b+cdsnkqhH+FmMlXz9KQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.10.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":173516},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"a75edddc9d8fcd0fcc3d4b9703dd400d33ff6364","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.10.6_1788689956806_0.5649657870895672","host":"s3://npm-registry-packages-npm-production"}},"2.11.0":{"name":"@exadev/eslint-config","version":"2.11.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.11.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"4245b99cda524f654076b9471b9477ba36462491","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.11.0.tgz","fileCount":7,"integrity":"sha512-sejefy0fMtDhNNSYf8uyL84LZ4BIzfiwQJdRYPiFmxiHkT6XEk75k8mBDQIgBZKXzJ5hpQgyBHOYyjFBYKdcNA==","signatures":[{"sig":"MEUCIEZ+s9ft0l7uEIpJDbdnRmLGk6DuaQ3Oa1/AOc3bv6piAiEAm40MTBzXzI18UVtliaG9CDywpxr/SVPPB7BPbDi7Img=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD6Vr2OIVpwn7OVin3IFHXLjMC9gSK/Q1slVAJaJXtTKQIhAPQOw8k6V9xZjs6fZ51/Rcd+yGjvgEi0Me1NgjHY+vb/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":175780},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"5c34b68d6fd8ece091a6fa5c442d9bd398255e46","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"^64.3.9","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.11.0_1789217282390_0.5526710937899908","host":"s3://npm-registry-packages-npm-production"}},"2.12.0":{"name":"@exadev/eslint-config","version":"2.12.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.12.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"75684ae1c309dea0a9a54d0dde95d69588bfbd68","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.12.0.tgz","fileCount":7,"integrity":"sha512-DqsoLC5A6R9rNN325FPMaNFFrNlykpVahz7LYuFa1wwy+Nx/tGsodbZlm2fSuYXwSNK+Va49meQsJxzB5JuYKQ==","signatures":[{"sig":"MEYCIQDzeKo1FG+tCht/c6dAUHl8lYMmcnGIUmqHZNXZVBUXHAIhAIgDEOA5EYnq87Rka6gKy5U88SbvpOCq9AkqZa3+hp+u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAlAb7IwVZ9n7gn3wVcFDQS5VzCOp6luUa2lDTIRlXcpAiEAu3TPi25BLaaeyRw5SkmaIm/2OvBK1ajTlqbM8aXMhpk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":176628},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"69e7cce734b30eb7e08df350656fb05d126a829d","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"^64.3.9","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.12.0_1789357711518_0.21661608653418596","host":"s3://npm-registry-packages-npm-production"}},"2.12.1":{"name":"@exadev/eslint-config","version":"2.12.1","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.12.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"bc7872bba2088f56db0e6fe8168193b842d63cfd","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.12.1.tgz","fileCount":7,"integrity":"sha512-b5JKCX7l5onZy0i0kHdIeuiocxDoiuEwnrG6+j+EV8ZWaLpi18BDzNi1iT3tc647DFRUYJtHWDiJrkWT6E2JjQ==","signatures":[{"sig":"MEUCIQCJ4Zt+NBY8E7VX9wQJs/XWDfM27+k93UR8CkAAtNsyIQIgYohFNYHzdrSZd2i+18kZEPh0t4UXbIKCkyUzHpAIlCE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCID6yDZgfw05EZcchX40mnSX/MGhuVc+0gzxIj1XEUQL0AiBzA2DptZ1alHnV0PaajQxFe5nfdO/fW3gXYvmbFH0zNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.12.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":176627},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"a9ce86de6d92ff01256bea7715ef093503db0bc5","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.6.0","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.12.1_1789371958795_0.021066351967251817","host":"s3://npm-registry-packages-npm-production"}},"2.12.2":{"name":"@exadev/eslint-config","version":"2.12.2","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.12.2","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"696126bc8e7c65f6ee4e9dbae7f6b2844721cb72","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.12.2.tgz","fileCount":7,"integrity":"sha512-N9rrD81w7PXJ8NsT6r54ND1DV83iTkGZXtXPvZ2pzYxiHbnhY5f/VvjgXsr7gJEg5GkH6MrnYWrwJoRseVjpeQ==","signatures":[{"sig":"MEQCIE8yoZXmL4V6Oe4Zxu+zqvdp19zAHf4WwvzZxhnUKPONAiBIfTFMq9fliVfWyHstKN2QtPz4pasFJgbhpKVNz6TJdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDKf1ognpprvSWjG2NciUlfv2VQRRV/1lqJPFezzOqskAIgFgoAhBrtP81rEUsVG3NkFWryOQcsCabUqUUW+FJGKJE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.12.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":176763},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"f3e74f31b47a209cccb69a4ebb89f163cad9d92c","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"^8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.12.2_1789372848994_0.478670147296127","host":"s3://npm-registry-packages-npm-production"}},"2.12.3":{"name":"@exadev/eslint-config","version":"2.12.3","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.12.3","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"373029ed6c7f0cd805d0f4b04f1a0b423085a98d","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.12.3.tgz","fileCount":7,"integrity":"sha512-gs6yKJhngCnC8AJtthvr8Tq0pNzmNzIKnFEJLaoh24sw8PK0WntpLUB+0Fxv53Soos4Ju0pSBNCufmYljGwaVg==","signatures":[{"sig":"MEYCIQD4SaWnL5r09YXyx2ZG3ua4EDITy3GpdBDkSApSxM97XQIhALcA0Mm6SAXNJPzKtyxjca6a0M8q7OT3dTJ4/L2SRmlx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAcDuc0tFDXy8T5XYQloMHYT8YwgIgWH+svptPaeXAIsAiBzV6/98d4qApGev1g56YE4p75UXgrEslXKUWPmwcRM+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.12.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":177681},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"4cbdf47b98c5dcf705f044107c89c70c92b04b11","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.12.3_1789398408251_0.4765692156105732","host":"s3://npm-registry-packages-npm-production"}},"2.13.0":{"name":"@exadev/eslint-config","version":"2.13.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.13.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"37802f030ec48c04a98d3c3ab5b41a732ad7b216","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.13.0.tgz","fileCount":7,"integrity":"sha512-p61EN/Jn+ZUQQg4W8CgbM9hnx/eJPAyn6e6WhF6BO+jkMmTTDknp7k988VtyVgDl7sXVq3yF/F+UWJlguDIlQw==","signatures":[{"sig":"MEQCIEH08M8wPnl1fsY9fAIH7yVQQBZSWBHMZQu4NRlhxNMeAiA1dy8ES2wzSa0tRl3lvZtDihpDetUAl1EfUN0f4QNxSw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIH7VaCTvbnpS9mJlb8tNcI1MR+68S5Rtl5UBlPD4Na3MAiEA+E9RsF/z3T8klUG6pzd/5sxq3MhwYl70ik0Ss0m+aC8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":181570},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"9b6d9660a1167f5827984b4933ff38e178dbf760","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.13.0_1789445613731_0.7524833939709636","host":"s3://npm-registry-packages-npm-production"}},"2.14.0":{"name":"@exadev/eslint-config","version":"2.14.0","keywords":["eslint","eslintplugin","eslint-plugin"],"license":"MIT","_id":"@exadev/eslint-config@2.14.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"68b8178b7281ad9845e3c686f1ac7cc3e6498ced","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.14.0.tgz","fileCount":7,"integrity":"sha512-u94hcwuK3DcYud60euqiZLoUq/Ahc6dbyDuKj1dfLGGAJ/DfkFrHvZzxpBiQCyuExKQjcT0uCptbn4Zet3LQXw==","signatures":[{"sig":"MEYCIQCjI8g7ZerS+w4cgid76d8V9Bwe17IoICw1o8ttgZrZ4wIhAIRhiaDH5VwPQvIsPDBLuxagrOIykwajugplZqn/ki3/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDYM786v2ZDbAfOWbCHXM8OAiPaC3FPrcNdHXzw0pXITwIhAImHU/oeT/4Bu8ugtGDfuf1mRPt0o/l8kcpJr0XszooZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":184574},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"902a7255f73996d242024f39e524b3b599140c0e","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.14.0_1789461582927_0.7694141603552185","host":"s3://npm-registry-packages-npm-production"}},"2.15.0":{"name":"@exadev/eslint-config","version":"2.15.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.15.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"5c99ffcf68e1738096c08a47f286e4e778e755a6","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.15.0.tgz","fileCount":7,"integrity":"sha512-rCFUgQw2XNaOpA/J3O9yhyo7YoedMJ/S3mXB061Dp7S1Efu+6VgLSaSQ+u9mozGsYrzGhLq4mUHKzD5BuoNCZA==","signatures":[{"sig":"MEQCIB1YMYC1t8biLTEXn4LWFekyB6LM6/Tz5e/eYNuQQE+BAiBKXyJWPN7sny3umCWgScp6JmDhtj3Uf0RbtnkBxIdaGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDAeG43qTJ9b/pIofS54urf20VjtWGXEf/Q6ps3w3vTEgIgdIRkYOq5fS6QFfChaYESYV12M+/Gm7uUt9v75FE0oLo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":213325},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"27001278609a87216deb5c381d45e681ae14b0ee","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.15.0_1789463305109_0.5206258906923937","host":"s3://npm-registry-packages-npm-production"}},"2.16.0":{"name":"@exadev/eslint-config","version":"2.16.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.16.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"d4e6ac3035d3b91f01cbdebc16fba5e3e6669e92","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.16.0.tgz","fileCount":7,"integrity":"sha512-8u+wEPgQvl9X0k/BpHwxIViOLAmmgo48DFAoJC0ohHY8YrR2pINoGjXPe4w/Bv41nPn9TzLWhqXy8jkfiotZKg==","signatures":[{"sig":"MEUCIQDMPMR53eMLfZ231UrIOlq/cShDjlvNWXUvm49/g2qX+wIgCYKKku2ihwLltsIF/WVIqIa84JQR/Fiebi9GXAERNrE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIH+3ffXM6ZXmSJrbwEiNzlSBxD2tLZmhrOCvyglf9VVgAiB8iFox211Dzlkx/bh0NSms0vfnKgO1lqbW1IopdfGyiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":214397},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"2d734999de6e7d34d65049ca6d0d7484f1dd4184","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.16.0_1789465672330_0.32444789100560656","host":"s3://npm-registry-packages-npm-production"}},"2.16.1":{"name":"@exadev/eslint-config","version":"2.16.1","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.16.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"895b1b0aec80f4a981182dfd1ee0f47a3a20781a","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.16.1.tgz","fileCount":7,"integrity":"sha512-ouc+db8gy/efN9HvgAKYesuaatzO+wUEG9y6cpHLU7lhcJ9HD8cQzi1nz+1ms68jjeLUJYqzCIOC3oeUblQbVg==","signatures":[{"sig":"MEYCIQCyuTypAqmAuoWCC+yJNIDfCx8LGutVbdnM3pEtWtO2GwIhAJjNfMwVbyvohVdqcIhAAcdVKs5ZfW0BI0huhWtH8yKE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCeR+5YwSqLFDsXsClMPCXviH/kTbBYFZeu2FZRnZgHhwIhAL23MHeSI6AInkj+5VLloxa3QyrZe9gi+UTx1SaHmAjm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":214523},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ddc0414dc67feb9971c05593cf7556f69b294794","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.16.1_1789468312280_0.6297850455039535","host":"s3://npm-registry-packages-npm-production"}},"2.17.0":{"name":"@exadev/eslint-config","version":"2.17.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.17.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"92606cc9f2b78215464e95bd2c0ebc90e02588df","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.17.0.tgz","fileCount":7,"integrity":"sha512-aMPeFYi+tnWXa4c5Thf89X3XwXW1T+W4awvl+TwokK4t8BRV7n4Y2HOzKWNKH350tq9DUiXCtQ54s9Is8r3+bA==","signatures":[{"sig":"MEUCIQDOD+h0s3ZemUtmWOE56J6QwoE9hyWsZOJnL03KhuUO1gIgEiNhX18D0V2+mTfI3+QLp3XT8vB/3fv9sSCC2uWDNQg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCDX6MV1M2O81HHwysSqR+f+Yzs08zoDp2gnW0wZKlWKgIgV0h9ZgKkqpC5oru0I0gcluTN/+9WLo0Ukm/G+QSPXz4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":228941},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"a08980a3c57888115ccb6054f0a0b3b558838d2e","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.17.0_1789470028702_0.33632126973419285","host":"s3://npm-registry-packages-npm-production"}},"2.17.1":{"name":"@exadev/eslint-config","version":"2.17.1","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.17.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"8de6e546ac12e103b9a0a7d8b91d858f31a559ce","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.17.1.tgz","fileCount":7,"integrity":"sha512-9Ho8R7Wiyk4CMP4aEiYmMNzhX7/e/Bzd5TMzY8W8yIcFtt9Ys67KADHsBYSa5CD4AOwn6lyx1ZyDAxJctBzqiw==","signatures":[{"sig":"MEUCICgey90ajMw0e6HKjf5x8HFTIXdHdkBGzFBub2s7s46tAiEA32UpjI718Qv79cqWobzfF1cQ1cWXSA8q0TN1Kgqi1og=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIE5VmuZMk8xKPH7oiPrPZKyDDp8m63mo7Qm1OJ46y2iiAiAx/nDehnaDgBxUCnRI2bHR6A26PMEeE9ghcr4Kb687Tg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.17.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":228941},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"408d7ae7957969ec709557ff1554e150d58618ee","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.17.1_1789471563685_0.022786241289424414","host":"s3://npm-registry-packages-npm-production"}},"2.17.2":{"name":"@exadev/eslint-config","version":"2.17.2","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.17.2","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"cfbbf803f3f9b2d187065255f59850699d8eeec3","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.17.2.tgz","fileCount":7,"integrity":"sha512-ZbxDISSTsuLLh+t8qs2darsfjFPgXtc5moXkTjeQ+b6GCnzkxCsG6H6+0snH7FgWqVtR9saqAVPf4JS2KwChTg==","signatures":[{"sig":"MEQCIE/6mXo3jmiC2hcKTI1Y/mlkIBEfoSVTjQVCONqDlJBKAiBprWJQNQPr4GJzA5ll3uBfXRT39Y6tQNDTLdeIqHx99g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHq/DXdhHlVevyAvGrJVFRU7o0XGScwupt1n8R8dY4QpAiBSs0E446bDoD5pKL5Fh4ECc/WIEScqS/p1Nh+tQ9V7oA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.17.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":230104},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"f480a2c58371b615cd10ac5c55bdfefade7d54ec","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.17.2_1789499018431_0.4583012801558062","host":"s3://npm-registry-packages-npm-production"}},"2.18.0":{"name":"@exadev/eslint-config","version":"2.18.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.18.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"d90aa80be1ffc761785271cf61b61811954ef5c2","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.18.0.tgz","fileCount":7,"integrity":"sha512-wPRWdM78lRqHRc0Vjc2MTwwg8qU3mK7Gur3mq2XEqyVf/UoEWQPIOAQvAAPKHxuCdFlHIaYtDdi4LR9Smwk2hA==","signatures":[{"sig":"MEQCIFZ4X5EkeeTzXUnYSdj+sULGD+Ygkl69v7ebQGwh44hzAiBIKcObv8jEaw871V4agZyEanlGQMa6VTm4QRlx+GfPow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCXpyTmg0j20WBNaef+XRnWdoK+tE2IeSYfjpvORiylZgIhAPOX77Z0gj77VdrTXHs5TAikG4novgTLBOSjaJOGLPVv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":237334},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"4678e85ed4da0e7356b8221d044d67f1d7a968b2","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.18.0_1789501645188_0.9601586335236856","host":"s3://npm-registry-packages-npm-production"}},"2.18.1":{"name":"@exadev/eslint-config","version":"2.18.1","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.18.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"81fa2f6d52798390122647b0dc7b687d6320c2fd","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.18.1.tgz","fileCount":7,"integrity":"sha512-K/vFUsp5g6NB5kf/eKL/85RsxXKdlU+CCVi1dPQC6qGroXwjB6Z43qTCz/3p1VchkeM1lnY+Wr/lnIyf51i8dQ==","signatures":[{"sig":"MEUCIAL2vVt0v1YPGRScP3dHgHvYM3+SY00XRnByJ2WpFhj7AiEA8RO+yT7ZdZ9L32gLSBJtP9SgXdT0rR45yuDtbhTG0DU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDvstNx7zLqtr6bfDxk90ShiU9cjlnvfTac48zQMqEm1AIhAMRte1dCaokzWWzayF34ewpTFoo9OQzHNuI5N6N8pdDM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.18.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":237334},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"eb2c27262fed084f351734a84cd572950dda2673","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.18.1_1789654546189_0.21479290094705505","host":"s3://npm-registry-packages-npm-production"}},"2.19.0":{"name":"@exadev/eslint-config","version":"2.19.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.19.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"a379749d82c4bb501989b07a488035e4a3b4b368","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.19.0.tgz","fileCount":7,"integrity":"sha512-BJMqwVoSx9PY4qhkRbmhfMhEcG3XPmBJUF4tYJVvnSj/Di2Mz1DyiTGB61u4rBO6KsBWcYla3CIRu8mxRwFhvg==","signatures":[{"sig":"MEUCIBByTdhL7p1LRWfGIm6GLhtFCTf/8bqvo2i6+GJZpoU3AiEA+iLsU4zhXgXfwTekXk401FYyWPNfjxc1ljEIUJcXaiI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCgxSsEZaQ2hmv9WncJwH8GrdXIVz4Vg8crhkgvedc3owIgXjUmn8R0UDqYf9GIngpCpNdJO1MsyRKNCC5hVnDBNTU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":242898},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"8f396af9a9814b23250615328ec77f4694187754","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.19.0_1789695579681_0.1381817997917716","host":"s3://npm-registry-packages-npm-production"}},"2.19.1":{"name":"@exadev/eslint-config","version":"2.19.1","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.19.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"d016da533b90d9fefabed5ab6e43107e764fdc63","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.19.1.tgz","fileCount":7,"integrity":"sha512-YzudnnSAactjQ+SWc9s3yJ5Ve3ynEms0ckTRFP87QyK9pqUSHSMPN3rjfnuN/mPaWoiikzWhufhtSy2XHBdx/g==","signatures":[{"sig":"MEUCIQCwms8BhcFl90a1sTpCvbDNaocVSCdf9ZU9jW9T4fIJNwIgBPrM6qnuV7zID/lwcgTlc+sIa0I2o15r37cYOwjexpE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGBVObjxmKCqz/WbF0JawaEtucc6JKU591/dXoMeC7eqAiBAj2xQYqYM20y2dpMvCQN25IAvg2gJXWBDpuEc+F6jow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.19.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":243919},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"c5b206d1a3ae9517e5ea454cc2e20432d66a49db","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.19.1_1789721332970_0.33517026895159496","host":"s3://npm-registry-packages-npm-production"}},"2.19.2":{"name":"@exadev/eslint-config","version":"2.19.2","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.19.2","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"220e0192c9ca86caddf916f1031b4e5d8fd87df8","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.19.2.tgz","fileCount":7,"integrity":"sha512-xvHPnhNSgdWtzn1yAkQ4JR+O/Q9dym9EcDTYw3ktTWYgx4Fk3Ao/ya+sx4s1CX8sIxvXyVWR6gsIDDPYYAoM3Q==","signatures":[{"sig":"MEUCID2ipf8emwHDk0tpK2xOXXYDAvrhoN2JRBV5fHIgkga0AiEAipss21EqxPFy7RTHVBUNdI9SPXQ+23hQKDG8bNt2HXk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQChFr83Fagv8bAsukfdPcpGlM/MtjGQ/K4HhbZ8qsuPtAIhALYRXE44CzzIkjKqbpFrNAI6HjBxP/1s/4KoeCPUnD5+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.19.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":244551},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"099ff0c71a9bcf7c5566a0f7af3cae78c54dda49","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.19.2_1789722461516_0.20399479124579023","host":"s3://npm-registry-packages-npm-production"}},"2.19.3":{"name":"@exadev/eslint-config","version":"2.19.3","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.19.3","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"5655f3114ab9b5252dc733aaa1258d9a3d0fdf42","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.19.3.tgz","fileCount":7,"integrity":"sha512-bI9aF3h3z5U6His4ASY+Mu/ysAIZN9Lc2wxBGDJXVzuktTuR3hP6Z9p6n8Z1Y0sie2S/IbEzFCOKHWVPLDG9TA==","signatures":[{"sig":"MEYCIQCNiVgm8K5yDvljDT+o4U2vNOxrCEO1x6z3jWmA1WRY0gIhAJKc0HPW4unsBY6gSXIFYFoXzUHb12fInFmlZ5cCNEhj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD93Umh/4Cv4yUboAlqqlh/YUUvU8E/9tiMPVf7QLWQ5gIgJwgX7eaq1Bv+W6vyvfAAwH0vB3cYUi0JCPNgXOuIZV4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.19.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":246745},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"d28ffd5c896942679134c7152cde7f4a2e72f609","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.19.3_1789722761423_0.7334847825680828","host":"s3://npm-registry-packages-npm-production"}},"2.19.4":{"name":"@exadev/eslint-config","version":"2.19.4","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.19.4","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"87ef8bb17d3343d2facf773f9c5fb32b355c6c1f","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.19.4.tgz","fileCount":7,"integrity":"sha512-UfxY42jm3H71U9/l3zzCuGOXJGAaVWBlUL+ZVWetOou++p5+CeMdNMou1gJxw+DWaoZKkOo/qAQ/0S1eqq3uvQ==","signatures":[{"sig":"MEUCICflx//Yv9Jwj3gI16ufagM5AVPxT7cdcq8F3fqNn0CtAiEAv+fLOvEzG5Rf0K/AZsvY4TQHVqhv2QSSuHr38fTCfWk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHiGWvFVXGeMsnAu1rxF8iUtEG6fbX8fluliOatdF6pRAiEAojHfeTwX+/ygsluF4iWwpfezBVtmpZwdpHdcyHPuLyQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.19.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":249596},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"a22652f3499c406cb709d809b62a7550f3e970c2","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.19.4_1789724303088_0.849728659747572","host":"s3://npm-registry-packages-npm-production"}},"2.20.0":{"name":"@exadev/eslint-config","version":"2.20.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.20.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"597904c982fad7470debb6500e37fb567012dda8","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.20.0.tgz","fileCount":7,"integrity":"sha512-T4xHKttZJX3O93nItU9PM0B9O2artd0QRQbUazBQE+MtQOLjTXQ5afgXjlW8CLAmG5Z+UgoTUYOmYtd12Y6pZg==","signatures":[{"sig":"MEUCIFL8SPfGVGnewlNr44HpTvBX9vJJKJ/Hc6D7zkmAAw7PAiEAjtUSlus+FiKGCI62WT4HDvmJoAQhwEEo0Hc2OkJcIKU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGyaPrlmIXC/x1nuJw2WiVX/u/ZmvFF1czK0M2muFxL6AiEAtwz7NTV2Vj45Ep+NwGS4lOtyrbGk94O/VTq76uS+Y2o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":268786},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"84cd489302dd1f65c7f38575c3c7864bcd884cef","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.20.0_1789811959564_0.9155602652525685","host":"s3://npm-registry-packages-npm-production"}},"2.20.1":{"name":"@exadev/eslint-config","version":"2.20.1","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.20.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"11c219ee8ae5af6736198adeedb767179ea9ed80","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.20.1.tgz","fileCount":7,"integrity":"sha512-0vqQXJF1hsxNT9WD4Il8IOWku5JF9/CpAgLXjScQUbaqQ7orkpSyAlcN2ajSmobeRlCsTFFKYfHzBCpTMNPhcQ==","signatures":[{"sig":"MEUCIQDwEwV9EnUcJCIw8OQkEZHpK9fjpv4s0jVSCJ+4G/dqzwIgCf0XQNIPzySVQxc5Q39hcmT4iFq89zQzE7ELffR46/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCIiYb9Xk+Vy9DHYJ263Q+i3cXnFiculrf505cV7LnoawIgPVURQkrhbNL9ngmC/aWbxWTBuxcz4BL1HjvudWlZoqM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.20.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":268930},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"92528c0f7b2b09a6f8c954d2d74e7eb020e830c3","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.0.2","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.20.1_1789812570644_0.6128191982104649","host":"s3://npm-registry-packages-npm-production"}},"2.20.2":{"name":"@exadev/eslint-config","version":"2.20.2","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.20.2","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"4a54ea81e0642b92b3c7f78f0c41c0777c8ed0d6","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.20.2.tgz","fileCount":7,"integrity":"sha512-CxuSJF6eZfcW6Es1PsmPFyroJTkCgIfTS+rmUb2qp1kCeNWWa+crVLqQVU4T9l+X43FFwo+zgPCxc45ZBv15Zw==","signatures":[{"sig":"MEUCIQD06aD4D2ViunsK0LoG+hIP3AlWEqqLbDV/VLm8OPHxDwIgaq7VCk2XWeMZ4chZmpPj7VuZAENUojWPs1lyWdZWKzc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIH9yIIVpHqIeulfWAfx4YboFuCIOexI2JOV6SAWSPlRtAiEAn/ECBCLs9wAaed1Zwy4UAeP4G6AeMNuC7IxOiZqAW60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.20.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":271524},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"303554b5d4b44a6d5a2ae55c02e900604d8bb6ed","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.20.2_1790345212280_0.49942470998055377","host":"s3://npm-registry-packages-npm-production"}},"2.21.0":{"name":"@exadev/eslint-config","version":"2.21.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.21.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"f179b3c95aa1fa51f0b8babb8503863d32bdf3d0","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.21.0.tgz","fileCount":7,"integrity":"sha512-NVAP9aAfEuEwt4rTtWIusIghvDfl/+mSm6BtiWNod7VJ425/LL6zi6fz3dQirBwZkWNQGVtnUVlwUld+5UjwJA==","signatures":[{"sig":"MEQCIGxkNvFOUsLbZIaxvVJ9RKisXnWm8wz2jHdspCVemExXAiBBpC2xjPtLwjRfflZAy+wOgoGCQpu913jXoRargPWzxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFOqTOpZRAC10GVgHjVOeoJAolw5k8+sllHHdt7ItFyoAiEAzk5GEuBG8+cUSlZ97j0kzbspW8pUuC6HwWa+CoDC5rU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":383511},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"099cf05c3622c47a726510bc795586f75878f179","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.21.0_1790442042998_0.5822021270737054","host":"s3://npm-registry-packages-npm-production"}},"2.21.1":{"name":"@exadev/eslint-config","version":"2.21.1","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.21.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"7484db5b06365a7b53ec4b32db8abdd08bbbff8c","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.21.1.tgz","fileCount":7,"integrity":"sha512-az6XRcZCaSov1Oly2ODLQoAYjEilRlAfxDci+dqlNZU8mIGiWpgITm311d1s2XeU0gLt1HeaZ5ZW4lTLa4G1sg==","signatures":[{"sig":"MEYCIQDFGX99HOO48eyEHpBXzI3WD/JMKOa4kkGBNpXO5+IsvAIhAMEwqwxX6lC56GmhBGYFLjJ0k5XwaQvtpBM074sjr1rK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAqSQuq9JGALowdyMYmiaQ+AZ6NIwvvZ+Wf6ghCcUSIXAiEA9qPHi0fY9LgyOKUAYRDjTM1Sw09tuaVAXbMRJP/dJXo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.21.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":404123},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"f77d9609c476b1079b80f156fd31948bc49c1882","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.21.1_1790447343649_0.6282201803586709","host":"s3://npm-registry-packages-npm-production"}},"2.22.0":{"name":"@exadev/eslint-config","version":"2.22.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.22.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"7d820adfe80becb3b75580e4aeb78ce601f83c2f","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.22.0.tgz","fileCount":7,"integrity":"sha512-qFiCt3an6wav4mfiqBh1JO2pBgPK0Tkc6MtcJyUJnvgQvZlXTavzlruVc3q+TzrbTWG5h7MAi+WQE7x+4r4KdA==","signatures":[{"sig":"MEYCIQDz4eDxXCVfvIWukhjBtnhUmCxw/GtOffypii8sPlFLZQIhAMrr65eJOc3bzSW2K/IzTk0xGavtyiC2st78BBg1lq5l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDBHRYmy7If2OhpKHJiqcujQ70hEq8t0pa4Z+4khmYhCAIgOK/3dpUwnhhjsgmEa4lC46hTiliFZqaWtOsLWc9oORo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":423039},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"868baa14beafaa9eeba2bc003b66521797e0435a","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.22.0_1790463356831_0.23168228013162162","host":"s3://npm-registry-packages-npm-production"}},"2.22.1":{"name":"@exadev/eslint-config","version":"2.22.1","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.22.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"c64ba7b143cdee879f40ac598a87a02297c393eb","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.22.1.tgz","fileCount":7,"integrity":"sha512-G+/NilTKHJJoJObMYMTE4RK4VowTXgjhzmJE5XtLXPYqB4vY86u+UeufFq79OoJxwYXPyEpnDnmvxCdT2q4dTg==","signatures":[{"sig":"MEUCIDvuoQ+OYLppHUtr11Af+tQJplFvk0RlVKLhBdLlleZAAiEAkzbHMNfZYbjTRMvSWPVY0SuO7px/bhpS9r8tO5stXG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDquEbeeA1Ie87Cj0x+ZcCp+Kaforh6d+7xcLl6YTJS3gIgZR/PBO5AtlbtoftekoCMV2214PfDzX/o8U2KBiRwAHI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.22.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":423242},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"7c67514dcc15fc8358e27af099c06a6155955471","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.22.1_1790482606646_0.40534474513349283","host":"s3://npm-registry-packages-npm-production"}},"2.22.2":{"name":"@exadev/eslint-config","version":"2.22.2","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.22.2","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"7631cd90c5b91b90247c8fe65320e39b58b1d754","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.22.2.tgz","fileCount":7,"integrity":"sha512-Xoh1jq2ksMHW897cu+1nLRSsWKean9WY0FQSESdoAMrl6yp4sSrfqijXIB69O08iTOVX6bn5ilAlTGcoR2V82Q==","signatures":[{"sig":"MEQCIB9FZF9ABzvoESi50Nawl6JHsQ22rksagFgOCSSCdK6FAiA6ktMwaQCVrqwm6xrI4qj2GyRhu0UHxudA/sFGfvbDww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICT9+rdk6Ygv22c2opD/iKsXHPdTJmhmqiFmUl1d1N9pAiEArFmMig7DFgggP/yZMjb/BruvOFqW6XkJi8tZC9Z47XM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.22.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":426675},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"81588c14dcc36024499520ad3e8e218766906e32","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.22.2_1790516737741_0.14368391540686876","host":"s3://npm-registry-packages-npm-production"}},"2.23.0":{"name":"@exadev/eslint-config","version":"2.23.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.23.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"9b41a0e5848fa1160fd3957b5423be078e0f0337","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.23.0.tgz","fileCount":7,"integrity":"sha512-xcqNc3RakQj8aPIfxff+6Hp6JkXw1HkDQuWE5brEUBYncEUJkqP2Bg5kYl2SPJwSlAXCyuV7zFPOIsVNfYoxyw==","signatures":[{"sig":"MEUCIHLUQ5GcOlCbK45Srm2UXtYy5kcFKU8Kg0Wexr70rJrkAiEAtZOsNOUCOCHLcfT5feaJxTlJeJy6hQQmeAU894ekf7I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICQQ7QBPTNGyiMp4OcYEdY0BtVroDztDBCAJ8cMr2mKuAiBep+F8o8CBkP5XNspzx9I7vICPjzQfCip4Qz35fw5uRQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":619381},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"9daf09161bb22e183f19a87788e42e00a5b60e68","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@microsoft/tsdoc":"0.17.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.23.0_1790595741089_0.13364224795745794","host":"s3://npm-registry-packages-npm-production"}},"2.23.1":{"name":"@exadev/eslint-config","version":"2.23.1","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.23.1","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"18096cbe720cba5d66ba0c07f7dbf7bb9c4785d1","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.23.1.tgz","fileCount":7,"integrity":"sha512-8f0DrqVDZcQu52QI2RZ/nCEzVaShcMsN2hsWhkmQhMlyUoMEq3l74iSGBtb19rd8jfsLDbJ4hJ0LKvW5Z6Wiqw==","signatures":[{"sig":"MEUCIQCk8FikZC1dUjYWdkdKqJNlliFtOEFy0/eaAaZFxriT6gIgNfPO09IDV7VaBeYbeOQEG2vDOsIAt+tkoGsHScyK2vc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHTpFr3WBgdEaQSnF6A/+98mCEBcNQci7Z2BMO2ZVpnLAiEAgMOyrWlDgtk6KBLznuszereevGQYBxqfSDhJw3patCc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.23.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":619625},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"66d220355be162a253809c60469c91268f221c28","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@microsoft/tsdoc":"0.17.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","@eslint/json":"^2.1.0","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"@eslint/json":{"optional":true},"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.23.1_1790706026670_0.621271738959789","host":"s3://npm-registry-packages-npm-production"}},"2.23.2":{"name":"@exadev/eslint-config","version":"2.23.2","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.23.2","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"881a1db859c3c3144efcaa40468a2b863bef373e","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.23.2.tgz","fileCount":7,"integrity":"sha512-memMn2Rf/iuB+VVzj8YCYLKJOC9zgwAIW1l4Bu89DAoKVV0TM6NcC8pmM6y8ADbquBb1C76SEVwFygDzATx/CA==","signatures":[{"sig":"MEQCIAcRne4vx6Qkgb1qVJO24e3eURRRww9s1tMCFKEMSNTwAiASfZvulTADvUkb0PSVhG4JPn6bzefsNzqbo81CTmPjuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIET33Uj9KbVKTfkjyvYrloioP6pYiJn25KOg7MBw4OeOAiBSsOIB/tH25asoboT+mAzfppjQSQYpnbxxINvqWe2hCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.23.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":619625},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"a511e5057161ce7b962a764e29409f09de845f4e","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@microsoft/tsdoc":"0.17.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","@eslint/json":"^2.1.0","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"@eslint/json":{"optional":true},"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.23.2_1790714848403_0.6634866576412397","host":"s3://npm-registry-packages-npm-production"}},"2.23.3":{"name":"@exadev/eslint-config","version":"2.23.3","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.23.3","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"33e96db06a114ace80faf09e59edc7143ea08287","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.23.3.tgz","fileCount":7,"integrity":"sha512-EZkoEtcewG4O6gCe/oDiIhwRhbzKeVjHBVWAe1DizTe5K1sqjmP6X1LYYPoOIJzwVhzXMdAQpj12prMkXDRtcg==","signatures":[{"sig":"MEUCIAPct4FTdyA+cWQmC4XqRk3+ZciyaC8lpYU7uq3hoqF6AiEA0MbZPDwXKLneSdQW+pF2eVKIYyfhRzn9JUW49q4i48Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDwCtPZfCsS+o+hT39CjeRp/SBM2IGUj6bai1tr7fvIBgIgFTU0xUJ3c7QUVM7Zd/5bxGfebJ1Tnepcks1GLWvrsL0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.23.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":619682},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"4a346f8725fd4115d04c5db7167f4cc84d363d36","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --fix --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@microsoft/tsdoc":"0.17.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","@eslint/json":"^2.1.0","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"@eslint/json":{"optional":true},"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.23.3_1790724833763_0.9180533183116029","host":"s3://npm-registry-packages-npm-production"}},"2.24.0":{"name":"@exadev/eslint-config","version":"2.24.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.24.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"2c3d902887af558232da436ef946e7a3f0dbc3e9","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.24.0.tgz","fileCount":7,"integrity":"sha512-xJ0BznJPf7bQX/NihMuacsH7hn7gMS8AbVgLALN69V+KCaw+L5j9fCi8Ew6hd0f9zFg533i3renyarDeEee3mQ==","signatures":[{"sig":"MEUCIFrrsBbefv1LLzX+GoDzTuvACUIPwRSs3wXMRobZIdh3AiEApSP0TH94W0jtyNByisoBajHSm6PrAOKQWkltirv1ZSc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDr8YeN9LcHcj4XPdvP6V/pmHNBesYvlkoOGz17m/qmowIgTHYh7vFN6bM6OP9Xb7yi4DVlvhyayxE6M+yrQo+mDf8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":838168},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"602b2efdc5efe777ff3eee65d31617b37fe6a0ba","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","lint:fix":"turbo run _lint:fix","_lint:fix":"eslint . --fix --cache --max-warnings 0","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@microsoft/tsdoc":"0.17.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","@eslint/json":"^2.1.0","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"@eslint/json":{"optional":true},"eslint-plugin-react":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.24.0_1790732773214_0.9692386091324439","host":"s3://npm-registry-packages-npm-production"}},"2.25.0":{"name":"@exadev/eslint-config","version":"2.25.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.25.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"162f2bd0c49ae32bedcf66f9a68e367f0ef21c1e","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.25.0.tgz","fileCount":7,"integrity":"sha512-k0TDvDOJk72sdRWbbibJEr0qAw6aKDE19G31eIB0Iv7yMc5wgv0K8HPTmYG8udXqpNOLCs5Ya8+M8vfYe8CsQw==","signatures":[{"sig":"MEUCID14KDxYnG6VoawernPe4M3Gh6DBxHMY3CQzKJ1C0+zYAiEA77wg9q8Rsv438P0RSGyhcgVh9gwjA1lyCT6h7pkR12A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBpOkLLGrBDw6WlDEhq4/kVa6HENK+mgJREunzsQudrqAiAQ0gvElofnNNMR2l4IixLFdO4rhVKl/2veiroWGoAWSQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":911125},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"f758845472468d1ee3d914c1bb780691e7f2853e","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","lint:fix":"turbo run _lint:fix","_lint:fix":"eslint . --fix --cache --max-warnings 0","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@microsoft/tsdoc":"0.17.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","eslint-plugin-turbo":"2.11.4","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","@eslint/json":"^2.1.0","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-turbo":"^2.3.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"@eslint/json":{"optional":true},"eslint-plugin-react":{"optional":true},"eslint-plugin-turbo":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.25.0_1790735281924_0.22174540369295337","host":"s3://npm-registry-packages-npm-production"}},"2.26.0":{"name":"@exadev/eslint-config","version":"2.26.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.26.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"5b64917097cdb66b203d1bbb4de12c8430754d79","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.26.0.tgz","fileCount":7,"integrity":"sha512-8ZECWA539MAQKabidnOmMlBPadRQhiQrifywDEEAYyT4NmbFu4aU8W7ma8BHbBwwbx+AlvJ16EakC+lZTBpXFw==","signatures":[{"sig":"MEYCIQDmIGGZlw5MCsKji89Tv5rTAM203j/HU3DypQgUtBQU8QIhAK3aWlKPnuujgyqYUkO8GxwunZdN259P/38bZ4jd7E4K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCFtpYK7M3WvYyC1XnbyGi1zsEJOyYDOFU8AKGbkWLNSwIhANuy+B69vAKQSTVrULg+QdDbihvEPS7ex1MR+IUdL8jH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.26.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1001767},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"d51a3aa868eee95842f49888dfc706e5ab3aaea9","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","lint:fix":"turbo run _lint:fix","_lint:fix":"eslint . --fix --cache --max-warnings 0","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@microsoft/tsdoc":"0.17.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","eslint-plugin-turbo":"2.11.4","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","@eslint/json":"^2.1.0","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-turbo":"^2.3.1","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"@eslint/json":{"optional":true},"eslint-plugin-react":{"optional":true},"eslint-plugin-turbo":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.26.0_1790739843413_0.3470725703115487","host":"s3://npm-registry-packages-npm-production"}},"2.27.0":{"name":"@exadev/eslint-config","version":"2.27.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.27.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"77ba0eb99a5cb79fe14739b55c1259dd04af2389","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.27.0.tgz","fileCount":7,"integrity":"sha512-T3sYdSYJIqH7PW/H/ULJz8zNnp2ITMokh8Dye0H+HdiJKoGBWBQlkK5fj3FLJcygX7RgQU4CGTqTMxC1as5Tww==","signatures":[{"sig":"MEQCIDiFAeLsZXHL8QkaXidpvFRFoBIyefNWtQlg3+TWzqKoAiB0BCEwnfGnedFwHvPaS5gsfENoXfLa+mAK5ZLDJFbD6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCnuiEyN7EA9KIqTDT4QpFTQTwgTLpRsq0LTs5EbiL/IgIhANByq4ysqAs9tmjUpADUIIxAK+EYGspQkrOmnRGdrhn2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.27.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1131577},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"5aa1bdc2341ac5334886d364aeca2519b61310d7","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","lint:fix":"turbo run _lint:fix","_lint:fix":"eslint . --fix --cache --max-warnings 0","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.1.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@microsoft/tsdoc":"0.17.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","eslint-plugin-turbo":"2.11.4","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@vitest/eslint-plugin":"^1.6.27","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","@eslint/json":"^2.1.0","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-turbo":"^2.3.1","@vitest/eslint-plugin":"^1.6.27","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"@eslint/json":{"optional":true},"eslint-plugin-react":{"optional":true},"eslint-plugin-turbo":{"optional":true},"@vitest/eslint-plugin":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.27.0_1790744953198_0.6831082359329104","host":"s3://npm-registry-packages-npm-production"}},"2.28.0":{"name":"@exadev/eslint-config","version":"2.28.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.28.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"eb93b268e625470ea4a675aa45d924a470127f16","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.28.0.tgz","fileCount":7,"integrity":"sha512-qe1eapH0e1lc5O+iDJXb6cZVDIMXQta6tEf5G/coRelKxVwYKo549ZIJgFn5xxL4DMx8L8NG5XPN0GcjtPepEw==","signatures":[{"sig":"MEUCIDJl2gAqiiuz+UKXSISsZUUUho9XfZxMLwQ0Rt7gzMXXAiEAw/farVx4WYkhNm+teK/fviSG7t+c8oFgtIMWPRL0z9g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD2vBLBePYQ1XVC7RiMLILPF9C4aRsvHpbpsx/tzyS/XAIgA0UkUCAOwpcBsCCuwWadzEISFTmH/fcjlV+4P+SapZ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.28.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1247212},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"d830f166f7133e338553282c20ef68199af69bb1","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","lint:fix":"turbo run _lint:fix","_lint:fix":"eslint . --fix --cache --max-warnings 0","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.2.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@microsoft/tsdoc":"0.17.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","@eslint/markdown":"8.0.3","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","eslint-plugin-turbo":"2.11.4","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@vitest/eslint-plugin":"^1.6.27","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","@eslint/json":"^2.1.0","@eslint/markdown":"^8.0.3","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-turbo":"^2.3.1","@vitest/eslint-plugin":"^1.6.27","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"@eslint/json":{"optional":true},"@eslint/markdown":{"optional":true},"eslint-plugin-react":{"optional":true},"eslint-plugin-turbo":{"optional":true},"@vitest/eslint-plugin":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.28.0_1790797983851_0.0300124921871896","host":"s3://npm-registry-packages-npm-production"}},"2.29.0":{"name":"@exadev/eslint-config","version":"2.29.0","keywords":["eslint","eslint-plugin","eslintplugin"],"license":"MIT","_id":"@exadev/eslint-config@2.29.0","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"homepage":"https://github.com/ExaDev/eslint-config#readme","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"83df9dd9ca4bc62028dda2fe370ff67b650a1459","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.29.0.tgz","fileCount":7,"integrity":"sha512-ZLxoFHz4lUCp6jYjXc8OlgLvbRnqzm5NTvCyixu6SfO7i8AznCydwrGct12nuyVnPCFyqVRLZKeTCOtMV4/Vuw==","signatures":[{"sig":"MEUCICAwlqzwwHbYGIB2B3zMoVlkNSuXB1yCGs0W+E8MJPB2AiEAinzoxUoUZZEmPJ+lB+AQwYJEUSxRuGVBcs30viqFA1o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDohzEHVO4g1PJJTfZemAHGgiX4np97BdNc5iaHxE8wdwIgN6JT294D4ol49ZwCDzXzO2MgSf3QNXTcOnIbRdjY0xI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.29.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1274590},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"73a54109e1db1657dcd1848cc727b98d5adc5ac3","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","lint:fix":"turbo run _lint:fix","_lint:fix":"eslint . --fix --cache --max-warnings 0","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.2.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@microsoft/tsdoc":"0.17.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","@eslint/markdown":"8.0.3","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","eslint-plugin-turbo":"2.11.4","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@vitest/eslint-plugin":"^1.6.27","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","@eslint/json":"^2.1.0","@eslint/markdown":"^8.0.3","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-turbo":"^2.3.1","@vitest/eslint-plugin":"^1.6.27","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"@eslint/json":{"optional":true},"@eslint/markdown":{"optional":true},"eslint-plugin-react":{"optional":true},"eslint-plugin-turbo":{"optional":true},"@vitest/eslint-plugin":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.29.0_1790838747603_0.6693381784087649","host":"s3://npm-registry-packages-npm-production"}},"2.30.0":{"_id":"@exadev/eslint-config@2.30.0","bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"dist":{"shasum":"4e44e0c96b1e5546bc7efa4ecceba991365b5d41","tarball":"https://registry.npmjs.org/@exadev/eslint-config/-/eslint-config-2.30.0.tgz","fileCount":7,"integrity":"sha512-EfOTkavqDyk5xJWE4849p+Pz9XHcWFZTI201ZIOC940mUHVDHRuW/gHgdPT7ZTLdNHO7VpVwe9vWH6cE3NCMHw==","signatures":[{"sig":"MEYCIQDHIVWJz1F/LacsuyhJ1m1c8sOkshXWFH95sLQtBNIWyAIhAONsC00j7fX5zc7/+dpwHwLNLxIfE0l7rmXrzwfqinld","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDXfUKmhCNWXpzlaaeLaskOvejatAhInlAh4l7n8p1y6gIgFnXyiagWOh6xLvXKYQ/9ko/B+Gqw7f32NYaPAFXzIQU="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@exadev%2feslint-config@2.30.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1391570},"main":"./dist/index.cjs","name":"@exadev/eslint-config","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ff9726a3414fa5699ef4a7819fde79667875d93d","license":"MIT","scripts":{"lint":"turbo run _lint","test":"turbo run _test","_lint":"eslint . --cache --max-warnings 0","_test":"vitest run","build":"turbo run _build","_build":"tsdown","prepare":"husky","release":"semantic-release","lint:fix":"turbo run _lint:fix","_lint:fix":"eslint . --fix --cache --max-warnings 0","typecheck":"turbo run _typecheck","_typecheck":"tsc -p tsconfig.json","test:mutation":"turbo run _test:mutation","_test:mutation":"stryker run stryker.config.ts","prepublishOnly":"pnpm run lint && pnpm run typecheck && pnpm run test && tsdown && publint && attw --pack"},"version":"2.30.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3cf56efa-49ba-4430-8ee4-92d3fee1f46c"}},"homepage":"https://github.com/ExaDev/eslint-config#readme","keywords":["eslint","eslint-plugin","eslintplugin"],"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"_npmVersion":"12.2.0","description":"Shared custom ESLint rules and plugin for ExaDev projects","directories":{},"maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"@eslint/js":"^10.0.1","ts-api-utils":"^2.5.0","@microsoft/tsdoc":"0.17.0","eslint-plugin-jsdoc":"64.3.6","eslint-plugin-tsdoc":"^0.5.2","@stylistic/eslint-plugin":"5.10.0","@typescript-eslint/utils":"8.67.0","eslint-plugin-json-canonical":"2.1.0","@typescript-eslint/typescript-estree":"8.67.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1+sha512.2e81e399d73fe8390dab25e06aa788ab7a5908248d2f5a370f82b481147a6a7a367bf8048f9a6fdb6460f21a66f0542dedb8b94ca2c8723596741920b1656d4c","devDependencies":{"husky":"^9.1.7","turbo":"^2.10.8","eslint":"^10.8.0","tsdown":"^0.22.13","vitest":"^4.1.10","publint":"^0.3.21","typescript":"^6.0.3","@types/node":"^24.9.2","lint-staged":"^17.2.0","@eslint/json":"2.1.0","@commitlint/cli":"^21.2.1","@eslint/markdown":"8.0.3","semantic-release":"^25.0.8","typescript-eslint":"^8.67.0","@vitest/coverage-v8":"^4.1.10","eslint-plugin-react":"^7.37.5","eslint-plugin-turbo":"2.11.4","@humanwhocodes/momoa":"^3.3.13","@stryker-mutator/api":"10.0.0","@arethetypeswrong/cli":"^0.18.5","@semantic-release/git":"^11.0.1","@stryker-mutator/core":"10.0.0","@vitest/eslint-plugin":"^1.6.27","@eslint/config-helpers":"0.7.0","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1","@semantic-release/changelog":"^7.0.0","@stryker-mutator/vitest-runner":"10.0.0","@typescript-eslint/rule-tester":"^8.67.0","@commitlint/config-conventional":"^21.2.0","@stryker-mutator/typescript-checker":"10.0.0"},"peerDependencies":{"eslint":">=10.0.0","typescript":">=4.8.4","@eslint/json":"^2.1.0","@eslint/markdown":"^8.0.3","typescript-eslint":">=8.0.0","eslint-plugin-react":"^7.37.5","eslint-plugin-turbo":"^2.3.1","@vitest/eslint-plugin":"^1.6.27","eslint-plugin-jsx-a11y":"^6.10.2","@next/eslint-plugin-next":"^16.3.2","eslint-plugin-react-hooks":"^7.1.1"},"peerDependenciesMeta":{"@eslint/json":{"optional":true},"@eslint/markdown":{"optional":true},"eslint-plugin-react":{"optional":true},"eslint-plugin-turbo":{"optional":true},"@vitest/eslint-plugin":{"optional":true},"eslint-plugin-jsx-a11y":{"optional":true},"@next/eslint-plugin-next":{"optional":true},"eslint-plugin-react-hooks":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-config_2.30.0_1790848264104_0.3520054420784726"}}},"time":{"created":"2026-08-07T05:41:43.068Z","modified":"2026-10-01T09:51:04.719Z","0.0.0":"2026-08-07T05:41:43.400Z","1.0.0":"2026-08-07T06:03:01.572Z","1.0.1":"2026-08-07T06:06:34.605Z","1.1.0":"2026-08-07T06:13:41.738Z","1.1.1":"2026-08-07T06:22:33.632Z","1.1.2":"2026-08-07T06:28:05.313Z","1.2.0":"2026-08-07T06:48:52.811Z","1.2.1":"2026-08-07T07:02:39.627Z","1.2.2":"2026-08-07T07:22:05.070Z","1.2.3":"2026-08-07T07:41:59.645Z","1.3.0":"2026-08-07T07:50:34.747Z","1.4.0":"2026-08-07T08:05:22.551Z","1.4.1":"2026-08-07T08:13:25.389Z","2.0.0":"2026-08-07T09:15:15.456Z","2.1.0":"2026-08-07T11:28:50.218Z","2.1.1":"2026-08-08T09:25:44.033Z","2.1.2":"2026-08-24T04:07:32.251Z","2.2.0":"2026-08-26T07:40:13.986Z","2.3.0":"2026-08-26T08:21:39.512Z","2.4.0":"2026-08-26T09:36:03.284Z","2.5.0":"2026-08-26T10:49:44.785Z","2.6.0":"2026-08-26T11:58:14.866Z","2.6.1":"2026-08-26T12:14:52.497Z","2.6.2":"2026-08-26T13:20:55.678Z","2.7.0":"2026-08-26T14:01:40.129Z","2.8.0":"2026-08-26T21:43:12.313Z","2.9.0":"2026-08-26T22:03:28.522Z","2.9.1":"2026-08-26T22:15:37.381Z","2.10.0":"2026-08-27T07:06:33.595Z","2.10.1":"2026-08-31T05:58:50.220Z","2.10.2":"2026-08-31T07:38:51.029Z","2.10.3":"2026-09-03T04:29:34.771Z","2.10.4":"2026-09-03T04:46:56.931Z","2.10.5":"2026-09-06T10:03:44.015Z","2.10.6":"2026-09-06T10:19:16.891Z","2.11.0":"2026-09-12T12:48:02.480Z","2.12.0":"2026-09-14T03:48:31.626Z","2.12.1":"2026-09-14T07:45:58.873Z","2.12.2":"2026-09-14T08:00:49.074Z","2.12.3":"2026-09-14T15:06:48.333Z","2.13.0":"2026-09-15T04:13:33.850Z","2.14.0":"2026-09-15T08:39:43.017Z","2.15.0":"2026-09-15T09:08:25.198Z","2.16.0":"2026-09-15T09:47:52.424Z","2.16.1":"2026-09-15T10:31:52.355Z","2.17.0":"2026-09-15T11:00:28.802Z","2.17.1":"2026-09-15T11:26:03.771Z","2.17.2":"2026-09-15T19:03:38.529Z","2.18.0":"2026-09-15T19:47:25.306Z","2.18.1":"2026-09-17T14:15:46.329Z","2.19.0":"2026-09-18T01:39:39.763Z","2.19.1":"2026-09-18T08:48:53.084Z","2.19.2":"2026-09-18T09:07:41.592Z","2.19.3":"2026-09-18T09:12:41.514Z","2.19.4":"2026-09-18T09:38:23.200Z","2.20.0":"2026-09-19T09:59:19.658Z","2.20.1":"2026-09-19T10:09:30.745Z","2.20.2":"2026-09-25T14:06:52.380Z","2.21.0":"2026-09-26T17:00:43.109Z","2.21.1":"2026-09-26T18:29:03.744Z","2.22.0":"2026-09-26T22:55:56.918Z","2.22.1":"2026-09-27T04:16:46.737Z","2.22.2":"2026-09-27T13:45:37.885Z","2.23.0":"2026-09-28T11:42:21.185Z","2.23.1":"2026-09-29T18:20:26.858Z","2.23.2":"2026-09-29T20:47:28.509Z","2.23.3":"2026-09-29T23:33:53.850Z","2.24.0":"2026-09-30T01:46:13.304Z","2.25.0":"2026-09-30T02:28:02.026Z","2.26.0":"2026-09-30T03:44:03.558Z","2.27.0":"2026-09-30T05:09:13.285Z","2.28.0":"2026-09-30T19:53:03.952Z","2.29.0":"2026-10-01T07:12:27.725Z","2.30.0":"2026-10-01T09:51:04.235Z"},"bugs":{"url":"https://github.com/ExaDev/eslint-config/issues"},"license":"MIT","homepage":"https://github.com/ExaDev/eslint-config#readme","keywords":["eslint","eslint-plugin","eslintplugin"],"repository":{"url":"git+https://github.com/ExaDev/eslint-config.git","type":"git"},"description":"Shared custom ESLint rules and plugin for ExaDev projects","maintainers":[{"name":"jmearman","email":"joseph@mearman.co.uk"}],"readme":"# @exadev/eslint-config\n\n[![GitHub](https://img.shields.io/badge/GitHub-181717?logo=github&logoColor=white)](https://github.com/ExaDev/eslint-config) [![npm](https://img.shields.io/badge/npm-CB3837?logo=npm&logoColor=white)](https://www.npmjs.com/package/@exadev/eslint-config) [![Release](https://img.shields.io/github/v/release/ExaDev/eslint-config)](https://github.com/ExaDev/eslint-config/releases/latest) [![CI](https://img.shields.io/github/actions/workflow/status/ExaDev/eslint-config/ci.yml?branch=main)](https://github.com/ExaDev/eslint-config/actions)\n\n> A real ESLint plugin (not a shareable config) exposing custom rules shared across ExaDev projects. Also published under the unscoped alias `exadev-eslint-config`.\n\n**Contents:** [Why](#why) · [Getting started](#getting-started) · [The lighter option](#the-lighter-option-the-plugin-named-export) · [Optional features](#optional-features) · [Rules](#rules) · [Barrel policy](#barrel-policy) · [Workspace architecture](#workspace-architecture) · [Turbo](#turbo) · [Development](#development) · [License](#license)\n\n## Why\n\nMultiple ExaDev repos carried identical copies of a handful of custom ESLint rules (barrel/index discipline, re-export placement, pointless-alias detection). This package is the single source of truth for those rules. Only the *rules* are centralized — not a consumer's whole `eslint.config.ts`, since file-scoping, tsconfig wiring, and runtime-isomorphism import bans are genuinely project-specific. Each consumer keeps its own `eslint.config.ts`, importing rule implementations from here.\n\n## Getting started\n\n```sh\npnpm add -D @exadev/eslint-config typescript-eslint eslint\n```\n\nRequires [`eslint`](https://eslint.org) `>=10.0.0` and [`typescript-eslint`](https://typescript-eslint.io/packages/typescript-eslint) `>=8.0.0` as peer dependencies. Importing anything from this package resolves `typescript-eslint`, since the default export and the `plugin` named export share one root module — see [Architecture](#architecture).\n\n```ts\n// eslint.config.ts\nimport { defineConfig } from 'eslint/config';\nimport exadev from '@exadev/eslint-config';\n\nexport default defineConfig(\n  {\n    languageOptions: {\n      parserOptions: { project: './tsconfig.json', tsconfigRootDir: import.meta.dirname },\n    },\n  },\n  ...exadev,\n  // ...your own config on top...\n);\n```\n\n**Why [`defineConfig()`](https://eslint.org/docs/latest/use/configure/configuration-files#defineconfig-utility) rather than `tseslint.config()` here:** [`tseslint.config()`](https://typescript-eslint.io/packages/typescript-eslint/#config-deprecated) is now `@deprecated` upstream in favour of ESLint core's own `defineConfig()`, so this package's default export is typed against ESLint core's own config type specifically so it satisfies `defineConfig()` directly. If you haven't migrated off `tseslint.config()` yet, it still works exactly the same — this package's exported config array is typed to satisfy either wrapper, and that compatibility is itself covered by a real regression test (`src/consumer-compatibility.ts`) — but new consumers should reach for `defineConfig()`.\n\n**Remove your own `tseslint.configs.recommended`/`recommendedTypeChecked`/`strictTypeChecked`/`stylisticTypeChecked` spreads.** The default export already includes [`strictTypeChecked`](https://typescript-eslint.io/users/configs/#strict-type-checked) (which subsumes both plain [`recommended`](https://typescript-eslint.io/users/configs/#recommended) and [`recommendedTypeChecked`](https://typescript-eslint.io/users/configs/#recommended-type-checked)) plus [`stylisticTypeChecked`](https://typescript-eslint.io/users/configs/#stylistic-type-checked), and registers the `@typescript-eslint` plugin/parser itself — [flat config](https://eslint.org/docs/latest/use/configure/configuration-files) rejects two different plugin object instances registered under the same namespace. You still supply your own `languageOptions.parserOptions.project`/`projectService` pointing at your tsconfig(s).\n\n**Remove your own `plugins: { '@stylistic': ... }` registration too.** The default export bundles [`@stylistic/eslint-plugin`](https://eslint.style) (see [Stylistic comment, class-member and JSX rules](#stylistic-comment-class-member-and-jsx-rules)) and registers it under the `@stylistic` namespace itself, so a consumer block registering its own copy of the plugin (a different version resolved from elsewhere in the lockfile, or a duplicated install) makes ESLint throw `Config: Key \"plugins\": Cannot redefine plugin \"@stylistic\".` at config load, the identical flat-config restriction as the typescript-eslint case above. Registering the very same instance is harmless, but the robust migration is to drop the registration entirely: configure any further `@stylistic/*` rules directly in your own `rules` block, since this package's block already registers the plugin for every JS/TS and JSX file.\n\n### What the default export includes\n\n**typescript-eslint presets:**\n\n- [`strictTypeChecked`](https://typescript-eslint.io/users/configs/#strict-type-checked) + [`stylisticTypeChecked`](https://typescript-eslint.io/users/configs/#stylistic-type-checked) — already covers [`no-deprecated`](https://typescript-eslint.io/rules/no-deprecated/), [`no-misused-spread`](https://typescript-eslint.io/rules/no-misused-spread/), [`no-mixed-enums`](https://typescript-eslint.io/rules/no-mixed-enums/), [`no-unnecessary-condition`](https://typescript-eslint.io/rules/no-unnecessary-condition/), [`use-unknown-in-catch-callback-variable`](https://typescript-eslint.io/rules/use-unknown-in-catch-callback-variable/), [`return-await`](https://typescript-eslint.io/rules/return-await/), [`related-getter-setter-pairs`](https://typescript-eslint.io/rules/related-getter-setter-pairs/), [`no-unnecessary-type-parameters`](https://typescript-eslint.io/rules/no-unnecessary-type-parameters/), and more (not re-listed individually below).\n\n**This package's own rules** (full details in [Rules](#rules)):\n\n- `exadev/barrel-policy` at its auto-detecting default — see [Barrel policy](#barrel-policy)\n- `exadev/no-object-assign`\n- `exadev/no-mutable-union-array-param`\n- `exadev/no-array-isarray-mutation`\n- `exadev/no-enum-number-widening`\n- `exadev/no-enum-reverse-lookup-widening`\n- `exadev/no-map-instanceof-mutation`\n- `exadev/no-set-instanceof-mutation`\n- `exadev/prefer-readonly-array-param`\n- `exadev/prefer-readonly-object-param`\n- `exadev/prefer-numeric-sort-compare`\n- `exadev/prefer-options-object-param`\n- `exadev/prefer-doc-comment`\n- `exadev/no-pointless-reassignment`\n- `exadev/test-file-kind`\n\n**Individual rule tuning**, each with its own reasoning:\n\n- **`linterOptions.noInlineConfig`** — no `eslint-disable` comments of any kind.\n- **[`consistent-type-assertions`](https://typescript-eslint.io/rules/consistent-type-assertions/)** — bans all type assertions (relaxed in test files, see below).\n- **[`consistent-type-imports`](https://typescript-eslint.io/rules/consistent-type-imports/)** and **[`consistent-type-exports`](https://typescript-eslint.io/rules/consistent-type-exports/)** — plain presence, no extra config.\n- **[`consistent-return`](https://typescript-eslint.io/rules/consistent-return/)** — a function can't implicitly return `undefined` on one path and a real value on another.\n  - *Why:* that split is usually a bug, not a deliberate design.\n- **[`no-non-null-assertion`](https://typescript-eslint.io/rules/no-non-null-assertion/)** — bans the `!` operator.\n  - *Why:* it's the same manual-override escape hatch as a type assertion, under a different spelling.\n- **[`no-redeclare`](https://typescript-eslint.io/rules/no-redeclare/)** and **[`no-shadow`](https://typescript-eslint.io/rules/no-shadow/)** — plain presence, no extra config.\n- **[`no-use-before-define`](https://typescript-eslint.io/rules/no-use-before-define/)** set to `{ functions: false }` — everything except function declarations must be defined before use.\n  - *Why:* `let`/`const`/`class`/enum bindings have a genuine temporal-dead-zone crash risk, but function declarations are fully hoisted and safe to call before their point of textual declaration — this codebase's own rule files consistently define helper functions after the logic that calls them.\n- **[`ban-ts-comment`](https://typescript-eslint.io/rules/ban-ts-comment/)** — bans `@ts-expect-error` outright (relaxed in test files, see below).\n- **[`method-signature-style`](https://typescript-eslint.io/rules/method-signature-style/)** set to `'property'`.\n  - *Why:* method-shorthand signatures are checked bivariantly under [`strictFunctionTypes`](https://www.typescriptlang.org/tsconfig/#strictFunctionTypes), which is unsound.\n- **[`prefer-readonly`](https://typescript-eslint.io/rules/prefer-readonly/)**, **[`promise-function-async`](https://typescript-eslint.io/rules/promise-function-async/)**, **[`require-array-sort-compare`](https://typescript-eslint.io/rules/require-array-sort-compare/)** — plain presence, no extra config.\n- **[`strict-void-return`](https://typescript-eslint.io/rules/strict-void-return/)** — bans passing a value-returning function where a void-returning one is expected (e.g. `arr.forEach(x => otherArray.push(x))`).\n  - *Why:* not yet in any typescript-eslint preset; this typechecks today only because of TS's own void-return contravariance leniency.\n- **[`strict-boolean-expressions`](https://typescript-eslint.io/rules/strict-boolean-expressions/)** at the rule's own bare defaults.\n  - *Why:* an unambiguous non-nullable truthy check stays allowed; an ambiguous nullable check does not.\n- **[`no-magic-numbers`](https://typescript-eslint.io/rules/no-magic-numbers/)** — tuned to exempt array indexes, enum members, readonly class properties, default parameter values, numeric literal types (e.g. `type Indent = 2 | 4`), and the handful of universally-idiomatic bare numbers (`-1`, `0`, `1`, `2`).\n- **[`max-lines`](https://eslint.org/docs/latest/rules/max-lines)** set to `{ max: 800, skipBlankLines: true, skipComments: true }`.\n  - *Why:* counting only real code means a file isn't pushed over the limit by whitespace or its own WHY-explanation comments.\n- **[`max-params`](https://eslint.org/docs/latest/rules/max-params)** set to `{ max: 4 }`, one above the rule's own default of `3`. Needs no type information — registered in both `plugin.configs.recommended` and the default (type-checked) export, like `exadev/prefer-readonly-array-param` above.\n  - *Why:* a deliberately loose backstop against a genuinely excessive number of REQUIRED parameters, distinct from `exadev/prefer-options-object-param` above, which already offers a real fix for the more common shape (a run of 2+ trailing OPTIONAL parameters) this rule structurally cannot see until the total count crosses its own threshold.\n- **[`no-warning-comments`](https://eslint.org/docs/latest/rules/no-warning-comments)** — bans any comment containing `Stryker disable`.\n  - *Why:* that's Stryker's own mutation-testing suppression directive, invisible to `noInlineConfig` above since it isn't an eslint-disable comment.\n- **[`explicit-module-boundary-types`](https://typescript-eslint.io/rules/explicit-module-boundary-types/)**: an exported function or class member writes out its parameter and return types.\n  - *Why:* an inferred return type changes silently when the body does; `isolatedDeclarations` is the compiler-side alternative and is a tsconfig matter.\n- **[`switch-exhaustiveness-check`](https://typescript-eslint.io/rules/switch-exhaustiveness-check/)** set to `{ considerDefaultExhaustiveForUnions: false, requireDefaultForNonUnion: true }`.\n  - *Why:* a `default` branch cannot stand in for handling a newly added union member, and a switch over a non-union needs a `default` because the checker cannot prove its cases complete.\n- **Core robustness rules**: `eqeqeq`, `no-implicit-coercion`, `no-param-reassign`, `no-await-in-loop`, `require-atomic-updates`, `default-case-last`, `no-return-assign` and `max-depth`. See [Robustness rules](#robustness-rules).\n\n**Test files** (`**/*.{test,spec}.{ts,tsx,mts,cts,js,jsx,mjs,cjs}`) get two narrow relaxations of this package's own additions, and only these two:\n\n- **`@ts-expect-error`** reverts to `allow-with-description`.\n  - *Why:* a compile-time-only assertion of a type failure is a legitimate test pattern; `@ts-ignore`/`@ts-nocheck` stay banned since `@ts-expect-error` is strictly better.\n- **[`consistent-type-assertions`](https://typescript-eslint.io/rules/consistent-type-assertions/)** relaxes to `assertionStyle: 'as'`.\n  - *Why:* the legacy `<Type>value` form stays banned everywhere.\n\nNothing else inherited from the presets is relaxed.\n\n### Robustness rules\n\nCore ESLint rules that nothing in the typescript-eslint presets enables. All need no type information, so `plugin.configs.recommended` carries them as well, with the same settings except `no-implicit-coercion` (below).\n\n| Rule | Setting | Why |\n| --- | --- | --- |\n| [`eqeqeq`](https://eslint.org/docs/latest/rules/eqeqeq) | `always` | `== null` hides which of `null` and `undefined` the code means, so there is no `null` carve-out. |\n| [`no-implicit-coercion`](https://eslint.org/docs/latest/rules/no-implicit-coercion) | `{ boolean: false }` in the default export, defaults in `plugin.configs.recommended` | `!!value` is allowed where `strict-boolean-expressions` backs it, because that rule already rejects `!` on an operand whose truthiness is ambiguous (a nullable string or number). `plugin.configs.recommended` registers no typescript-eslint rules, so it keeps banning `!!`. `+value`, `'' + value` and similar stay banned in both. |\n| [`no-param-reassign`](https://eslint.org/docs/latest/rules/no-param-reassign) | `{ props: true }` | A parameter is the caller's value; assigning to it or to one of its properties is a hidden side effect. |\n| [`no-await-in-loop`](https://eslint.org/docs/latest/rules/no-await-in-loop) | on | Iterations that could run together run one after another. `for await` is allowed. |\n| [`require-atomic-updates`](https://eslint.org/docs/latest/rules/require-atomic-updates) | on | `total += await p` reads `total` before the `await` and writes it after, losing any update made in between. |\n| [`default-case-last`](https://eslint.org/docs/latest/rules/default-case-last) | on | A `default` that is not last hides the cases written after it. |\n| [`no-return-assign`](https://eslint.org/docs/latest/rules/no-return-assign) | `always` | Even a parenthesised assignment cannot be the returned value. |\n| [`max-depth`](https://eslint.org/docs/latest/rules/max-depth) | `{ max: 4 }` | The rule's own default, written out so a change to it cannot loosen the limit. |\n\nA loop that is sequential by design (migrations that must run in order, a rate-limited API) is exempted by a `files`-scoped override placed after the shared config, never by an inline disable comment, since `noInlineConfig` is on:\n\n```ts\nexport default defineConfig(...exadevConfig(), {\n  files: ['src/migrations/**/*.ts'],\n  rules: { 'no-await-in-loop': 'off' },\n});\n```\n\n## The lighter option: the `plugin` named export\n\nFor a project that wants only this package's own rules without the full type-checked bundle, import the named `plugin` export and wire rules individually:\n\n```ts\n// eslint.config.ts\nimport { defineConfig } from 'eslint/config';\nimport { plugin } from '@exadev/eslint-config';\n\nexport default defineConfig(\n  // ...your own config...\n  {\n    files: ['src/**/*.ts'],\n    ignores: ['src/index.ts'],\n    plugins: { exadev: plugin },\n    rules: {\n      'exadev/no-non-barrel-reexport': 'error',\n    },\n  },\n);\n```\n\nOr use one of `plugin`'s two bundled configs to enable a whole set at once:\n\n```ts\nimport { plugin } from '@exadev/eslint-config';\nimport { defineConfig } from 'eslint/config';\n\nexport default defineConfig([\n  {\n    files: ['**/*.ts'],\n    plugins: { exadev: plugin },\n    extends: ['exadev/recommended'], // this plugin's own non-type-aware rules, the core robustness rules, plus linterOptions.noInlineConfig — no type-checked rules at all\n    // or: extends: ['exadev/barrel'], // just the barrel-discipline trio (no-non-barrel-index, no-non-barrel-reexport, no-side-effects-in-index)\n  },\n]);\n```\n\n[`tseslint.config()`](https://typescript-eslint.io/packages/typescript-eslint#config) does **not** accept string `extends` (only [`defineConfig()`](https://eslint.org/docs/latest/use/configure/configuration-files#defineconfig-utility) does); pass the config value directly instead:\n\n```ts\nimport { plugin } from '@exadev/eslint-config';\nimport tseslint from 'typescript-eslint';\n\nexport default tseslint.config(\n  // ...your own config...\n  {\n    files: ['**/*.ts'],\n    plugins: { exadev: plugin },\n    extends: [plugin.configs.recommended], // or plugin.configs.barrel\n  },\n);\n```\n\n`plugin.configs.recommended`/`plugin.configs.barrel` carry no `files`/`ignores` and are safe unscoped — `no-side-effects-in-index` and `no-non-barrel-reexport` each check `context.filename` themselves (self-scoping). For a barrel not at `src/index.ts`, or a project-specific exception, layer an override on top (e.g. `{ files: ['lib/other.ts'], rules: { 'exadev/no-non-barrel-reexport': 'off' } }`) rather than wiring all four rules individually.\n\n## Optional features\n\n| Feature | Default | Control it with |\n| --- | --- | --- |\n| [React & Next.js linting](#optional-react-and-nextjs-support) | Auto-detected: on if the relevant peer package is installed | `exadevConfig({ react, nextjs })` |\n| [Gitignore-derived ignores](#gitignore-derived-ignores) | On if the project has a `.gitignore` | `exadevConfig({ gitignore })` |\n| [RFC 8785 canonical JSON formatting](#rfc-8785-canonical-json-formatting) | Always on | Not optional |\n| [package.json key ordering](#optional-packagejson-key-ordering) | On, unless the project already has a syncpack config | `exadevConfig({ packageJsonKeyOrder })` |\n| [Workspace architecture rules](#workspace-architecture) | Off unless given (no sensible default for `groups`) | `exadevConfig({ workspaceArchitecture })` / `workspaceArchitectureConfig(options)` |\n| [Turbo rules](#turbo) | Off unless given (only a repository can say it uses turbo) | `exadevConfig({ turbo })` / `turboConfig(options)` |\n| [Import policy](#import-policy) | Off unless given (only a repository can say which imports it forbids) | `exadevConfig({ importPolicies })` / `importPolicyConfig(policies)` |\n| [Pure modules](#pure-modules) | Off unless given (only a repository can say which modules are a functional core) | `exadevConfig({ pureModules })` / `pureModulesConfig(options)` |\n| [Guard and conformance test hygiene](#guard-and-conformance-test-hygiene) | Off unless given (only a repository can say which tests are guards); needs the optional peer `@vitest/eslint-plugin` | `exadevConfig({ testHygiene })` / `testHygieneConfig(options)` |\n| [Turbo environment variable checking](#environment-variables-read-in-source) | Auto-detected: on if `eslint-plugin-turbo` is installed | `exadevConfig({ turboEnv })` |\n| [Required Markdown headings](#required-markdown-headings) | Off unless given (only a repository can say which documents need which headings); needs the optional peer `@eslint/markdown` | `exadevConfig({ markdownHeadings })` / `markdownHeadingsConfig(options)` |\n\nEvery tri-state option above (`true`/`false`/`undefined`) is passed through the named `exadevConfig(options, ...userConfigs)` factory export:\n\n```ts\n// eslint.config.ts\nimport { defineConfig } from 'eslint/config';\nimport { exadevConfig } from '@exadev/eslint-config';\n\nexport default defineConfig(\n  {\n    languageOptions: {\n      parserOptions: { project: './tsconfig.json', tsconfigRootDir: import.meta.dirname },\n    },\n  },\n  ...exadevConfig({ react: true, nextjs: false }),\n  // ...your own config...\n);\n```\n\nTrailing arguments are arbitrary flat-config objects, appended in order after everything else — `exadevConfig({}, { rules: { 'no-console': 'warn' } })` is equivalent to spreading the default export plus one more config object. `import exadev from '@exadev/eslint-config'` (the default export) is just `exadevConfig()` called with no arguments.\n\n### Optional React and Next.js support\n\nReact/hooks/a11y and Next.js rule blocks fold in automatically, with no separate import or config needed, gated on two independent, always-both-required conditions:\n\n1. **The corresponding package must actually be resolvable.** [`eslint-plugin-react`](https://github.com/jsx-eslint/eslint-plugin-react), [`eslint-plugin-react-hooks`](https://github.com/facebook/react/tree/main/packages/eslint-plugin-react-hooks), [`eslint-plugin-jsx-a11y`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y), and [`@next/eslint-plugin-next`](https://github.com/vercel/next.js/tree/canary/packages/eslint-plugin-next) are all *optional* peer dependencies (`peerDependenciesMeta.<pkg>.optional: true`) — install only whichever your project actually needs:\n   ```sh\n   pnpm add -D eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-jsx-a11y   # React support\n   pnpm add -D @next/eslint-plugin-next                                               # Next.js support\n   ```\n   If none of these resolve, `@exadev/eslint-config`'s default export is byte-for-byte identical to the plain TypeScript ruleset — nothing about the base package changes.\n2. **For React specifically, the file must actually be `.jsx`/`.tsx`.** The React/hooks/a11y rule block is scoped to `files: ['**/*.jsx', '**/*.tsx']`, so even if `eslint-plugin-react` is resolvable only incidentally (e.g. hoisted as a transitive dependency of something unrelated in a monorepo, with zero real JSX anywhere in the linted project), its rules never match a file that isn't JSX. `@next/eslint-plugin-next`'s own block carries no such glob: its own presence is already an unambiguous signal (nothing installs it except a real Next.js project). The [server component boundary](#server-component-boundary) rules added beside it are scoped to the same JSX files.\n\nReact support pairs `eslint-plugin-react`'s `flat/recommended` with its own `flat/jsx-runtime` config, turning [`react/react-in-jsx-scope`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md) and [`react/jsx-uses-react`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md) back off. `flat/recommended` alone assumes the classic runtime, where every file using JSX needs `import React` in scope; the automatic JSX runtime (the default since React 17, and the only mode Next.js's own compiler supports) needs no such import. Without this pairing, a consumer on the automatic runtime would see `react/react-in-jsx-scope` fire on every JSX file.\n\n**Explicit control**, for anyone who doesn't want to rely on auto-detection:\n\n- **`plugin.configs.react`/`plugin.configs.nextjs`** — explicit tier selection, mirroring `plugin.configs.recommended`/`.barrel`. Unlike those two, selecting `.react`/`.nextjs` is itself an explicit request: it **throws** a clear, actionable error if the underlying peer isn't installed, rather than silently returning nothing.\n  ```ts\n  import { defineConfig } from 'eslint/config';\n  import { plugin } from '@exadev/eslint-config';\n\n  export default defineConfig(\n    // ...your own config...\n    {\n      files: ['**/*.tsx'],\n      plugins: { exadev: plugin },\n      extends: [plugin.configs.react], // throws if eslint-plugin-react isn't installed\n    },\n    {\n      files: ['**/*.ts', '**/*.tsx'],\n      plugins: { exadev: plugin },\n      extends: [plugin.configs.nextjs], // throws if @next/eslint-plugin-next isn't installed\n    },\n  );\n  ```\n- **`exadevConfig({ react, nextjs })`** — see the tri-state table below.\n\n| Value | React (`options.react`) | Next.js (`options.nextjs`) |\n| --- | --- | --- |\n| `true` | Force on — throws if `eslint-plugin-react` isn't resolvable | Force on — throws if `@next/eslint-plugin-next` isn't resolvable |\n| `false` | Force off — always `[]`, no resolution attempted | Force off — always `[]`, no resolution attempted |\n| `undefined` / omitted | Auto-detect (the default) | Auto-detect (the default) |\n\n**Compatibility note:** a consumer who already has `eslint-plugin-react`/`@next/eslint-plugin-next` resolvable for unrelated reasons (e.g. hoisted in a monorepo) and writes `.jsx`/`.tsx` files may see new rule activity the moment they upgrade to a version of this package that ships React/Next.js support, with zero action on their part. This is the normal, widely-accepted ESLint-ecosystem convention that adding rules to a shared/recommended config is a minor bump even though it can newly trip an existing `--max-warnings 0` gate — not a breaking change. Use the `react`/`nextjs` options above to force it off explicitly if needed.\n\n#### Server component boundary\n\nProps a server component passes to a client component must be serialisable, and two easy mistakes surface only at runtime in a production build. The Next.js preset (auto-detected, `exadevConfig({ nextjs: true })` or `plugin.configs.nextjs`) therefore adds a block for `.jsx` and `.tsx` files enabling two rules. Both apply only to a file without a top-level `\"use client\"` directive, so a client file is never reported; neither needs type information.\n\n- **`exadev/no-non-serialisable-server-prop`** reports a JSX attribute named in `names` (default `['component']`) whose value is not data. Data is a literal (not a regular expression), a template literal, object or array of data, `undefined`, a unary expression (`-x`, `!x`, `typeof x`, which always yields a primitive), or a JSX element, which React serialises. An identifier, member access, call, function, class, spread, or object member holding a function is reported, since it may be a function or component reference. Passing `component={Icon}` to a client component fails; passing a string key or `component={<Icon />}` does not.\n- **`exadev/no-external-member-jsx-tag`** reports every member tag (`<Lib.Icon>`, `<Lib.Icons.Home>`) whose root identifier is bound by an import from a non-relative source, whether a namespace, default, named or `import x = require()` binding. Whether a library attaches statics after export cannot be worked out from one file, so the rule is deliberately over-broad. A relative import is the project's own code and is not reported; an alias to project code such as `@/ui` looks like a package, so list it in `allowSources`.\n\nBoth are approximations. They report a file without the directive that is only ever imported by client code (add the directive), a server-safe `<Ctx.Provider>` from an imported context (list it in `allowTags`), and a component passed to an element that is itself a server component (list the element in `allowElements`). Options, by rule:\n\n| Rule | Option | Meaning |\n| --- | --- | --- |\n| `no-non-serialisable-server-prop` | `names` | Prop names whose value must be data. Replaces the default `['component']`. |\n| `no-non-serialisable-server-prop` | `allowElements` | JSX element names as written (`Link`, `Lib.Icon`) whose props are not checked. |\n| `no-external-member-jsx-tag` | `allowSources` | Import specifiers, in the [specifier pattern](#specifier-patterns) dialect (each also selects everything beneath it), whose member tags are not reported. |\n| `no-external-member-jsx-tag` | `allowTags` | Tags as written (`Ctx.Provider`) that are not reported. |\n\nThe preset enables both at `error` with the defaults. To tune them, add a later block that sets the rule again for the same files:\n\n```ts\n{\n  files: ['**/*.tsx'],\n  rules: {\n    'exadev/no-non-serialisable-server-prop': ['error', { names: ['component', 'icon'], allowElements: ['Link'] }],\n    'exadev/no-external-member-jsx-tag': ['error', { allowSources: ['@/ui'], allowTags: ['ThemeCtx.Provider'] }],\n  },\n}\n```\n\n### Gitignore-derived ignores\n\n`exadevConfig()`'s default output includes an `ignores` block derived directly from your project's own `.gitignore` (via [`@eslint/config-helpers`](https://www.npmjs.com/package/@eslint/config-helpers)'s `includeIgnoreFile`), so a generated directory your `.gitignore` already knows about (`dist/`, `coverage/`, a tool's own report output) is never linted, without hand-duplicating that list in `eslint.config.ts` too. This closes a real gap: a `.gitignore`d directory that nothing previously linted broadly enough to reach could still get linted the moment a wide-reaching rule (this package's own bundled RFC 8785 JSON canonicalization, say) started matching every file its glob covers.\n\n| Value | `options.gitignore` |\n| --- | --- |\n| `true` | Force on — throws if no `.gitignore` exists |\n| `false` | Force off — always `[]`, no resolution attempted |\n| `undefined` / omitted | Auto-detect (the default): on if the project has a `.gitignore`, silently off if it doesn't (nothing to read from a project with no version control set up yet) |\n\nNeeds no peer to install — `@eslint/config-helpers` is bundled into this package's own build.\n\n### RFC 8785 canonical JSON formatting\n\nEvery JSON file is linted against [`eslint-plugin-json-canonical`](https://github.com/ExaDev/eslint-plugin-json-canonical) v2 — plain UTF-16 code-unit key ordering, canonical number formatting, canonical string escaping, and (as of that plugin's own v2) pretty-printed layout (2-space indentation, one member/element per line, a trailing newline), per [RFC 8785](https://www.rfc-editor.org/rfc/rfc8785). This is bundled unconditionally, the same way jsdoc/tsdoc support is: `eslint-plugin-json-canonical` is a plain dependency of this package, so every consumer already has it. There is no option to turn it off.\n\nThe plugin's own full-canonicalization rule ([`no-insignificant-whitespace`](https://github.com/ExaDev/eslint-plugin-json-canonical/blob/main/src/rules/no-insignificant-whitespace.ts), which collapses a document to a single compacted line with no whitespace at all) is deliberately not part of the config this package extends — it stays available for a consumer to opt into directly for their own genuine canonicalization pass (hashing, signing, byte-for-byte comparison).\n\n`**/*.jsonc`, `**/tsconfig*.json`, and `**/turbo.json` get the plugin's `configs.contentOnlyJsonc` instead of the plain-JSON config: they genuinely carry comments (TypeScript and turbo both accept them), which [`@eslint/json`](https://github.com/eslint/json#readme)'s `json/json` language has no concept of and fails to parse, and neither pretty-printing nor whitespace-collapsing has a well-defined answer for a comment's own attachment to a member once its surrounding whitespace is rewritten. Content canonicalization (key order, number/string formatting) still applies to these files under `json/jsonc`.\n\n`**/package.json` gets everything the plain-JSON config gives every other file — including pretty-printed layout — except [`json/sort-keys`](https://github.com/eslint/json/blob/main/docs/rules/sort-keys.md), turned back off in its own override block, since its key order is the separate, syncpack-aware concern the next section covers.\n\n### Stylistic comment, class-member and JSX rules\n\nA hand-picked subset of [`@stylistic/eslint-plugin`](https://eslint.style) is bundled unconditionally, the same way jsdoc/tsdoc and RFC 8785 JSON support are: `@stylistic/eslint-plugin` is a plain dependency of this package, so every consumer already has it, and every rule below matches purely on comment shape, statement/class-member placement, or JSX prop/tag conventions, never on formatting (indentation, quotes, semicolons, trailing commas, line wrapping, bracket spacing), which stays Prettier's job in every consumer of this package. None of these rules appears in [`eslint-config-prettier`](https://github.com/prettier/eslint-config-prettier)'s own disabled-rules list.\n\n- **[`multiline-comment-style`](https://eslint.style/rules/multiline-comment-style)** is deliberately NOT enabled: the installed release's own directive-comment filter only recognises the `eslint`/`jshint`/`jslint`/`istanbul`/`globals`/`exported`/`jscs` family, so a run of `//` lines mixed with a `prettier-ignore`, `c8 ignore`/`v8 ignore`, `@ts-expect-error`/`@ts-ignore`/`@ts-nocheck`/`@ts-check`, or `TODO`/`FIXME` comment gets merged into one block and the directive lost (a lost `prettier-ignore` then lets Prettier reformat the code it protected), and two or more consecutive triple-slash reference/AMD directives break the same way regardless of file extension. This is a confirmed upstream defect, [issue #1249](https://github.com/eslint-stylistic/eslint-stylistic/issues/1249), fixed by the merged [PR #1251](https://github.com/eslint-stylistic/eslint-stylistic/pull/1251); the triple-slash gap is also tracked upstream in [issue #1285](https://github.com/eslint-stylistic/eslint-stylistic/issues/1285). This rule is re-enabled once a stable release contains PR #1251's fix, tracked at [ExaDev/eslint-config#45](https://github.com/ExaDev/eslint-config/issues/45).\n- **[`spaced-comment`](https://eslint.style/rules/spaced-comment)**: requires a space after `//`/`/*`, without fighting a `/**`-opening doc comment or a shebang line. Adds `{ block: { markers: ['!'] } }` on top of the bare default so a `/*!` license/banner block is not flagged either. A SPACED triple-slash reference/AMD directive (`/// <reference types=\"...\" />`, TypeScript's own compiler-emitted spelling) is exempted by the installed rule's own hard-coded check; a no-space directive (`///<reference types=\"...\" />`, also valid TypeScript syntax) is not, and gets rewritten by `--fix` into a broken `// /<reference ...>` comment TypeScript no longer recognises. Confirmed directly against the installed rule with no config-level workaround available (`markers`/`exceptions` both still require real whitespace immediately after the marker, which the no-space form never has); tracked at [ExaDev/eslint-config#47](https://github.com/ExaDev/eslint-config/issues/47). Also adds `{ line: { markers: ['#', '#region', '#endregion'] } }`: without it, the bare default rewrites a `//# sourceMappingURL=...`/`//# sourceURL=...` source-map comment into `// # sourceMappingURL=...`, which browsers and Node no longer recognise, and a bare `line: { markers: ['#'] }` alone would instead rewrite an unspaced `//#region`/`//#endregion` editor fold marker into `//# region`, which VS Code's own folding regex no longer matches. Listing all three markers together, confirmed directly against the installed rule, leaves every one of those four shapes untouched.\n- **[`lines-between-class-members`](https://eslint.style/rules/lines-between-class-members)** at its bare default: a blank line between class members, except after a `.d.ts`-style method overload signature.\n- **[`line-comment-position`](https://eslint.style/rules/line-comment-position)** at `'above'`: a `//` comment belongs above the code it describes, never trailing beside it on the same line. Not autofixable; a flagged trailing comment needs moving by hand. A trailing `// cspell:disable-line` is exempt (`ignorePattern`): cspell honours that directive only on the line it suppresses, so moving it above, as the report demands, would silently disable spell-checking for the wrong line. Every other directive this package recognises applies to the line(s) below it and is correctly relocated.\n- **[`padding-line-between-statements`](https://eslint.style/rules/padding-line-between-statements)**: a blank line is required after the last statement of a directive prologue (not between two consecutive directives), after the last CommonJS or ES import in a run (not between two consecutive imports), and before a `return` statement.\n- **[`jsx-curly-brace-presence`](https://eslint.style/rules/jsx-curly-brace-presence)**, **[`jsx-pascal-case`](https://eslint.style/rules/jsx-pascal-case)**, and **[`jsx-self-closing-comp`](https://eslint.style/rules/jsx-self-closing-comp)**, each at its own bare default: none of the three has any dependency on `eslint-plugin-react` or React itself (confirmed directly against `@stylistic/eslint-plugin`'s own `package.json`, whose only `peerDependencies` entry is `eslint`), since each matches purely on a JSX AST node shape and is a structural no-op on every non-JSX file.\n\n`@stylistic/eslint-plugin` has no rule covering JSX's shorthand-boolean-prop convention (`<Foo enabled />` vs `<Foo enabled={true} />`) or shorthand-fragment syntax (`<>...</>` vs `<React.Fragment>...</React.Fragment>`); those are `eslint-plugin-react`'s own `react/jsx-boolean-value` and `react/jsx-fragments`, which stay entirely within the optional [React support](#optional-react-and-nextjs-support) gate above, not this unconditional bundle.\n\nThis package's own **`exadev/prefer-doc-comment`** rule (see [Rules](#rules)) is wired alongside these, in the same unconditional bundle.\n\n### Optional package.json key ordering\n\n`exadevConfig({ packageJsonKeyOrder: true })` enables `exadev/package-json-key-order` for `**/package.json`, requiring the same key order [`syncpack format`](https://syncpack.dev/command/format) would produce — `sortFirst` fields (`name`, `description`, `version`, `author` by default) pinned to the top in that exact order, then every other top-level key alphabetically; and, inside each `sortAz`-listed field's own object or array value (`dependencies`, `devDependencies`, `scripts`, `keywords`, and the rest of syncpack's own default list), its members/elements sorted the same way. Confirmed directly against real `syncpack@15` output, not assumed from its docs — see this rule's own source comment for the exact reverse-engineering method (a symbol-before-digit-before-letter, case-insensitive comparison syncpack's docs don't specify precisely enough to derive from prose alone).\n\nThis exists for a project that wants real `package.json` canonicalization without installing syncpack, and so a project that already has syncpack never sees the two fight: `eslint --fix` and `syncpack format` converge on the identical output.\n\n| Value | `options.packageJsonKeyOrder` |\n| --- | --- |\n| `true` | Force on — throws if `@eslint/json` isn't resolvable |\n| `false` | Force off — always `[]`, no resolution attempted |\n| `undefined` / omitted | Auto-detect (the default): on unless the project already has a syncpack config (a `.syncpackrc*`/`syncpack.config.*` file, or a `\"syncpack\"` key in its own `package.json`), since syncpack already produces this exact order for free |\n\nLike React/Next.js support, this needs its own optional peer resolvable — `@eslint/json` is declared in `peerDependenciesMeta` as optional, so install it in your project with `pnpm add -D @eslint/json` — and, unlike them, also needs its `json/json` language registered for the file (this option's own config block does that for you; nothing extra to wire up).\n\nBundled into `exadevConfig()`'s default output the same way React/Next.js auto-detection is — `packageJsonKeyOrder: true`/`false` only forces the tri-state explicitly, it isn't the only way to reach it. Not part of `plugin.configs.recommended`, and not available as a `plugin.configs.packageJsonKeyOrder` explicit-tier config the way `.react`/`.nextjs` are, since wiring it through `plugin.configs` would need `plugin.ts` and this option's own config builder to import each other.\n\n## Rules\n\n| Rule | Fixable | Description |\n| --- | --- | --- |\n| `barrel-policy` | | **Umbrella rule selecting a whole index-file barrel policy.** One `{ mode }` option covers the four barrel rules below. See [Barrel policy](#barrel-policy). |\n| `no-index-files` | | **Bans any `index.*` file outright** (mode 1). The strictest policy. |\n| `no-non-barrel-index` | | **Only `src/index.ts` may be named `index.*`** — any other `index.ts`/`.js`/etc would be silently selected by a consumer's bare directory import. |\n| `no-non-barrel-reexport` | ✓ | **Re-exports belong only in a barrel.** Catches the split form across two statements (`import { x } from './y'; export { x };` or `export default x;`) which no AST selector alone can match. Autofix deletes the export and the now-pointless import when it was the import's only use. Self-scopes away from any index file. |\n| `no-side-effects-in-index` | | **A barrel may contain only re-export statements** — nothing that could execute at import time. Self-scopes to any index file. |\n| `barrel-direct-siblings-only` | | **A barrel may re-export only from a direct sibling** (`./module`), never a nested path, parent, or bare package specifier (mode 3). |\n| `no-control-flow` | | **Bans `if`/`switch`/loops/the ternary operator outright.** Not part of `recommended` or `barrel` — ordinary code legitimately needs control flow, so this is opt-in, wired via a consumer's own `files` glob for the specific packages that want it (a composition-root package selecting an adapter/strategy by a validated key, say): a lookup table replaces a branch, a declarative array method (`map`/`filter`/`some`/`every`/...) replaces a loop. Requires no type information. See also [Pure modules](#pure-modules), which can add it to a block, and [a complexity ceiling](#a-complexity-ceiling-for-logic-free-modules) for a softer limit. |\n| `no-pointless-reassignment` | ✓ | **Flags a `const` alias that adds no transformation** (`const foo = bar` where both sides are plain identifiers). Autofix rewrites every read to the original name and deletes the declaration. Still reported but deliberately not auto-fixable where collapsing the alias would change meaning: an explicit type annotation (`const exhaustive: never = item` — the annotation is the point), a read where the original name is shadowed, a read as a shorthand object property, more than one declarator in the statement, or a source that is written to anywhere. An alias that is itself part of the module's exported surface (`export const alias = original;`, a later `export { alias }`/`export { alias as other }`, or `export default alias;`) is neither reported nor fixed at all, since collapsing it would rename or delete a binding every importer of this module depends on. |\n| `no-object-assign` | ✓/suggestion | **`Object.assign` skips the type-checking object spread gets** — it doesn't check a source object's properties against the target's declared types. A fresh object-literal target autofixes to `{ ...target, ...source }`; mutating an existing reassignable binding offers a suggestion only (changes the object's identity); a `const` binding or a non-statement call site gets a plain report with no fix. |\n| `no-mutable-union-array-param` | ✓ | **A union-typed array parameter can be mutated with a value the caller's narrower array never declared.** A function parameter typed as an array of a union (`(string \\| number)[]`) accepts a narrower caller array (`number[]`) by covariance; calling `push`/`unshift`/`splice`/`fill`/`copyWithin` on it can then insert a value the caller's own array was never declared to hold. Autofix marks the parameter `readonly`, turning the mutating call into a real compile error to resolve deliberately. Requires no type information. |\n| `prefer-readonly-array-param` | ✓ | **Every non-readonly array/tuple parameter should be `readonly`.** A narrower, safely-autofixable sibling of [`@typescript-eslint/prefer-readonly-parameter-types`](https://typescript-eslint.io/rules/prefer-readonly-parameter-types/) scoped to array/tuple parameter shapes only: fires unconditionally on every non-readonly array or tuple parameter, regardless of whether the function body mutates it, in any parameter position (a plain identifier, a rest parameter, a default-valued parameter, or a constructor parameter property) and any function-like shape (a concrete function/arrow/method, or a declaration-only ambient function, interface method, function type alias, call/construct signature, or abstract/ambient class method). A union containing an array/tuple member is fixed on that member alone. Autofix prepends `readonly ` (or renames `Array<T>` to `ReadonlyArray<T>`), turning any resulting mutation into a real compile error to resolve deliberately. Requires no type information — registered in both `plugin.configs.recommended` and the default (type-checked) export. |\n| `prefer-readonly-object-param` | ✓ | **A flat object parameter's type should be wrapped in `Readonly<...>`.** The object-shape sibling of `prefer-readonly-array-param` above, scoped to \"flat\" object parameters where a shallow fix is provably sufficient: an inline `{ ... }` literal or a reference to a plain named type/interface where every property (and index-signature value, if any) is itself a primitive, a literal/union of primitives, or a callback — with no nested object, array, tuple, Map, Set, class instance, union, intersection, or unconstrained type parameter anywhere in the shape. Autofix wraps the parameter's own type annotation in `Readonly<...>`, which TypeScript's own deep-readonly check accepts as fully sufficient for a shape this flat. Requires type information — only in the default (type-checked) export, not `plugin.configs.recommended` — to resolve each property's real type via the checker. |\n| `no-array-isarray-mutation` | | **`Array.isArray` narrowing discards a `readonly` array's own guarantee.** Its type declaration narrows to plain `any[]`, discarding the `readonly` guarantee of any array type in the narrowed parameter's or local variable's real type — a bare `readonly T[]`, a `ReadonlyArray<T>`, one behind a type alias, or one alongside other union members — inside the guarded branch; calling `push`/`unshift`/`splice`/`fill`/`copyWithin` there can mutate a caller's genuinely readonly array. Recognises the direct `if (Array.isArray(x))` guard (braced or not), the early-return/early-throw idiom, `&&`, the ternary form, and the else-of-a-negated-test form. No autofix: re-adding `readonly` is a no-op (the guard already discarded it) and rewriting the mutating call into a copy-first pattern is not safely mechanical in the presence of aliasing. Requires type information — only in the default (type-checked) export, not `plugin.configs.recommended` — specifically to see through a type alias and to catch a bare, non-union readonly array parameter or local variable, neither visible from its own syntax alone. |\n| `no-map-instanceof-mutation` | | **`instanceof Map` narrowing discards a `ReadonlyMap`'s own guarantee.** `Map` is declared as extending `ReadonlyMap`, so `instanceof Map` narrows a parameter or local variable whose real type includes a `ReadonlyMap` — bare, unioned, or reached through a type alias — straight past the readonly guarantee to the full mutable interface; calling `set`/`delete`/`clear` there can mutate a caller's genuinely read-only map. Recognises the direct `if (input instanceof Map)` guard (braced or not), the early-return/early-throw idiom, `&&`, the ternary form, and the else-of-a-negated-test form. No autofix: rewriting the mutating call into a copy-first pattern is not safely mechanical in the presence of aliasing. Requires type information — only in the default (type-checked) export, not `plugin.configs.recommended`. |\n| `no-set-instanceof-mutation` | | **`instanceof Set` narrowing discards a `ReadonlySet`'s own guarantee**, straight to the fully mutable `Set` interface, with no way to preserve the read-only guarantee through the narrowing; calling `add`/`delete`/`clear` there can mutate a caller's genuinely read-only set. Recognises the same guard idioms as `no-map-instanceof-mutation` above. No autofix, for the same aliasing reason. Requires type information — only in the default (type-checked) export, not `plugin.configs.recommended`. |\n| `no-enum-number-widening` | | **A bare `number` is accepted anywhere a numeric enum is expected**, without checking it is actually one of the enum's members — only a numeric *literal* gets range-checked by `tsc`. No autofix: the only provably safe fix is a genuine runtime membership check against the enum's own values, which is a behavioural choice a mechanical fix cannot responsibly make. Requires type information — only in the default (type-checked) export, not `plugin.configs.recommended`. |\n| `no-enum-reverse-lookup-widening` | suggestion | **A numeric enum's reverse lookup can silently type as `string` for an out-of-range index.** Indexing a numeric enum's reverse mapping (`Direction[n]`) with a bare (non-literal) `number`, or with a different enum's member, types as plain `string` for any index, including one outside the enum's actual members, where it genuinely returns `undefined` at runtime — `tsc` does not range-check even a numeric literal index here. When the indexed expression is the init of a variable with an explicit `: string` annotation, a suggestion widens it to `: string \\| undefined`, forcing later uses as a bare `string` to surface as real compile errors; every other syntactic position gets a plain report with no fix, and no case gets a full `--fix` autofix. Requires type information — only in the default (type-checked) export, not `plugin.configs.recommended`. |\n| `prefer-numeric-sort-compare` | suggestion | **`.sort()` on a number array sorts lexicographically by default.** A deliberately narrow addition alongside [`@typescript-eslint/require-array-sort-compare`](https://typescript-eslint.io/rules/require-array-sort-compare/) (which already flags any bare `.sort()`/`.toSorted()` except on a plain string array, with no fix): when the array's element type is definitively `number`, a suggestion offers an ascending compare function (`(a, b) => a - b`), since the default comparator sorts lexicographically (`[1, 2, 10].sort()` becomes `[1, 10, 2]`). Not a full autofix — descending order is a real, if less common, alternative intent. Requires type information — only in the default (type-checked) export, not `plugin.configs.recommended`, since it needs the checker to confirm the array's element type. |\n| `prefer-options-object-param` | suggestion | **A run of 2+ trailing optional parameters (`?`-marked or default-valued) should be bundled into one destructured `options` parameter.** Without this, a caller needing only the last optional parameter must still pass `undefined` for every optional parameter before it (the motivating case: a 10-parameter constructor with 8 trailing optional ones). The threshold is configurable (`{ minTrailingOptional }`, default `2`). A suggestion (not a full autofix) rewrites the parameter list and inserts a `const { ... } = options ?? {};` destructure as the body's first statement; call sites are never rewritten, since the signature edit alone turns every stale positional call site into a real compile error. Still reported, but with no suggestion offered, whenever collapsing the run would not be safe/mechanical: a parameter property in the run, a parameter with no simple resolvable name and explicit type of its own (including a destructured parameter, or one typed only through a separately-declared function-type alias), a decorated parameter, a rest parameter anywhere in the full parameter list, no `BlockStatement` body at all (an arrow's expression body, or any declaration-only signature — including an ambient `.d.ts` function, an interface method/construct signature, or an abstract/ambient class method), a `@param` JSDoc tag naming a parameter in the run, or a parameter/function-scope-local variable already named `options`. Complements `max-params` (see \"Individual rule tuning\" above), which catches the different shape (excessive REQUIRED parameters) this rule is deliberately blind to. Requires no type information — registered in both `plugin.configs.recommended` and the default (type-checked) export, like `prefer-readonly-array-param` above; unlike its own `prefer-readonly-object-param`/`prefer-numeric-sort-compare` siblings, which genuinely need the checker and so cannot be offered outside the default export at all. |\n| `prefer-doc-comment` | ✓ | **A substantial leading comment on an exported declaration should be a doc comment, not a plain `//`/`/* */` comment.** \"Substantial\" means 2 or more comment lines, or a single line whose text exceeds a configurable length (`{ maxLineLength }`, default `80`). Covers an exported function declaration, an exported function's own signature (a body-less `TSDeclareFunction`, an ordinary overload signature and a genuinely ambient one alike, `declare function foo(): void;` included, since TypeScript never shows either one's own implementation to callers, only the signature itself), an exported `const` declaration, whatever its initialiser (a function expression or arrow function, an ordinary value such as `export const TIMEOUT_MS = 5000;`, or none at all in an ambient `export declare const x: number;`; reported once even when the statement declares several, e.g. `export const h1 = () => {}, h2 = () => {};`), an exported class declaration, ambient (`export declare class`) or ordinary alike (TypeScript strips only an ambient class's own MEMBER bodies, never its declaration shape, so its leading comment documents the identical public contract an ordinary exported class's does), an exported class's public (non-`private`/`protected`/`#`-private) method (covering both a method's own overload signature and its trailing implementation) and public abstract method (`abstract m(): void;`, needing no equivalent overload-implementation exemption of its own, since TypeScript's own grammar never lets an abstract method carry a body at all), an exported class's public function/arrow-valued property (the class-member equivalent of the function-initialised `const` shape above), an exported interface/type-alias declaration, an exported enum declaration (`const enum` alike; never an individual member, the identical reason an interface's members are never individually checked), an exported namespace/module declaration (ambient or ordinary alike, at any nesting depth whose enclosing namespaces are all exported themselves), and a default-exported expression (`export default (): number => 1;`, `export default 42;`; a default-exported `function`/`class` declaration or body-less signature is covered by its own shape above and reported exactly once, never twice); a non-exported declaration is never reported, regardless of its comment. A TypeScript function/method overload set's own body-carrying IMPLEMENTATION signature is never reported either, however substantial its own comment: TypeScript never shows that signature to callers at all, only the separate overload signatures above it (a body-less `TSDeclareFunction` for a function, written without `declare`, or a `MethodDefinition` whose own `value` is `TSEmptyBodyFunctionExpression` for a class method) are ever checked against a call site, and both of those are themselves reported like any other declaration in this rule's scope, as the overload set's own real public contract; a comment directly above the implementation is instead internal reasoning about how the overloads are actually realised, never a public contract. The implementation is detected via ESLint's own scope analysis for a function (the overload signatures and the implementation all share one Variable) and, for a class method, via an EARLIER (source-order), same-`static`-ness, same-key signature sibling: a same-named `static`/instance pair is never one overload set to TypeScript itself, and a same-named signature declared AFTER the implementation belongs to a different, later member, never the one the implementation itself realises, so neither is ever mistaken for the implementation's own overload signature. A trailing comment on the previous line of code (`const x = 1; // note`) is never treated as the next declaration's own leading comment. A directive-shaped line (the full ESLint directive/config-comment family, `eslint-disable`/`eslint-disable-line`/`eslint-disable-next-line`/`eslint-enable`/`eslint`/`eslint-env`/`global`/`globals`/`exported`, matched case-sensitively, exactly as ESLint's own directive parser matches them, each requiring real whitespace or end-of-string immediately after the keyword rather than a bare word boundary, so an ordinary compound word such as `eslint-plugin-x` is never mistaken for one, and, on a `//` Line comment specifically, recognised only as `eslint-disable-line`/`eslint-disable-next-line`, the two labels ESLint itself honours there; every other member of the family is a directive only in Block form, matching what ESLint itself does; `@ts-expect-error`/`@ts-ignore`/`@ts-nocheck`/`@ts-check`, the `ts-*` markers matched with or without their own leading `@`; `TODO`/`FIXME`, matched case-insensitively when all-uppercase or immediately followed by `:`/`(` (`todo:`, `fixme(scope):`), never a `Todo`/`Fixme` opening ordinary prose; `prettier-ignore`; `c8 ignore`/`v8 ignore`/`istanbul ignore`/`node:coverage ignore`/`node:coverage disable`/`node:coverage enable`; `cspell:disable`/`cspell:disable-line`/`cspell:disable-next-line`/`cspell:enable` (never cspell's own `ignore`/`words` directives, which name dictionary words rather than suppressing a stretch of text); `biome-ignore`; and `#region`/`#endregion`, an editor folding marker) found anywhere in a `//` run is never itself merged into the fix: only the prose segment directly adjacent to the declaration, the run of lines after the LAST such directive, is ever reported and converted; every earlier segment, and every directive line itself, is left completely untouched, since an earlier segment sits on the far side of a directive from the declaration and documents whatever the directive itself demarcates, never the declaration below it; a directive seated directly above the declaration itself is transparent to this split rather than a boundary of it, since group assembly skips past it before the run is ever collected, so the prose above it is still reported and converted, with the directive preserved untouched in place, still functional, directly above the declaration; a directive found inside an already-consolidated Block comment leaves the whole comment alone, since a partial fix cannot safely be sliced out of one physical comment node. A `///` triple-slash reference/AMD directive (`/// <reference types=\"...\" />`) is recognised separately, by its own un-stripped comment value rather than this same pattern, and excluded from the fix the same way. An existing `/**`-opening doc comment, or a `/*!` license/banner block, is left alone regardless of length. Autofix rewraps the comment's existing text into a `/** ... */` block, one line per original logical line as this rule's own fixer writes it, preserving each line's own indentation beyond the delimiter's single conventional space (never flattening a nested example or sub-list to its neighbours' level), and unwraps a hand-written starred block's (`/* ... */` with its own leading `* ` per line) marker rather than doubling it against the fixer's own. This describes this rule's own fixer alone, not a guarantee that `exadevConfig()`'s combined output preserves that text verbatim: a bundled sibling rule's own fixer can still rewrite it further in the same `--fix` run, which is exactly why the fix is withheld below for the two such collisions this rule already guards against. Handles the leading comment whether it is a run of `//` lines or already a bare block: a bare block may be hand-written, or, for a consumer who separately enables `@stylistic/eslint-plugin`'s own `multiline-comment-style` themselves, produced by its own bare-block fixer. Always reported when substantial, but the fix withheld, rather than silently skipping the violation, whenever the exact resulting text would contain a literal closing-comment delimiter or fails to parse as valid TSDoc (checked directly against `@microsoft/tsdoc`'s own parser, the same one `eslint-plugin-tsdoc`'s `tsdoc/syntax` validates against). Also withheld when any considered line itself begins with a literal `*` once its own leading whitespace is trimmed (a hand-written markdown bullet, `* item`, or a bare block comment whose own lines are only partially starred): spliced verbatim into this fixer's own template, that reads as a repeated delimiter on a middle line, which eslint-plugin-jsdoc's own `jsdoc/no-multi-asterisks` rule (bundled unconditionally alongside this rule, see [`jsdoc.ts`](src/jsdoc.ts)) would then strip in the very same `--fix` run, silently losing real content in a way neither this rule nor `@microsoft/tsdoc`'s own parser has any way to detect on its own. Also withheld when any considered line carries an unescaped tag-shaped `@word` mention, at the line's own start (a genuine TSDoc block or modifier tag, `@remarks`, `@param foo`, `@internal`, `@typeParam T`, `@virtual`, `@override`, ...) or immediately after whitespace anywhere further into the line (a bare mid-line mention, `tseslint.config() is @deprecated upstream`), the identical shape `jsdoc/escape-inline-tags` itself keys on: a line-start tag withholds because jsdoc.ts spreads `flat/recommended-tsdoc-error` with no `settings.jsdoc` override of its own, so eslint-plugin-jsdoc's own tag-vocabulary rules (bundled unconditionally alongside this rule too) validate a doc comment's tags against JSDoc/TypeScript's own vocabulary rather than TSDoc's, and confirmed directly (a real combined-config run, not this rule in isolation) to delete, rewrite or otherwise fight over a genuine TSDoc-only tag in the very same `--fix` run: `jsdoc/empty-tags` deletes an `@internal` tag's own description text, `jsdoc/check-tag-names` deletes `@public`/`@readonly` outright and rewrites `@typeParam` to `@template` (which then fails `tsdoc/syntax`, since `@template` is not itself valid TSDoc) and `@virtual` to `@abstract`, and `@override` triggers a live fight between `check-tag-names` and `empty-tags`. A bare mid-line mention withholds because it is worse than a sibling-fixer collision: it parses as perfectly valid TSDoc, but confirmed directly (linting a scratch file with this repo's own bundled config) that TypeScript's own JSDoc parser reads the converted mention as a REAL tag on the symbol, so a converted `is @deprecated upstream` makes every use of the symbol fail `@typescript-eslint/no-deprecated`, changing what the symbol means rather than merely its formatting. A mention wrapped in a backtick code span (`@deprecated` inside one) is exempt from both and converts safely, the backtick immediately before the `@` breaking the whitespace-preceded shape for TypeScript's tag scanning and `escape-inline-tags` alike (both confirmed directly). Withholding on every tag-shaped line, not merely a blank line adjacent to one, is deliberate: this rule has no way to enumerate in advance which further TSDoc-only tag eslint-plugin-jsdoc's own vocabulary will next disagree with, so it withholds structurally rather than adding a further one-off guard each time a new collision is found. `jsdoc.ts`'s own `check-tag-names`/TSDoc-vocabulary disagreement is itself a pre-existing gap on `main`, not caused by this rule, tracked separately. Requires no type information. Wired only through `stylisticCommentsConfig` into the default (type-checked) `exadevConfig()` output (see [Stylistic comment, class-member and JSX rules](#stylistic-comment-class-member-and-jsx-rules)), never registered in `plugin.configs.recommended`/`.barrel`, so a consumer using the lighter `extends: [plugin.configs.recommended]` option (see [The lighter option](#the-lighter-option-the-plugin-named-export)) never gets it. |\n| `package-json-key-order` | ✓ | **Requires `package.json`'s keys to match `syncpack format`'s order.** See [Optional package.json key ordering](#optional-packagejson-key-ordering) — opt-in via `exadevConfig({ packageJsonKeyOrder: true })`, not part of `recommended`/`barrel`. A JSON-language rule (`@eslint/json`'s `json/json`), not a TSESLint one — needs no type information and doesn't apply to any `.ts`/`.js` file. |\n| `no-uphill-dependency` | | **Enforces a configured workspace's rank, rank-skip, slice and group-isolation boundaries** on every `package.json`'s declared dependencies, with documented per-edge exceptions (`allow`) and exempt target groups (`exemptTargetGroups`). See [Workspace architecture](#workspace-architecture). Opt-in via `exadevConfig({ workspaceArchitecture })` or the standalone `workspaceArchitectureConfig()`, not part of `recommended`/`barrel`. A JSON-language rule, needs no type information. |\n| `no-dependency-cycle` | | **Disallows a workspace dependency that can reach back to the package declaring it.** A same-rank or same-slice dependency passes `no-uphill-dependency` while still forming a cycle, which this rule catches instead. See [Workspace architecture](#workspace-architecture). |\n| `package-name-mirrors-path` | | **Requires a workspace package's declared name to match the name its own path derives**, under the configured naming scope and separator. A package that declares no name at all is reported too (it plainly cannot mirror its path when it names nothing). Itself opt-in within workspace architecture: a no-op unless the shared `naming` option is given. See [Workspace architecture](#workspace-architecture). |\n| `package-has-files` | | **Requires configured files to exist inside every matching workspace package.** ESLint cannot report a file that does not exist, so the diagnostic is anchored on the package's own `package.json`, listing the missing paths. Entries may be globs. Opt-in: a no-op unless the shared `requiredFiles` option is given. See [Required files](#required-files). |\n| `dev-de","readmeFilename":"README.md"}