{"_id":"@and3rn3t/eslint-config","_rev":"2-d9c91b7c847d37e344be3a878fde6b78","name":"@and3rn3t/eslint-config","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@and3rn3t/eslint-config","version":"0.1.0","keywords":["eslint","eslintconfig","eslint-config","flat-config","react","typescript"],"author":{"name":"Matthew Anderson"},"license":"MIT","_id":"@and3rn3t/eslint-config@0.1.0","maintainers":[{"name":"and3rn3t_mja","email":"and3rn3t@icloud.com"}],"homepage":"https://github.com/and3rn3t/eslint-config#readme","bugs":{"url":"https://github.com/and3rn3t/eslint-config/issues"},"dist":{"shasum":"dd1b9f1554443e5be0d5ea4827f17521de0cfe9e","tarball":"https://registry.npmjs.org/@and3rn3t/eslint-config/-/eslint-config-0.1.0.tgz","fileCount":4,"integrity":"sha512-AR4/DUZICr8/7H/2hR9m36+bm27fueZv8MDGvyAwbcx+Gc/wRYU/7g/E1szcPquDn7Cl2k+hPyk9fTKbLdXucw==","signatures":[{"sig":"MEUCIQDLu/wBIHtw3pSjlBxBc+CsX49vNxfCVoW73hb7WRGnWwIgS9g/KNXb0heKNyv8/sMIC4fVIvrCvmDC4rSFlVn5riM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8142},"main":"index.js","type":"module","engines":{"node":">=24"},"exports":{".":"./index.js"},"gitHead":"151631d82e09458c88ef58104f14ab7994a42675","scripts":{"lint":"eslint index.js","prepare":"husky 2>/dev/null || true"},"_npmUser":{"name":"and3rn3t_mja","email":"and3rn3t@icloud.com"},"repository":{"url":"git+https://github.com/and3rn3t/eslint-config.git","type":"git"},"_npmVersion":"11.6.2","description":"Shared ESLint 9 flat config for and3rn3t React + TypeScript repos (ESLint 10 pending upstream plugin support).","directories":{},"_nodeVersion":"24.13.0","dependencies":{"globals":"^16.0.0","@eslint/js":"^9.21.0","typescript-eslint":"^8.38.0","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.26"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":"^9.28.0","typescript":">=5.7"},"peerDependenciesMeta":{"typescript":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.1.0_1783107870939_0.4731174034864043","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@and3rn3t/eslint-config","version":"0.2.0","description":"Shared ESLint 9 flat config for and3rn3t React + TypeScript repos (ESLint 10 pending upstream plugin support).","type":"module","license":"MIT","author":{"name":"Matthew Anderson"},"homepage":"https://github.com/and3rn3t/eslint-config#readme","repository":{"type":"git","url":"git+https://github.com/and3rn3t/eslint-config.git"},"bugs":{"url":"https://github.com/and3rn3t/eslint-config/issues"},"keywords":["eslint","eslintconfig","eslint-config","flat-config","react","typescript"],"main":"index.js","exports":{".":"./index.js"},"engines":{"node":">=24"},"scripts":{"lint":"eslint index.js","prepare":"husky 2>/dev/null || true"},"peerDependencies":{"eslint":"^9.28.0","typescript":">=5.7"},"peerDependenciesMeta":{"typescript":{"optional":true}},"dependencies":{"@eslint/js":"^9.21.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.26","globals":"^16.0.0","typescript-eslint":"^8.38.0"},"publishConfig":{"access":"public"},"gitHead":"151631d82e09458c88ef58104f14ab7994a42675","_id":"@and3rn3t/eslint-config@0.2.0","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-EpWSzmZUEjjftoWYNer4EbwpErcKGJOqvlRSsu1vFn4zqBZM5mi6qs87VCU4Pn8/FyBdKzqLQWjQzz7bsY/Ung==","shasum":"9bcdb10bc5a2ca40e7d8c6304950ff00de0940f3","tarball":"https://registry.npmjs.org/@and3rn3t/eslint-config/-/eslint-config-0.2.0.tgz","fileCount":4,"unpackedSize":8785,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDwp81v7OXLeN8gvKL5Hkx9GUu+g2rMDQLMM5GzAzzZwAiBL/+UX5raRjMGucREf0urfixaM9jl4Ci9hmgyyMaaHPA=="}]},"_npmUser":{"name":"and3rn3t_mja","email":"and3rn3t@icloud.com"},"directories":{},"maintainers":[{"name":"and3rn3t_mja","email":"and3rn3t@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-config_0.2.0_1783111310055_0.5721665804272433"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-03T19:44:30.748Z","modified":"2026-07-03T20:41:50.303Z","0.1.0":"2026-07-03T19:44:31.056Z","0.2.0":"2026-07-03T20:41:50.192Z"},"bugs":{"url":"https://github.com/and3rn3t/eslint-config/issues"},"author":{"name":"Matthew Anderson"},"license":"MIT","homepage":"https://github.com/and3rn3t/eslint-config#readme","keywords":["eslint","eslintconfig","eslint-config","flat-config","react","typescript"],"repository":{"type":"git","url":"git+https://github.com/and3rn3t/eslint-config.git"},"description":"Shared ESLint 9 flat config for and3rn3t React + TypeScript repos (ESLint 10 pending upstream plugin support).","maintainers":[{"name":"and3rn3t_mja","email":"and3rn3t@icloud.com"}],"readme":"# @and3rn3t/eslint-config\n\nShared **ESLint 9** flat config for and3rn3t React + TypeScript repos. Adopting\nthis package versions the lint rules in one place instead of copy-pasting\n`eslint.config.js` into every repo.\n\n> **Why ESLint 9, not 10?** `eslint-plugin-react` doesn't support ESLint 10 yet\n> (its peer range caps at eslint 9, and it errors under 10). This package stays on\n> the eslint 9 line until that lands upstream — then a single dep bump here moves\n> every consumer to 10 at once.\n\n## Install\n\n```sh\n# in a consuming repo\nnpm i -D @and3rn3t/eslint-config eslint@^9\n# (pnpm/yarn equivalents work too)\n```\n\nThe React plugins, `@eslint/js`, `globals`, and `typescript-eslint` come in as\ndependencies of this package, so you don't list them separately.\n\n## Use\n\nReplace the repo's `eslint.config.js` with:\n\n```js\nimport and3rn3t from '@and3rn3t/eslint-config'\nexport default and3rn3t\n```\n\nExtend when a repo needs extra rules:\n\n```js\nimport and3rn3t from '@and3rn3t/eslint-config'\n\nexport default [\n  ...and3rn3t,\n  { rules: { 'no-console': 'warn' } },\n]\n```\n\n## Local (unpublished) linking via `file:`\n\nUntil this package is published to a registry, consumers reference it as\n`\"@and3rn3t/eslint-config\": \"file:../eslint-config\"`. npm symlinks it, and because\nof that symlink Node resolves the config's own imports (`@eslint/js`, the plugins)\nfrom **this** folder — so run install here once so it has its own `node_modules`:\n\n```sh\ncd eslint-config && npm install\n```\n\nThat pulls in the plugins plus `eslint`/`typescript` (transitive peers). Then the\nconsumer's `npm run lint` resolves everything. **Publishing to a registry removes\nthis step** — registry installs are copied (not symlinked) and resolve against the\nconsumer's `node_modules` normally.\n\n## What's in it\n\n- `@eslint/js` recommended + `typescript-eslint` recommended\n- `react-hooks` + `react-refresh` (recommended), applied to `**/*.{ts,tsx}`\n- `react-refresh/only-export-components` warn; `no-unused-vars` warn with the `^_` ignore pattern\n- Ignores `dist`, `build`, `coverage`, `node_modules`\n\nThis is the **common base** across the React/TS repos. It intentionally omits\n`eslint-plugin-react` (only flipper used it). Repos that need extra rules, plugins\n(e.g. `jsx-a11y`), or file contexts extend it: `export default [...and3rn3t, …]`.\n\n## Publishing (public npm)\n\nConfigured for the public npm registry (`publishConfig.access: public`).\n`main`/`exports`/`files` ship only `index.js`. Provenance is added by the CI\nworkflow (it can't be generated from a local publish).\n\n**First publish (manual, one time):**\n\n1. Create/sign in to an npmjs.com account and make sure the **`@and3rn3t` scope**\n   exists (create a free org named `and3rn3t` on npm, or use your username if it's\n   `and3rn3t`).\n2. Create the GitHub repo `and3rn3t/eslint-config` and push this folder to it\n   (the `repository` field + provenance require the repo to exist), including the\n   committed `package-lock.json`.\n3. From this folder: `npm login`, then `npm publish`. (`--access public` is already\n   in `publishConfig`, so a plain `npm publish` works.)\n\n**Ongoing (automated):** `.github/workflows/publish.yml` publishes to npm on every\nGitHub Release. Add an npm **automation token** as the repo secret `NPM_TOKEN`\nonce; after that, publishing = bump the version, push a `vX.Y.Z` tag, and cut a\nRelease. Renovate then opens bump PRs in consumer repos.\n\n**After the first publish**, switch each consumer from the local link to the\nregistry version: replace `\"@and3rn3t/eslint-config\": \"file:../eslint-config\"` with\n`\"@and3rn3t/eslint-config\": \"^0.1.0\"` and `npm install`.\n\n## Rollout order\n\nAdopted so far: **flipper, huggingface, jonah** (eslint 9 / react-hooks 5 — their\nbase matches this config exactly, so only their extra rules are layered on).\n\nDeliberately **not** adopted:\n\n- **homehub** — already on **eslint 10** (react-hooks 7). It's ahead of this\n  config; fold it in when this package moves to eslint 10.\n- **guess** — react-hooks 7 + `jsx-a11y` + multi-context Worker/script/ui overrides.\n- **health** — type-aware (`projectService`, `no-floating-promises`) + `jsx-a11y`;\n  its config is the sophisticated one others could learn from.\n- **and3rn3t** — plain JS + Cloudflare Worker portfolio (no React/TS); uses\n  `eslint-config-prettier`. This React/TS config doesn't apply.\n\n**Next step to unify further:** when moving to eslint 10, bump this package's deps\n(`@eslint/js`→10, `react-hooks`→7, `globals`→17) + peer, publish, and homehub +\nthe eslint-9 adopters all land on 10 together.\n","readmeFilename":"README.md"}