Skip to content

Modernize toolchain (TypeScript, ESLint, webpack, ...) - #149

Merged
vogelsgesang merged 1 commit into
mainfrom
query-graphs-3
Aug 23, 2026
Merged

vogelsgesang merged 1 commit into
mainfrom
query-graphs-3

Conversation

@vogelsgesang

Copy link
Copy Markdown
Collaborator

Bump TypeScript (5.6->6.0), ESLint (9->10), eslint-plugin-react-hooks (5->7), pnpm, @types/node, webpack-cli, webpack-dev-server and copy-webpack-plugin to their latest majors.

Furthermore, modernize tsconfigbase.json for TypeScript 6.0: bump target/lib to ES2024, switch moduleResolution from classic "node" to "bundler", module switched to "esnext", and downlevelIteration dropped, since TS 6.0 turns these into hard errors ahead of their removal in TS 7.0.

This also required a few fixes:

  • Fix new violations from ESLint 10's default preserve-caught-error and no-useless-assignment rules.
  • Patch eslint-plugin-react's flat configs with @eslint/compat's fixupConfigRules to fix a runtime crash under ESLint 10, which removed the context.getFilename() API the plugin still calls.
  • Add ambient "*.css" module declarations, now required since TS 6.0 type-checks CSS side-effect imports more strictly.
  • Fix rootDir/types gaps in standalone-app/tsconfig.json surfaced by the same TS 6.0 strictness, needed for both tsc/ts-loader and ts-node's config loading in webpack-cli.

Bump TypeScript (5.6->6.0), ESLint (9->10), eslint-plugin-react-hooks
(5->7), pnpm, @types/node, webpack-cli, webpack-dev-server and
copy-webpack-plugin to their latest majors.

Furthermore, modernize tsconfigbase.json for TypeScript 6.0: bump
`target`/`lib` to ES2024, switch `moduleResolution` from classic "node"
to "bundler", `module` switched to "esnext", and `downlevelIteration`
dropped, since TS 6.0 turns these into hard errors ahead of their
removal in TS 7.0.

This also required a few fixes:
- Fix new violations from ESLint 10's default preserve-caught-error
  and no-useless-assignment rules.
- Patch eslint-plugin-react's flat configs with @eslint/compat's
  fixupConfigRules to fix a runtime crash under ESLint 10, which
  removed the context.getFilename() API the plugin still calls.
- Add ambient "*.css" module declarations, now required since TS 6.0
  type-checks CSS side-effect imports more strictly.
- Fix rootDir/types gaps in standalone-app/tsconfig.json surfaced by
  the same TS 6.0 strictness, needed for both tsc/ts-loader and
  ts-node's config loading in webpack-cli.
@vogelsgesang
vogelsgesang merged commit f500d94 into main Aug 23, 2026
5 checks passed
@vogelsgesang
vogelsgesang deleted the query-graphs-3 branch August 23, 2026 04:03
vogelsgesang added a commit that referenced this pull request Aug 23, 2026
Adopt new TS 6.0 / ESLint 10 capabilities enabled by the toolchain bump (#149)

- Enable verbatimModuleSyntax and noUncheckedSideEffectImports, now that
  moduleResolution is "bundler". Split all type-only imports into `import
  type` via the new @typescript-eslint/consistent-type-imports rule
  (autofixed). Scope verbatimModuleSyntax off for the ts-node override
  used to load webpack's *.config.ts files as CommonJS.
- Switch to eslint-plugin-react-hooks's `recommended` flat config, which
  now bundles the former eslint-plugin-react-compiler rule set instead of
  just rules-of-hooks/exhaustive-deps.
- Fix the one violation it surfaced: QueryGraphsApp.tsx reset `tree` via
  setState synchronously inside an effect when treeUrl was cleared.
  Deriving displayedTree from treeUrl at render time avoids the extra
  render pass and a one-frame stale-tree flicker.
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