{"_id":"@bdrk/eslint-config","_rev":"5-48e52c9015d5d0ad47d19c43307e86e6","name":"@bdrk/eslint-config","dist-tags":{"latest":"3.0.0"},"versions":{"1.0.0":{"name":"@bdrk/eslint-config","version":"1.0.0","author":{"url":"https://bdrk.dev/","name":"Bedrock Project","email":"info@bdrk.dev"},"license":"Apache-2.0","_id":"@bdrk/eslint-config@1.0.0","maintainers":[{"name":"fcg-ci-bot","email":"ci@fritz.consulting"},{"name":"lukiffer","email":"lukefritz+npm@gmail.com"}],"homepage":"https://github.com/fcgroup/bdrk-eslint-config#readme","bugs":{"url":"https://github.com/fcgroup/bdrk-eslint-config/issues"},"dist":{"shasum":"1bebc24e7546f72f787afd13bc636a53e6efaae5","tarball":"https://registry.npmjs.org/@bdrk/eslint-config/-/eslint-config-1.0.0.tgz","fileCount":6,"integrity":"sha512-bRH5EywV1UvsgjrI3h40KprG2W7bZnzIc0YNF2gsCQYkBFGu3WJI2QPF65fzDJfiQpu2UPamrQX96xPJVCUjyg==","signatures":[{"sig":"MEUCIQC2kiO8KZXgdpgiNkzdvWNNyzRtu6HF0FIBsqWNeqc1ewIgPiNporhuZhgXwudRM/0h3nmUOqJTxG4NM2zq3Kpw+5c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26703},"main":"index.js","gitHead":"4bf1c4f3aa9ad3924dbfdc7e748a1a0202e85154","scripts":{"lint":"eslint -c ./index.js ./ --ext .js"},"_npmUser":{"name":"fcg-ci-bot","email":"ci@fritz.consulting"},"repository":{"url":"git+ssh://git@github.com/fcgroup/bdrk-eslint-config.git","type":"git"},"_npmVersion":"10.5.2","description":"ESLint shareable configuration for Bedrock projects.","directories":{},"_nodeVersion":"20.12.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.49.0","eslint-plugin-import":"^2.28.1","@bdrk/semantic-release-config":"^3.0.5","eslint-plugin-eslint-comments":"^3.2.0"},"peerDependencies":{"eslint":">=8","eslint-plugin-import":">=2","@typescript-eslint/parser":">=6","eslint-plugin-eslint-comments":">=3","@typescript-eslint/eslint-plugin":">=6"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.0.0_1713170706176_0.25369785935865474","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@bdrk/eslint-config","version":"1.0.1","author":{"url":"https://bdrk.dev/","name":"Bedrock Project","email":"info@bdrk.dev"},"license":"Apache-2.0","_id":"@bdrk/eslint-config@1.0.1","maintainers":[{"name":"lukiffer","email":"lukefritz+npm@gmail.com"},{"name":"fcg-ci-bot","email":"ci@fritz.consulting"}],"homepage":"https://github.com/fcgroup/bdrk-eslint-config#readme","bugs":{"url":"https://github.com/fcgroup/bdrk-eslint-config/issues"},"dist":{"shasum":"282f760b25a418641934f8807419da21c142364e","tarball":"https://registry.npmjs.org/@bdrk/eslint-config/-/eslint-config-1.0.1.tgz","fileCount":5,"integrity":"sha512-hlHmxW+6HNbnVoe+cVw1m7aSdRpGBARKLEzMT8b/0l1P0Nughb1xuZc5ZleNaaQJSgJRMjnrzcBDRGWqY4XNag==","signatures":[{"sig":"MEUCIAS3JGWzmhkMdQNSg3lY8+3Vmn/VNP4SMe1Ld3CAUfazAiEA6QhMVo6tYs3LvqwanUuJEdn+Cl+WINe+Y1VHk2XACrI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bdrk%2feslint-config@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":31581},"main":"index.js","engines":{"node":">=18"},"exports":{".":"./index.js","./typescript":"./typescript/index.js"},"gitHead":"b595e7aa3865570d1f53449772c6c7acf24c7449","scripts":{"lint":"eslint ."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c5f36a1-81c1-4a36-bf61-daab6593eb3f"}},"repository":{"url":"git+ssh://git@github.com/fcgroup/bdrk-eslint-config.git","type":"git"},"_npmVersion":"12.0.1","description":"ESLint shareable configuration for Bedrock projects.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"globals":"^17.7.0","@eslint/js":"^10.0.1","typescript-eslint":"^8.64.0","eslint-plugin-import-x":"^4.17.1","@stylistic/eslint-plugin":"^5.10.0","@eslint-community/eslint-plugin-eslint-comments":"^4.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.7.0","typescript":"~6.0.3","@bdrk/semantic-release-config":"^3.0.5"},"peerDependencies":{"eslint":">=9","typescript":">=4.8.4"},"peerDependenciesMeta":{"typescript":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_1.0.1_1784047633556_0.3947666070814626","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@bdrk/eslint-config","version":"2.0.0","author":{"url":"https://bdrk.dev/","name":"Bedrock Project","email":"info@bdrk.dev"},"license":"Apache-2.0","_id":"@bdrk/eslint-config@2.0.0","maintainers":[{"name":"lukiffer","email":"lukefritz+npm@gmail.com"},{"name":"fcg-ci-bot","email":"ci@fritz.consulting"}],"homepage":"https://github.com/fcgroup/bdrk-eslint-config#readme","bugs":{"url":"https://github.com/fcgroup/bdrk-eslint-config/issues"},"dist":{"shasum":"f0892cbe106a6b89d0259a673bf08dc344074500","tarball":"https://registry.npmjs.org/@bdrk/eslint-config/-/eslint-config-2.0.0.tgz","fileCount":5,"integrity":"sha512-cZCB8Gv2D2tDv+qcU8nVkbafPofanB/PlZw/7u1gTJjGCNT2UT2KrzLtoLqa6cJo9T0fYSlBpkiw2a1ySYNrMg==","signatures":[{"sig":"MEQCIH3+YUs+uXT3iOtXV4aw7/NTm3HzivmSjSJC4l45V6AxAiAp8xRCPkuc13Kv7ybshPncBZj4siTw02KpyaHImIi29g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bdrk%2feslint-config@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":31581},"main":"index.js","engines":{"node":">=18"},"exports":{".":"./index.js","./typescript":"./typescript/index.js"},"gitHead":"d21665ecb25e82ee6f50369c82b70f3c1ff7bedf","scripts":{"lint":"eslint ."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c5f36a1-81c1-4a36-bf61-daab6593eb3f"}},"repository":{"url":"git+ssh://git@github.com/fcgroup/bdrk-eslint-config.git","type":"git"},"_npmVersion":"12.0.1","description":"ESLint shareable configuration for Bedrock projects.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"globals":"^17.7.0","@eslint/js":"^10.0.1","typescript-eslint":"^8.64.0","eslint-plugin-import-x":"^4.17.1","@stylistic/eslint-plugin":"^5.10.0","@eslint-community/eslint-plugin-eslint-comments":"^4.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.7.0","typescript":"~6.0.3","@bdrk/semantic-release-config":"^3.0.5"},"peerDependencies":{"eslint":">=9","typescript":">=4.8.4"},"peerDependenciesMeta":{"typescript":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.0.0_1784055583420_0.22999569261147412","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@bdrk/eslint-config","version":"2.0.1","author":{"url":"https://bdrk.dev/","name":"Bedrock Project","email":"info@bdrk.dev"},"license":"Apache-2.0","_id":"@bdrk/eslint-config@2.0.1","maintainers":[{"name":"lukiffer","email":"lukefritz+npm@gmail.com"},{"name":"fcg-ci-bot","email":"ci@fritz.consulting"}],"homepage":"https://github.com/fcgroup/bdrk-eslint-config#readme","bugs":{"url":"https://github.com/fcgroup/bdrk-eslint-config/issues"},"dist":{"shasum":"ebcc822493abeb1abac48423593a09ce3558aa25","tarball":"https://registry.npmjs.org/@bdrk/eslint-config/-/eslint-config-2.0.1.tgz","fileCount":5,"integrity":"sha512-zXjs9PM7sxXJa4m4+wiaiPLUg/7JGTGcZG12N8wi9KVlqD8+mT7mzWzns54gDcTA5itUp46NLTd0oOgbRrGCCA==","signatures":[{"sig":"MEYCIQCllCL0kxKwC697zfSCcbWU0EYGZ2A+Qe3flQCW3bwVswIhAMoBuEGwc6IN/E31G3y5mtdHalju0kNm6wmEtKXbEvAQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bdrk%2feslint-config@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":31639},"main":"index.js","engines":{"node":">=18"},"exports":{".":"./index.js","./typescript":"./typescript/index.js"},"gitHead":"28d6227728e0ed4720dad427f276869ebbe936bb","scripts":{"lint":"eslint ."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c5f36a1-81c1-4a36-bf61-daab6593eb3f"}},"repository":{"url":"git+ssh://git@github.com/fcgroup/bdrk-eslint-config.git","type":"git"},"_npmVersion":"12.0.1","description":"ESLint shareable configuration for Bedrock projects.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"unrs-resolver@1.12.2":true},"dependencies":{"globals":"^17.7.0","@eslint/js":"^10.0.1","typescript-eslint":"^8.64.0","eslint-plugin-import-x":"^4.17.1","@stylistic/eslint-plugin":"^5.10.0","@eslint-community/eslint-plugin-eslint-comments":"^4.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.7.0","typescript":"~6.0.3","@bdrk/semantic-release-config":"^4.0.0"},"peerDependencies":{"eslint":">=9","typescript":">=4.8.4"},"peerDependenciesMeta":{"typescript":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_2.0.1_1784056801658_0.07909774129601144","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@bdrk/eslint-config","version":"3.0.0","description":"ESLint shareable configuration for Bedrock projects.","main":"index.js","exports":{".":"./index.js","./node":"./node/index.js","./react":"./react/index.js","./angular":"./angular/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/fcgroup/bdrk-eslint-config.git"},"author":{"name":"Bedrock Project","email":"info@bdrk.dev","url":"https://bdrk.dev/"},"publishConfig":{"access":"public"},"license":"Apache-2.0","engines":{"node":">=18"},"scripts":{"lint":"eslint .","test":"node --test test/*.test.js"},"dependencies":{"@eslint-community/eslint-plugin-eslint-comments":"^4.7.2","@eslint/js":"^10.0.1","@stylistic/eslint-plugin":"^5.10.0","eslint-plugin-import-x":"^4.17.1","globals":"^17.7.0","typescript-eslint":"^8.64.0"},"devDependencies":{"@bdrk/semantic-release-config":"^4.0.0","@types/react":"19.2.17","eslint":"^10.7.0","typescript":"~6.0.3"},"peerDependencies":{"eslint":">=9","typescript":">=4.8.4"},"peerDependenciesMeta":{"typescript":{"optional":true}},"allowScripts":{"unrs-resolver@1.12.2":true},"gitHead":"7b8ac43430e743d928c7d421f1fc6db209e89e0b","_id":"@bdrk/eslint-config@3.0.0","bugs":{"url":"https://github.com/fcgroup/bdrk-eslint-config/issues"},"homepage":"https://github.com/fcgroup/bdrk-eslint-config#readme","_nodeVersion":"24.18.0","_npmVersion":"12.0.1","dist":{"integrity":"sha512-WxvaJOrKTMUcqV32EHA4QK9ztZggIh94GOdmiTn08/LCz7g7bIFxE+ZBYCLrjmHVN+/yOKClwszvC4aagBVaGg==","shasum":"a146f338f9662db8cf5ecdf555306922b2621a83","tarball":"https://registry.npmjs.org/@bdrk/eslint-config/-/eslint-config-3.0.0.tgz","fileCount":8,"unpackedSize":39859,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bdrk%2feslint-config@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDBcbXtJNh0SxLsxj2Labz0brfVjAjyaLHw8wD5qQ5/xwIgRBCjCI3Wav0Zy1yH0vBLPH3vs78j3dW99U74OYrU26s="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9c5f36a1-81c1-4a36-bf61-daab6593eb3f"}},"directories":{},"maintainers":[{"name":"lukiffer","email":"lukefritz+npm@gmail.com"},{"name":"fcg-ci-bot","email":"ci@fritz.consulting"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-config_3.0.0_1784916824226_0.8713090454387145"},"_hasShrinkwrap":false}},"time":{"created":"2024-04-15T08:45:06.082Z","modified":"2026-07-24T18:13:44.730Z","1.0.0":"2024-04-15T08:45:06.334Z","1.0.1":"2026-07-14T16:47:13.686Z","2.0.0":"2026-07-14T18:59:43.552Z","2.0.1":"2026-07-14T19:20:01.833Z","3.0.0":"2026-07-24T18:13:44.391Z"},"bugs":{"url":"https://github.com/fcgroup/bdrk-eslint-config/issues"},"author":{"name":"Bedrock Project","email":"info@bdrk.dev","url":"https://bdrk.dev/"},"license":"Apache-2.0","homepage":"https://github.com/fcgroup/bdrk-eslint-config#readme","repository":{"type":"git","url":"git+ssh://git@github.com/fcgroup/bdrk-eslint-config.git"},"description":"ESLint shareable configuration for Bedrock projects.","maintainers":[{"name":"lukiffer","email":"lukefritz+npm@gmail.com"},{"name":"fcg-ci-bot","email":"ci@fritz.consulting"}],"readme":"# ESLint Shareable Configs\n\nThis repository contains the standard ESLint shareable configuration for Bedrock projects.\n\nIt ships as [flat config](https://eslint.org/docs/latest/use/configure/configuration-files)\nand targets **ESLint 9+** (developed and tested against ESLint 10).\n\nThere is one entrypoint per runtime — Node.js, React, and Angular — plus a plain-JS root.\nAll three runtime entrypoints share the same rules, so **TypeScript that does not import\na framework lints identically under all of them**.\n\n## Choosing an entrypoint\n\n| Entrypoint | For |\n|---|---|\n| `@bdrk/eslint-config` | Plain JavaScript. Rules only — you supply the environment |\n| `@bdrk/eslint-config/node` | TypeScript on Node.js |\n| `@bdrk/eslint-config/react` | TypeScript + JSX in the browser |\n| `@bdrk/eslint-config/angular` | TypeScript in Angular |\n\nInstall the package:\n\n```bash\nnpm install --save-dev @bdrk/eslint-config\n```\n\nEach entrypoint exports an array of flat config objects. Spread it into your own config\nand add project-specific overrides afterwards.\n\n**Node.js:**\n\n```js\n// eslint.config.js\nconst bdrk = require('@bdrk/eslint-config/node');\n\nmodule.exports = [\n  ...bdrk,\n  {\n    // project-specific overrides\n  },\n];\n```\n\n`/react` and `/angular` are used the same way. Using ES modules? Import the default\nexport instead:\n\n```js\n// eslint.config.mjs\nimport bdrk from '@bdrk/eslint-config/react';\n\nexport default [\n  ...bdrk,\n  // project-specific overrides\n];\n```\n\n**Plain JavaScript** uses the root entrypoint. It declares no globals, so add the ones\nyour code actually runs with:\n\n```js\n// eslint.config.js\nconst globals = require('globals');\nconst bdrk = require('@bdrk/eslint-config');\n\nmodule.exports = [\n  ...bdrk,\n  {\n    languageOptions: {\n      globals: { ...globals.node },\n    },\n  },\n];\n```\n\nAnything defined in this configuration can be overridden by adding a later config object\nwith the rules you want to change.\n\n## What's included\n\n- **Core:** `@eslint/js` recommended rules plus Bedrock's conventions, formatting via\n  [`@stylistic/eslint-plugin`](https://eslint.style), import hygiene via\n  [`eslint-plugin-import-x`](https://github.com/un-ts/eslint-plugin-import-x), and\n  directive-comment hygiene via\n  [`@eslint-community/eslint-plugin-eslint-comments`](https://github.com/eslint-community/eslint-plugin-eslint-comments).\n- **TypeScript**, in every runtime entrypoint:\n  [`typescript-eslint`](https://typescript-eslint.io) recommended + type-checked rules\n  and Bedrock's TypeScript conventions. Typed rules are scoped to\n  `.ts`/`.tsx`/`.mts`/`.cts`, so plain `.js` files such as `eslint.config.js` are not\n  subject to them.\n- **Runtime layers:** globals and parser options only — Node globals for `/node`, browser\n  globals for `/react` and `/angular`, JSX parsing for `.jsx`/`.tsx`, and an\n  `import-x/first` exemption for Angular's `*.module.ts`.\n\nThe TypeScript config uses typescript-eslint's\n[`projectService`](https://typescript-eslint.io/getting-started/typed-linting), so it\nauto-detects the nearest `tsconfig.json` — no `parserOptions.project` override required\nin most projects.\n\n### Framework plugins are not included\n\nThis package deliberately ships **no** framework plugins. Add them in your own config if\nyou want them:\n\n- React — [`eslint-plugin-react`](https://github.com/jsx-eslint/eslint-plugin-react),\n  [`eslint-plugin-react-hooks`](https://www.npmjs.com/package/eslint-plugin-react-hooks),\n  [`eslint-plugin-jsx-a11y`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y)\n- Angular — [`angular-eslint`](https://github.com/angular-eslint/angular-eslint), which\n  also handles template linting\n\nThis keeps frontend plugins out of every Node service's dependency tree.\n\n## Contributing: the portability invariant\n\nThe point of this package is that code moves between runtimes without being rewritten.\nThat rests on one rule:\n\n> All rules live in `index.js` or `internal/typescript.js`. A runtime layer may only set\n> `languageOptions` (globals, parser options) and add `files`-scoped overrides for file\n> shapes that exist solely in that framework. **A runtime layer never sets a rule that\n> another layer sets differently.**\n\nIf a change appears to need a rule in `node/`, `react/`, or `angular/`, that is a signal\nthe rule belongs in the core with a different value — not a signal to add it to the\nlayer. The single sanctioned exception is Angular's `**/*.module.ts` override, which is\nsafe because no other runtime has a file matching that pattern.\n\n`npm test` enforces this: `test/fixtures/portable/portable.ts` is linted under all three\nruntime entrypoints and the three result sets must be **identical**, so a rule added to\none layer fails the build. `npm run lint` lints this package with its own root config.\n\n## Migrating from the previous major\n\n1. **`@bdrk/eslint-config/typescript` no longer exists.** Use `/node`, `/react`, or\n   `/angular`.\n2. **The root entrypoint no longer supplies Node globals.** Plain-JS projects add them as\n   shown above; TypeScript projects should move to a runtime entrypoint.\n3. **The `I` interface prefix is no longer enforced.** Existing `IFoo` names still lint\n   clean under `PascalCase`, so no rename is forced.\n\nThe rule changes only widen what is accepted — `func-style`,\n`import-x/no-default-export`, `new-cap` and the naming conventions all loosened — so the\nupgrade surface is essentially the entrypoint rename.\n\nOne thing to be aware of rather than surprised by: `explicit-function-return-type`\napplies to functions assigned to variables, so React components written as\n`const Foo = () => …` need a return-type annotation (`: ReactElement`). This is the\nexisting Bedrock convention, unchanged by this release, and it applies identically in\nevery runtime.\n","readmeFilename":"README.md"}