2.1 KiB
2.1 KiB
AGENTS.md — eslint-config
Shared ESLint 9 flat configs (rules, plugins, parser settings) consumed by all packages via eslint.config.js.
What it owns
base.js— Core ESLint rules: noconsole, nodebugger, strict@typescript-eslintconfignext.js— Next.js-specific rules:"use client"boundaries,next/no-img-elementreact-internal.js— React library rules: component display names, hook rulesboundaries.js—eslint-plugin-boundariesconfig enforcing vertical feature architecture:- Features may only import
core-*and tooling packages - Core packages may only import other core packages (with composition exceptions for
core-cms,core-api) - No cross-feature imports
- No deep source path imports (only public subpath exports)
- Features may only import
How packages consume them
Each package creates eslint.config.js at its root:
// packages/blog/eslint.config.js
import baseConfig from "@repo/eslint-config/base";
import boundariesConfig from "@repo/eslint-config/boundaries";
export default [
...baseConfig,
...boundariesConfig,
{
files: ["src/**/*.tsx"],
rules: {
"react/display-name": "off",
},
},
];
Apps may add Next.js-specific rules:
// apps/web-next/eslint.config.js
import baseConfig from "@repo/eslint-config/base";
import nextConfig from "@repo/eslint-config/next";
import boundariesConfig from "@repo/eslint-config/boundaries";
export default [
...baseConfig,
...nextConfig,
...boundariesConfig,
];
Test conventions
- No unit tests (config validation via lint pass/fail in other packages)
- Verify at CI:
pnpm lintsucceeds across all packages - ESLint should catch boundary violations:
pnpm lintfails on feature→feature imports or deep imports
Structure
src/
base.js # Core TypeScript + ESLint config
next.js # Next.js additions
react-internal.js # React library rules
boundaries.js # Feature boundaries + composition rules
index.js # Re-exports all configs