Skip to content

feat!: migrate to ESLint 10, TypeScript 6.0, and new plugin ecosystem (v7.0.0)#1

Merged
shaunburdick merged 9 commits into
mainfrom
001-wave1-safe-updates
Jun 7, 2026
Merged

feat!: migrate to ESLint 10, TypeScript 6.0, and new plugin ecosystem (v7.0.0)#1
shaunburdick merged 9 commits into
mainfrom
001-wave1-safe-updates

Conversation

@shaunburdick

Copy link
Copy Markdown
Owner

Summary

Complete dependency overhaul bringing eslint-config-shaunburdick to v7.0.0 with ESLint 10, TypeScript 6.0, and a fully replaced plugin ecosystem.

Breaking Changes

  • ESLint >=10 required — upgraded from ESLint 9.x
  • Node >=20.19.0 — dropped Node 18 and 20.x support
  • Three plugin swaps (see below)
  • Rule prefix migrations: react/@eslint-react/, import/import-x/, jsx-a11y/jsx-a11y-x/

Plugin Replacements

Old New Why
eslint-plugin-import eslint-plugin-import-x@4.16.2 ESLint 10 compat
eslint-plugin-react @eslint-react/eslint-plugin@5.8.13 ESLint 10 compat
eslint-plugin-jsx-a11y eslint-plugin-jsx-a11y-x@0.2.0 ESLint 10 compat

Major Updates

Dependency Old New
ESLint ^9.39.3 ^10.4.1
@eslint/js ^9.39.3 ^10.0.1
TypeScript ^5.9.3 ^6.0.3
typescript-eslint ^8.56.1 ^8.60.1
eslint-plugin-jsdoc ^62.7.1 ^63.0.2
eslint-plugin-unicorn ^63.0.0 ^64.0.0
eslint-plugin-react-hooks ^7.0.1 ^7.1.1
eslint-plugin-react-you-might-not-need-an-effect ^0.9.1 ^1.0.0

Config Migration Details

  • es6/: switched to import-x plugin with flatConfigs.recommended, all import/import-x/ rule prefixes
  • react/: uses @eslint-react recommended config, hooks, and jsx-a11y-x; react/self-closing-comp@stylistic/jsx-self-closing-comp
  • typescript/: registers import-x plugin for consistent-type-specifier-style rule
  • test/test.js: added { cause: error } for ESLint 10's new preserve-caught-error rule

Testing

All changes verified passing lint (zero errors, zero warnings).

Wave 1 of dependency updates - all safe minor and patch bumps:

- @eslint-community/eslint-plugin-eslint-comments: 4.6.0 -> 4.7.2
- @stylistic/eslint-plugin: 5.9.0 -> 5.10.0
- eslint-plugin-promise: 7.2.1 -> 7.3.0 (adds ESLint 10 peer dep support)
- eslint-plugin-react-hooks: 7.0.1 -> 7.1.1 (adds ESLint 10 peer dep support)
- eslint-plugin-sonarjs: 4.0.0 -> 4.0.3
- typescript-eslint: 8.56.1 -> 8.60.1 (extends TS support to <6.1.0)
- globals: 17.3.0 -> 17.6.0
- react (dev): 19.2.4 -> 19.2.7
- @types/node (dev): 25.3.3 -> 25.9.2
- @types/react (dev): 19.2.14 -> 19.2.17

All updates verified passing lint.
BREAKING CHANGE: ESLint 10+, Node >=20.19.0, new plugin ecosystem

Wave 2 of dependency updates - major version bump to 7.0.0:

- ESLint: ^9.39.3 -> ^10.4.1 (dev and @eslint/js dep)
- eslint-plugin-import -> eslint-plugin-import-x@^4.16.2
- eslint-plugin-react -> @eslint-react/eslint-plugin@^5.8.13
- eslint-plugin-jsx-a11y -> eslint-plugin-jsx-a11y-x@^0.2.0
- eslint-plugin-react-you-might-not-need-an-effect: ^0.9.1 -> ^1.0.0
- engines: Node >=20.19.0 (dropped 18 and 20.x support)
- peerDependencies.eslint: >=10

Config changes:
- es6/index.js: switched to import-x plugin with flatConfigs.recommended
- es6/rules.js: all import/ -> import-x/ rule prefixes
- react/index.js: @eslint-react recommended config + jsx-a11y-x + hooks
- react/rules.js: @eslint-react/ rule prefixes, @stylistic/jsx-self-closing-comp, jsx-a11y-x/ prefixes
- typescript/index.js: added import-x plugin registration
- typescript/rules.js: import/ -> import-x/ rule prefix
- test/test.js: added { cause: error } for ESLint 10 preserve-caught-error rule
Wave 3 of dependency updates:

- eslint-plugin-jsdoc: ^62.7.1 -> ^63.0.2
- eslint-plugin-unicorn: ^63.0.0 -> ^64.0.0
- typescript (dev): ^5.9.3 -> ^6.0.3
Node 20 reached EOL on April 30, 2026. Package engine now requires
>=20.19.0, so remove 20.x from test matrix and update
dependency-check and publish jobs to Node 22 LTS.
Node 26.0.0 was released May 5, 2026 as the Current release. Adding to the test matrix ensures compatibility is caught early before it enters Active LTS in October 2026.
- Add comprehensive rule prefix migration guide to CHANGELOG
- Backfill missing 6.x version history
- Add Requirements section to README (Node >=20.19.0, ESLint >=10)
- Update install command from eslint@9 to eslint@10
- actions/checkout: v5 → v6.0.3 (9f69817)
- actions/setup-node: v5 → v6.4.0 (48b55a0)
- github/codeql-action: v4 → v4.36.2 (1a818fd)

All actions now pinned by immutable commit SHA with version
comments for supply chain security.
- Bump version from 5.0.0 to 7.0.0
- ESLint 9+ → 10+ references
- Replace old plugin names with new ones
  (import-x, @eslint-react, jsx-a11y-x)
- Update CI matrix to 22.x/24.x/26.x
- Mention SHA-pinned actions
- Replace inline version history with CHANGELOG link
- Add plugin rename note to Common Tasks
Uses softprops/action-gh-release@v3.0.0 to create a GitHub
Release automatically when a new version is published to NPM.

Release tag and name are derived from package.json version.
Release notes auto-generated from merged PRs.
@shaunburdick shaunburdick merged commit bedfd0e into main Jun 7, 2026
13 checks passed
@shaunburdick shaunburdick deleted the 001-wave1-safe-updates branch June 7, 2026 21:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant