Move the toolchain to eslint 10, typescript-eslint 8 and current plugins

eslint 8 and typescript-eslint 6 are past their support, and the webpack
dev server chain carried the dependency alerts every repository using this
package inherited. Upstream @polkadot/dev still pins the same versions, so
this leaves it on purpose.

The rules are carried over with their options, so the lint means what it
meant:

- eslint-config-standard 17 (written for eslint 8) is replaced by its 161
  rules in config/eslint.standard.js, with their options. Its 48 formatting
  rules, deprecated in eslint core, are the same rules in @stylistic;
  no-new-object and no-new-symbol are no-object-constructor and
  no-new-native-nonconstructor; import/* is import-x/*.
- eslint-plugin-import (eslint <= 9) is eslint-plugin-import-x;
  eslint-plugin-deprecation is @typescript-eslint/no-deprecated; the
  formatting rules of core, typescript-eslint and eslint-plugin-react used
  in eslint.rules.js are their @stylistic versions with the same options.
- typescript-eslint 8's preset swaps core no-unused-expressions for its own
  with default options; standard's (short circuit, ternary and tagged
  templates allowed) are carried over to it.
- eslint-plugin-react and eslint-plugin-header still call context methods
  eslint 10 removed; @eslint/compat's fixupPluginRules supplies them. The
  header rule also gets `schema: false`, as eslint 9+ rejects options for a
  rule with no schema. The original header plugin stays rather than its
  fork: it reports at the first token after leading comments, so a
  generated file's /* eslint-disable */ still covers it, as it always has.

The effective config was compared rule by rule (--print-config) for .ts,
.tsx, .spec.ts and .mjs files before and after. Every rule that left has
its successor active; option differences are eslint 10 spelling out
defaults. New rules come from the eslint 10, typescript-eslint 8 and
react-hooks 7 presets. no-inner-declarations left eslint's preset upstream.

Also current: webpack-dev-server 6, webpack-cli 7, webpack-merge 6, rollup
plugins, madge 8, gh-release 8, globals 17, espree 11; Node >= 20.19 for
the dev package, which eslint 10 requires.

In this repository the new rules found: Function types now named by
no-unsafe-function-type; optional chains, includes() and RegExp#exec where
they say the same thing; createWrapper returns Describe, so its three casts
were redundant; rootCjs.spec casts through unknown, so the lint result does
not depend on whether build/ exists. lint, build and test (149 passed) pass,
and lint leaves the tree unchanged with and without a build.
This commit is contained in:
Satoshi Qazi Muhammed committed 2026-10-09 08:54:50 +04:00
1 parent e73c5c953c
commit bda5d06bac
17 files changed
+3401 -3570

No files matched your search

+26 -26
View File
@@ -3,7 +3,7 @@
"bugs": "https://git.pezkuwichain.io/pezkuwichain/pezkuwi-dev/issues",
"description": "A collection of shared CI scripts and development environment used by @pezkuwi projects",
"engines": {
"node": ">=18"
"node": ">=20.19"
},
"homepage": "https://git.pezkuwichain.io/pezkuwichain/pezkuwi-dev/tree/master/packages/dev#readme",
"license": "Apache-2.0",
@@ -49,47 +49,47 @@
"./rootJs/testJson.json": "./src/rootJs/testJson.json"
},
"dependencies": {
"@eslint/js": "^8.56.0",
"@eslint/compat": "^2.1.1",
"@eslint/js": "^10.0.1",
"@pezkuwi/dev-test": "^0.85.12",
"@pezkuwi/dev-ts": "^0.85.12",
"@rollup/plugin-alias": "^5.1.1",
"@rollup/plugin-commonjs": "^25.0.8",
"@rollup/plugin-commonjs": "^29.0.3",
"@rollup/plugin-dynamic-import-vars": "^2.1.5",
"@rollup/plugin-inject": "^5.0.5",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^15.3.1",
"@rollup/plugin-node-resolve": "^16.0.3",
"@stylistic/eslint-plugin": "^5.10.0",
"@tsconfig/strictest": "^2.0.2",
"@typescript-eslint/eslint-plugin": "^6.19.1",
"@typescript-eslint/parser": "^6.19.1",
"eslint": "^8.56.0",
"eslint-config-standard": "^17.1.0",
"@typescript-eslint/eslint-plugin": "^8.71.1",
"@typescript-eslint/parser": "^8.71.1",
"eslint": "^10.12.0",
"eslint-import-resolver-node": "^0.3.9",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-deprecation": "^2.0.0",
"eslint-import-resolver-typescript": "^4.4.5",
"eslint-plugin-header": "^3.1.1",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-import-newlines": "^1.3.4",
"eslint-plugin-jest": "^27.6.3",
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-simple-import-sort": "^10.0.0",
"eslint-plugin-sort-destructure-keys": "^1.5.0",
"espree": "^9.6.1",
"eslint-plugin-import-newlines": "^2.0.0",
"eslint-plugin-import-x": "^4.17.1",
"eslint-plugin-jest": "^29.16.6",
"eslint-plugin-n": "^18.4.1",
"eslint-plugin-promise": "^7.3.0",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-simple-import-sort": "^14.0.0",
"eslint-plugin-sort-destructure-keys": "^3.0.0",
"espree": "^11.2.0",
"gh-pages": "^6.1.1",
"gh-release": "^7.0.2",
"globals": "^13.24.0",
"gh-release": "^8.1.0",
"globals": "^17.13.0",
"json5": "^2.2.3",
"madge": "^6.1.0",
"madge": "^8.0.0",
"rollup": "^4.9.6",
"rollup-plugin-cleanup": "^3.2.1",
"tslib": "^2.7.0",
"typescript": "^5.5.4",
"webpack": "^5.89.0",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^4.15.1",
"webpack-merge": "^5.10.0",
"webpack-cli": "^7.2.3",
"webpack-dev-server": "^6.0.0",
"webpack-merge": "^6.0.1",
"webpack-subresource-integrity": "^5.2.0-rc.1",
"yargs": "^17.7.2"
},