Skip to content

Web ESLint is stuck on the eslintrc compat shim, blocking eslint 10 and Next 16 #81

Description

@yashranaway

Two Dependabot bumps failed in the same place, for the same reason.

apps/web/eslint.config.mjs wraps the legacy eslintrc configs through FlatCompat:

const compat = new FlatCompat({ baseDirectory: ... });
const config = [
  ...compat.config({ extends: ["next/core-web-vitals", "next/typescript"] }),
  ...
];

That shim is what breaks:

Bump Failure
eslint 9 → 10 (#76) @rushstack/eslint-patch, pulled in by the legacy config path, throws on load
next group → 16 (#74) @eslint/eslintrc ConfigValidator.formatErrors: TypeError: Converting circular structure to JSON

eslint-config-next@15.5.20 ships no flat-config entry point — only index.js, core-web-vitals.js, typescript.js, and no exports map. Native flat config arrives with eslint-config-next 16, so the migration and the Next bump have to land together; neither bump can succeed alone.

Work

  • Bump next and eslint-config-next to 16, and eslint to 10.
  • Replace FlatCompat with eslint-config-next's native flat config, dropping the @eslint/eslintrc and @rushstack/eslint-patch dependencies.
  • Keep the current ignores (.next/**, next-env.d.ts).
  • Verify pnpm --filter @headless/web lint and next build — Next 16 is a framework major, so the build is the real check, not just lint.
  • Worth pairing with the dead-weight cleanup (F5 — Remove dead weight from the web bundle #51), since both touch the web dependency surface.

PRs #74 and #76 were closed in favour of this; left open they would only be rebased and re-fail.

Metadata

Metadata

Assignees

Labels

area:webapps/web marketing and docs sitepriority:mediumScheduled, not blockingtype:choreMaintenance and cleanup

Type

No type

Projects

Status
Done

Relationships

None yet

Development

No branches or pull requests

Issue actions