Files
agentic-dev/packages/eslint-config/AGENTS.md

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: no console, no debugger, strict @typescript-eslint config
  • next.js — Next.js-specific rules: "use client" boundaries, next/no-img-element
  • react-internal.js — React library rules: component display names, hook rules
  • boundaries.jseslint-plugin-boundaries config 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)

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 lint succeeds across all packages
  • ESLint should catch boundary violations: pnpm lint fails 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