{"_id":"@adddog/eslint","_rev":"6-7cd0bd31da35af519eeeba1f339e8a93","name":"@adddog/eslint","dist-tags":{"latest":"0.0.13"},"versions":{"0.0.6":{"name":"@adddog/eslint","version":"0.0.6","_id":"@adddog/eslint@0.0.6","maintainers":[{"name":"selie","email":"samradelie@gmail.com"}],"homepage":"https://github.com/samelie/eslint#readme","bugs":{"url":"https://github.com/samelie/eslint/issues"},"dist":{"shasum":"0a7bed4413487e97d7702980a99d9f8fce9569b2","tarball":"https://registry.npmjs.org/@adddog/eslint/-/eslint-0.0.6.tgz","fileCount":10,"integrity":"sha512-ibQ9ezM95TKLq62s10pN6/wxcwuHzK7qLcqWHzN/G23JBJh+I3yxoRrBa7m18YZ7Pjn9EfTbpDGHurmqHOfC9w==","signatures":[{"sig":"MEUCIFLOFKFYTIUTk5LZLLIDrrXz1y9sbhJfe4z9QOfr6uWtAiEA0iKWFOtOhMrPNewOfuUuKDm3ehqZkdAp4m8Dc5MWsOQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78689},"main":"./dist/eslint.config.mjs","type":"module","types":"./dist/eslint.config.d.ts","module":"./dist/eslint.config.mjs","engines":{"npm":">= 11","node":">= 22","pnpm":">= 10"},"exports":{".":{"types":"./dist/eslint.config.d.ts","import":"./dist/eslint.config.mjs","require":"./dist/eslint.config.cjs"}},"gitHead":"ec0f5910835313fd966a51496b98cde181019328","scripts":{"knip":"knip","lint":"eslint .","build":"unbuild","types":"tsc -p tsconfig.typecheck.json","prepack":"pnpm run prepublishOnly","release":"bumpp --yes --no-push --release patch","lint:fix":"eslint --fix .","prepublishOnly":"pnpm run lint && pnpm run types && pnpm run build"},"_npmUser":{"name":"selie","email":"samradelie@gmail.com"},"repository":{"url":"git+https://github.com/samelie/eslint.git","type":"git"},"_npmVersion":"11.4.2","description":"> Shared ESLint configuration for the monorepo, built on [@antfu/eslint-config](https://github.com/antfu/eslint-config)","directories":{},"_nodeVersion":"24.4.0","dependencies":{"@antfu/eslint-config":"^5.4.1","@adddog/eslint-plugin-rules":"^0.0.10","eslint-plugin-no-barrel-files":"^1.2.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"bumpp":"^10.3.1","eslint":"^9.37.0","unbuild":"^3.6.1","package-up":"^5.0.0","typescript":"^5.9.3","@types/node":"^24.7.2","package-json-type":"^1.0.3","eslint-plugin-format":"^1.0.2","@adddog/build-configs":"^0.0.1","eslint-flat-config-utils":"^2.1.4"},"_npmOperationalInternal":{"tmp":"tmp/eslint_0.0.6_1760380076436_0.7499738860926282","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@adddog/eslint","version":"0.0.7","_id":"@adddog/eslint@0.0.7","maintainers":[{"name":"selie","email":"samradelie@gmail.com"}],"homepage":"https://github.com/samelie/eslint#readme","bugs":{"url":"https://github.com/samelie/eslint/issues"},"dist":{"shasum":"1da3e904c3ad0bebed006e9432a10a3b6dd715bd","tarball":"https://registry.npmjs.org/@adddog/eslint/-/eslint-0.0.7.tgz","fileCount":8,"integrity":"sha512-X3ctZe1X5xoLfVOvE9GKn/6IBqskNum6jle4baezbVL8XXZsH6Bq9k18JH4UUBY5JzU03WlfG9QbxA7r2CbRWA==","signatures":[{"sig":"MEUCIH0xJtwDl35ROoG4HyOqeHR2YDnBolq9ECLiVuFk1mOVAiEA4+QYpawfjtaeEMH2Xsy074fYOYmXYWXLy0GKt1oSiSs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39591},"main":"./dist/eslint.config.mjs","type":"module","_from":"file:adddog-eslint-0.0.7.tgz","types":"./dist/eslint.config.d.ts","module":"./dist/eslint.config.mjs","engines":{"npm":">= 11","node":">= 22","pnpm":">= 10"},"exports":{".":{"types":"./dist/eslint.config.d.ts","import":"./dist/eslint.config.mjs","require":"./dist/eslint.config.cjs"}},"scripts":{"knip":"knip","lint":"eslint .","build":"unbuild","types":"tsc -p tsconfig.typecheck.json","release":"bumpp --yes --no-push --no-tag --release patch","lint:fix":"eslint --fix ."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20ecf145-a1c3-4765-8b27-ea54e1aa16b6"}},"_resolved":"/home/runner/work/samelie-monorepo/samelie-monorepo/packages/eslint/adddog-eslint-0.0.7.tgz","_integrity":"sha512-X3ctZe1X5xoLfVOvE9GKn/6IBqskNum6jle4baezbVL8XXZsH6Bq9k18JH4UUBY5JzU03WlfG9QbxA7r2CbRWA==","repository":{"url":"git+https://github.com/samelie/eslint.git","type":"git"},"_npmVersion":"11.10.1","description":"> Shared ESLint configuration for the monorepo, built on [@antfu/eslint-config](https://github.com/antfu/eslint-config)","directories":{},"_nodeVersion":"24.4.0","dependencies":{"@antfu/eslint-config":"^7.4.3","@adddog/eslint-plugin-rules":"0.0.11","eslint-plugin-no-barrel-files":"^1.2.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"bumpp":"^10.4.1","eslint":"^10.0.0","unbuild":"^3.6.1","typescript":"^5.9.3","@types/node":"^25.2.3","package-json-type":"^1.1.2","eslint-plugin-format":"^1.4.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint_0.0.7_1771633117615_0.6444919612888833","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@adddog/eslint","version":"0.0.10","_id":"@adddog/eslint@0.0.10","maintainers":[{"name":"selie","email":"samradelie@gmail.com"}],"homepage":"https://github.com/samelie/eslint#readme","bugs":{"url":"https://github.com/samelie/eslint/issues"},"dist":{"shasum":"722a33d8f1d1c8c09c58ccfc5010157df3f3fa87","tarball":"https://registry.npmjs.org/@adddog/eslint/-/eslint-0.0.10.tgz","fileCount":8,"integrity":"sha512-mPcXGO8+HG4kGztEuGLzZtoGfYu9cBt/hUWzP3tcbOiqq/xz+woYLRDDoniJ49kr/Nk2pLxhjbM3WLcos6UnQQ==","signatures":[{"sig":"MEUCIQCeUZOKYtfweNXIM96gp2PPjasxFFebCy693/mq7uT+OwIgc7iuT8UelJ0Bn/Ssiv7xBr0ERYuEKJpObrhyqO8cU4U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40130},"main":"./dist/eslint.config.mjs","type":"module","_from":"file:adddog-eslint-0.0.10.tgz","types":"./dist/eslint.config.d.ts","engines":{"npm":">= 11","node":">= 22","pnpm":">= 10"},"exports":{".":{"types":"./dist/eslint.config.d.ts","import":"./dist/eslint.config.mjs","require":"./dist/eslint.config.cjs"}},"scripts":{"knip":"knip","lint":"eslint .","build":"unbuild","types":"tsc -p tsconfig.typecheck.json","release":"bumpp --yes --no-push --no-tag --release patch","lint:fix":"eslint --fix .","version:patch":"npm version patch --no-git-tag-version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20ecf145-a1c3-4765-8b27-ea54e1aa16b6"}},"_resolved":"/home/runner/work/samelie-monorepo/samelie-monorepo/packages/eslint/adddog-eslint-0.0.10.tgz","_integrity":"sha512-mPcXGO8+HG4kGztEuGLzZtoGfYu9cBt/hUWzP3tcbOiqq/xz+woYLRDDoniJ49kr/Nk2pLxhjbM3WLcos6UnQQ==","repository":{"url":"git+https://github.com/samelie/eslint.git","type":"git"},"_npmVersion":"11.10.1","description":"> Shared ESLint configuration for the monorepo, built on [@antfu/eslint-config](https://github.com/antfu/eslint-config)","directories":{},"_nodeVersion":"24.4.0","dependencies":{"@antfu/eslint-config":"^7.4.3","@adddog/eslint-plugin-rules":"0.0.14","eslint-plugin-no-barrel-files":"^1.2.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"bumpp":"^10.4.1","eslint":"^10.0.2","unbuild":"^3.6.1","typescript":"^5.9.3","@types/node":"^25.3.0","package-json-type":"^1.1.2","eslint-plugin-format":"^1.4.0","@adddog/monorepo-consistency":"0.0.12"},"_npmOperationalInternal":{"tmp":"tmp/eslint_0.0.10_1771946523458_0.17883160249637475","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@adddog/eslint","version":"0.0.11","_id":"@adddog/eslint@0.0.11","maintainers":[{"name":"selie","email":"samradelie@gmail.com"}],"homepage":"https://github.com/samelie/eslint#readme","bugs":{"url":"https://github.com/samelie/eslint/issues"},"dist":{"shasum":"25769514a0acebab1799bd5f0b0837d8e75b876b","tarball":"https://registry.npmjs.org/@adddog/eslint/-/eslint-0.0.11.tgz","fileCount":8,"integrity":"sha512-IG3LEhYCs7mNuyWuIKVQ/7PkI+rHnv/VGb0vRLI8NhJiGmvjN13nISOJ3dy8RwdILTlZsmULNQxuDUK03KBUEw==","signatures":[{"sig":"MEQCIAGt59YDSC7Ibf6VaMBxFNdiWOiXDckMmI7kn5YFjYXtAiBZ4Z7phg7gp1TlLoLpMj9lbJ8KjR8665e03uDEeWvmgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40130},"main":"./dist/eslint.config.mjs","type":"module","_from":"file:adddog-eslint-0.0.11.tgz","types":"./dist/eslint.config.d.ts","engines":{"npm":">= 11","node":">= 22","pnpm":">= 10"},"exports":{".":{"types":"./dist/eslint.config.d.ts","import":"./dist/eslint.config.mjs","require":"./dist/eslint.config.cjs"}},"scripts":{"knip":"knip","lint":"eslint .","build":"unbuild","types":"tsc -p tsconfig.typecheck.json","release":"bumpp --yes --no-push --no-tag --release patch","lint:fix":"eslint --fix .","version:patch":"npm version patch --no-git-tag-version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20ecf145-a1c3-4765-8b27-ea54e1aa16b6"}},"_resolved":"/home/runner/work/samelie-monorepo/samelie-monorepo/packages/eslint/adddog-eslint-0.0.11.tgz","_integrity":"sha512-IG3LEhYCs7mNuyWuIKVQ/7PkI+rHnv/VGb0vRLI8NhJiGmvjN13nISOJ3dy8RwdILTlZsmULNQxuDUK03KBUEw==","repository":{"url":"git+https://github.com/samelie/eslint.git","type":"git"},"_npmVersion":"11.10.1","description":"> Shared ESLint configuration for the monorepo, built on [@antfu/eslint-config](https://github.com/antfu/eslint-config)","directories":{},"_nodeVersion":"24.4.0","dependencies":{"@antfu/eslint-config":"^7.4.3","@adddog/eslint-plugin-rules":"0.0.15","eslint-plugin-no-barrel-files":"^1.2.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"bumpp":"^10.4.1","eslint":"^10.0.2","unbuild":"^3.6.1","typescript":"^5.9.3","@types/node":"^25.3.0","package-json-type":"^1.1.2","eslint-plugin-format":"^1.4.0","@adddog/monorepo-consistency":"0.0.13"},"_npmOperationalInternal":{"tmp":"tmp/eslint_0.0.11_1771947097789_0.9651329910080491","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@adddog/eslint","version":"0.0.12","_id":"@adddog/eslint@0.0.12","maintainers":[{"name":"selie","email":"samradelie@gmail.com"}],"homepage":"https://github.com/samelie/eslint#readme","bugs":{"url":"https://github.com/samelie/eslint/issues"},"dist":{"shasum":"cc7e6f69e7c7ab0c1666945765706c95cd5d775c","tarball":"https://registry.npmjs.org/@adddog/eslint/-/eslint-0.0.12.tgz","fileCount":8,"integrity":"sha512-iljFlFEhQToMgZ/EwDKd8+8DzrJg1TaE9MaC1S6i34wiS+uewG1cN1qZQqj0pPd7wQaFdp63g18Vv0CXu3i0UQ==","signatures":[{"sig":"MEYCIQCw59n741+vKBc7KdJg06+caMfwkXDvXxVEazo+vOuknwIhAMGaScLbWsjrkFn8Hd6hf/mdReaBN46aXgYHd7MlIIL6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40130},"main":"./dist/eslint.config.mjs","type":"module","_from":"file:adddog-eslint-0.0.12.tgz","types":"./dist/eslint.config.d.ts","engines":{"npm":">= 11","node":">= 22","pnpm":">= 10"},"exports":{".":{"types":"./dist/eslint.config.d.ts","import":"./dist/eslint.config.mjs","require":"./dist/eslint.config.cjs"}},"scripts":{"knip":"knip","lint":"eslint .","build":"unbuild","types":"tsc -p tsconfig.typecheck.json","release":"bumpp --yes --no-push --no-tag --release patch","lint:fix":"eslint --fix .","version:patch":"npm version patch --no-git-tag-version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20ecf145-a1c3-4765-8b27-ea54e1aa16b6"}},"_resolved":"/home/runner/work/samelie-monorepo/samelie-monorepo/packages/eslint/adddog-eslint-0.0.12.tgz","_integrity":"sha512-iljFlFEhQToMgZ/EwDKd8+8DzrJg1TaE9MaC1S6i34wiS+uewG1cN1qZQqj0pPd7wQaFdp63g18Vv0CXu3i0UQ==","repository":{"url":"git+https://github.com/samelie/eslint.git","type":"git"},"_npmVersion":"11.10.1","description":"> Shared ESLint configuration for the monorepo, built on [@antfu/eslint-config](https://github.com/antfu/eslint-config)","directories":{},"_nodeVersion":"24.4.0","dependencies":{"@antfu/eslint-config":"^7.4.3","@adddog/eslint-plugin-rules":"0.0.16","eslint-plugin-no-barrel-files":"^1.2.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"bumpp":"^10.4.1","eslint":"^10.0.2","unbuild":"^3.6.1","typescript":"^5.9.3","@types/node":"^25.3.0","package-json-type":"^1.1.2","eslint-plugin-format":"^1.4.0","@adddog/monorepo-consistency":"0.0.14"},"_npmOperationalInternal":{"tmp":"tmp/eslint_0.0.12_1771951620724_0.755322478995974","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@adddog/eslint","version":"0.0.13","type":"module","homepage":"https://github.com/samelie/eslint#readme","repository":{"type":"git","url":"git+https://github.com/samelie/eslint.git"},"bugs":{"url":"https://github.com/samelie/eslint/issues"},"exports":{".":{"types":"./dist/eslint.config.d.ts","import":"./dist/eslint.config.mjs","require":"./dist/eslint.config.cjs"}},"main":"./dist/eslint.config.mjs","types":"./dist/eslint.config.d.ts","dependencies":{"@antfu/eslint-config":"^7.4.3","eslint-plugin-no-barrel-files":"^1.2.2","@adddog/eslint-plugin-rules":"0.0.17"},"devDependencies":{"@types/node":"^25.3.0","bumpp":"^10.4.1","eslint":"^10.0.2","eslint-plugin-format":"^1.4.0","package-json-type":"^1.1.2","typescript":"^5.9.3","unbuild":"^3.6.1","@adddog/monorepo-consistency":"0.0.15"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">= 22","pnpm":">= 10","npm":">= 11"},"scripts":{"build":"unbuild","lint":"eslint .","lint:fix":"eslint --fix .","types":"tsc -p tsconfig.typecheck.json","release":"bumpp --yes --no-push --no-tag --release patch","knip":"knip","version:patch":"npm version patch --no-git-tag-version"},"_id":"@adddog/eslint@0.0.13","description":"> Shared ESLint configuration for the monorepo, built on [@antfu/eslint-config](https://github.com/antfu/eslint-config)","_integrity":"sha512-FCqUAN2uwAVgsa2dLrdWkkQ0+vydyABz3Ds7fzD0uPJE9SEnvv7qE/ZHHdhMalLSWbfbNRAdeuMbAGFbL2Jo5Q==","_resolved":"/home/runner/work/samelie-monorepo/samelie-monorepo/packages/eslint/adddog-eslint-0.0.13.tgz","_from":"file:adddog-eslint-0.0.13.tgz","_nodeVersion":"24.4.0","_npmVersion":"11.10.1","dist":{"integrity":"sha512-FCqUAN2uwAVgsa2dLrdWkkQ0+vydyABz3Ds7fzD0uPJE9SEnvv7qE/ZHHdhMalLSWbfbNRAdeuMbAGFbL2Jo5Q==","shasum":"fa781256cb23d1c394f68e1552c806893a8c8b34","tarball":"https://registry.npmjs.org/@adddog/eslint/-/eslint-0.0.13.tgz","fileCount":8,"unpackedSize":40130,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG24mkDZU9EkQ4ma7ef3wV0Z17DrBeGcEEtrrghcWJGXAiEAqOyggo5dNB1/1fsRLpEfkSZ4I8v7Wz+Oa76AnMtm8F0="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:20ecf145-a1c3-4765-8b27-ea54e1aa16b6"}},"directories":{},"maintainers":[{"name":"selie","email":"samradelie@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint_0.0.13_1771954930031_0.7345662720640886"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-13T18:27:56.316Z","modified":"2026-02-24T17:42:10.307Z","0.0.6":"2025-10-13T18:27:56.668Z","0.0.7":"2026-02-21T00:18:37.776Z","0.0.10":"2026-02-24T15:22:03.613Z","0.0.11":"2026-02-24T15:31:37.965Z","0.0.12":"2026-02-24T16:47:00.901Z","0.0.13":"2026-02-24T17:42:10.180Z"},"bugs":{"url":"https://github.com/samelie/eslint/issues"},"homepage":"https://github.com/samelie/eslint#readme","repository":{"type":"git","url":"git+https://github.com/samelie/eslint.git"},"description":"> Shared ESLint configuration for the monorepo, built on [@antfu/eslint-config](https://github.com/antfu/eslint-config)","maintainers":[{"name":"selie","email":"samradelie@gmail.com"}],"readme":"# @adddog/eslint\n\n> Shared ESLint configuration for the monorepo, built on [@antfu/eslint-config](https://github.com/antfu/eslint-config)\n\n![Overview](https://raw.githubusercontent.com/samradical/readme-images/refs/heads/main/overview-fs8.png)\n\nThis package provides a TypeScript-focused ESLint configuration that emphasizes:\n\n- **Type Safety**: Strict enforcement against `any` types\n- **Code Quality**: Sensible defaults with flexibility for real-world patterns\n- **Developer Experience**: 4-space indentation, double quotes, semicolons\n- **Modern Patterns**: Support for declaration merging, hoisting, and functional programming\n\n## Installation\n\n### From npm\n\n```bash\nnpm install --save-dev @adddog/eslint\n# or\npnpm add -D @adddog/eslint\n# or\nyarn add -D @adddog/eslint\n```\n\nThen add to your `package.json`:\n\n```json\n{\n  \"devDependencies\": {\n    \"@adddog/eslint\": \"^0.0.1\"\n  }\n}\n```\n\n### From GitHub\n\nInstall directly from the GitHub repository:\n\n```bash\nnpm install --save-dev github:samelie/eslint\n# or\npnpm add -D github:samelie/eslint\n# or\nyarn add -D github:samelie/eslint\n```\n\nOr specify a specific tag/commit:\n\n```bash\nnpm install --save-dev github:samelie/eslint#v0.0.1\n```\n\n### In Monorepo (Workspace)\n\nFor internal monorepo use with workspace protocol:\n\n```json\n{\n  \"devDependencies\": {\n    \"@adddog/eslint\": \"workspace:*\"\n  }\n}\n```\n\n### Peer Dependencies\n\nThis package requires the following peer dependencies:\n\n```json\n{\n  \"eslint\": \"^9.37.0\",\n  \"typescript\": \"^5.9.3\"\n}\n```\n\nInstall them if not already present:\n\n```bash\npnpm add -D eslint typescript\n```\n\n## Usage\n\n### Basic Setup\n\nCreate an `eslint.config.mjs` in your package:\n\n```js\nimport radEslint from \"@adddog/eslint\";\n\nexport default radEslint();\n```\n\n### With Custom Ignores\n\n```js\nimport radEslint from \"@adddog/eslint\";\n\nexport default radEslint({\n  ignores: [\"**/generated/**\", \"**/fixtures/**\"]\n});\n```\n\n### With Additional Rules\n\n```js\nimport radEslint from \"@adddog/eslint\";\n\nexport default radEslint(\n  {\n    // Base options\n    typescript: true,\n  },\n  // Additional config objects\n  {\n    rules: {\n      \"no-console\": \"error\",\n    },\n  }\n);\n```\n\n## Configuration Philosophy\n\n### What's Different from antfu's Defaults?\n\n#### Stylistic Preferences\n- **Indentation**: 4 spaces (default: 2)\n- **Quotes**: Double quotes (default: single)\n- **Semicolons**: Required (default: none)\n- **Arrow Parens**: As needed (default: varies)\n- **Brace Style**: 1TBS with single-line exception\n\n#### Type Safety (Stricter)\n- `ts/no-explicit-any`: **error** (default: off) - No `any` allowed\n- `ts/unified-signatures`: **error** (default: off) - Combine overloads\n\n#### Flexibility (More Permissive)\n- `antfu/curly`: **off** - Allow single-line if statements\n- `antfu/top-level-function`: **off** - Allow arrow functions at top level\n- `ts/consistent-type-definitions`: **off** - Allow both `type` and `interface`\n- `ts/no-redeclare`: **off** - Allow declaration merging\n- `ts/no-use-before-define`: **off** - Allow hoisting\n\n### Custom Plugins\n\n1. **@adddog/eslint-plugin-rules**\n   - `rad/no-incorrect-pkg-imports`: Enforces correct package imports\n\n2. **eslint-plugin-no-barrel-files**\n   - Prevents barrel file patterns (index re-exports)\n\n## Key Rules Reference\n\n### Enforced for Type Safety\n\n```ts\n// ❌ Bad\nconst data: any = fetchData();\n\n// ✅ Good\nconst data: unknown = fetchData();\nconst validated = DataSchema.parse(data);\n```\n\n### Unused Variables Pattern\n\nUse underscore prefix for intentionally unused variables:\n\n```ts\n// ✅ Good\nconst [_first, second] = array;\nconst { removed: _removed, ...rest } = object;\n\nfunction handler(_unusedParam: string, used: number) {\n  return used * 2;\n}\n\ntry {\n  // ...\n} catch (_error) {\n  // Error intentionally ignored\n}\n```\n\n### Declaration Merging Allowed\n\n```ts\n// ✅ Allowed\ninterface User {\n  name: string;\n}\n\nnamespace User {\n  export function create(name: string): User {\n    return { name };\n  }\n}\n```\n\n### Flexible Function Styles\n\n```ts\n// ✅ All allowed at top level\nexport function declarationStyle() {}\n\nexport const arrowStyle = () => {};\n\nexport const namedCallback = array.map(function process(item) {\n  // Named for better stack traces\n  return item * 2;\n});\n```\n\n## Architecture Decisions\n\n### Why These Overrides?\n\n**`ts/no-explicit-any`: error**\n- Prevents type safety holes\n- Forces explicit typing with `unknown`\n- Aligns with TypeScript's strict mode philosophy\n\n**`antfu/top-level-function`: off**\n- Modern codebases often prefer const exports\n- Tree-shaking works well with arrow functions\n- Consistency with internal module patterns\n\n**`ts/no-redeclare`: off**\n- TypeScript's declaration merging is powerful\n- Needed for namespace + interface patterns\n- Type-safe when used correctly\n\n**`ts/no-use-before-define`: off**\n- Functions can be hoisted for better organization\n- TypeScript catches actual usage errors\n- Allows grouping related functions naturally\n\n### Disabled Stylistic Rules\n\nThese are turned off for pragmatic reasons:\n\n- `antfu/consistent-list-newline`: Can be too strict with large objects\n- `style/operator-linebreak`: Allows flexible multi-line expressions\n- `accessor-pairs`: Getters without setters are valid patterns\n\n## Type-Aware Linting\n\nTo enable advanced type-aware rules (requires project setup):\n\n```js\nimport radEslint from \"@adddog/eslint\";\n\nexport default radEslint({\n  typescript: {\n    tsconfigPath: \"./tsconfig.json\",\n  },\n});\n```\n\nThis enables rules like:\n- `ts/await-thenable` - Only await promises\n- `ts/no-floating-promises` - Require promise handling\n- `ts/no-unnecessary-type-assertion` - Remove redundant assertions\n- `ts/strict-boolean-expressions` - Strict conditionals\n\nSee the [config source](./src/eslint.config.ts) for a complete list of available type-aware rules.\n\n## Development\n\n### Scripts\n\n| Script      | Description                          |\n|-------------|--------------------------------------|\n| `build`     | Build the package with unbuild       |\n| `lint`      | Lint the package source              |\n| `lint:fix`  | Auto-fix linting issues              |\n| `types`     | Type-check the package               |\n| `knip`      | Check for unused dependencies        |\n\n### Testing Changes\n\nAfter making changes to the config:\n\n1. **Build the package**:\n   ```bash\n   pnpm build\n   ```\n\n2. **Test in a consuming package**:\n   ```bash\n   cd ../../park-app  # or any app\n   pnpm lint\n   ```\n\n3. **Verify no regressions**:\n   ```bash\n   pnpm lint  # From monorepo root\n   ```\n\n### Publishing to npm\n\nThe package includes `prepublishOnly` hooks that automatically run linting, type-checking, and building before publishing:\n\n1. **Update version in package.json**:\n   ```bash\n   npm version patch  # or minor, major\n   ```\n\n2. **Publish to npm**:\n   ```bash\n   npm publish\n   ```\n\nThe `prepublishOnly` script will automatically:\n- Run `pnpm lint` - Ensure code quality\n- Run `pnpm types` - Verify TypeScript types\n- Run `pnpm build` - Build distribution files\n\nIf any step fails, the publish will be aborted.\n\n## Extending the Config\n\n### Adding New Rules\n\nEdit `src/eslint.config.ts`:\n\n```ts\n.override(\"antfu/typescript/rules\", {\n  rules: {\n    // Add your rule here\n    \"ts/explicit-function-return-type\": [\"error\", {\n      allowExpressions: true,\n    }],\n  },\n})\n```\n\n### Per-Package Overrides\n\nIn consuming packages, override specific rules:\n\n```js\nimport radEslint from \"@adddog/eslint\";\n\nexport default radEslint(\n  {},\n  {\n    files: [\"**/*.test.ts\"],\n    rules: {\n      \"ts/no-explicit-any\": \"off\", // Allow any in tests\n    },\n  }\n);\n```\n\n## Resources\n\n- [antfu/eslint-config](https://github.com/antfu/eslint-config) - Base configuration\n- [ESLint Flat Config](https://eslint.org/docs/latest/use/configure/configuration-files-new) - Modern config format\n- [@stylistic/eslint-plugin](https://eslint.style/) - Stylistic rules\n- [typescript-eslint](https://typescript-eslint.io/) - TypeScript rules\n\n## FAQ\n\n### Why not use Prettier?\n\nThis config uses `@stylistic/eslint-plugin` for formatting, which:\n- Integrates seamlessly with ESLint\n- Allows gradual adoption of formatting rules\n- Provides better TypeScript-specific formatting\n\n### Can I use this outside the monorepo?\n\nYes! This package can be installed from npm or directly from GitHub:\n\n```bash\n# From npm (when published)\npnpm add -D @adddog/eslint\n\n# From GitHub\npnpm add -D github:samelie/eslint\n```\n\nSee the [Installation](#installation) section for more details.\n\n### How do I disable a rule temporarily?\n\n```ts\n// eslint-disable-next-line ts/no-explicit-any\nconst legacy: any = oldApi();\n```\n\nOr for a whole file:\n\n```ts\n/* eslint-disable ts/no-explicit-any */\n// File with many legacy patterns\n```\n\n### Why are barrel files forbidden?\n\nBarrel files (index re-exports) can:\n- Harm tree-shaking\n- Create circular dependencies\n- Slow down builds\n- Make imports ambiguous\n\nPrefer direct imports: `import { foo } from \"./foo\"` instead of `import { foo } from \"./index\"`\n\n## License\n\nSee [LICENSE](./LICENSE) for details.\n","readmeFilename":"README.md"}