Skip to content

chore(web): upgrade the frontend toolchain - #24

Merged
RyPope merged 1 commit into
mainfrom
chore/web-toolchain
Oct 31, 2026
Merged

RyPope merged 1 commit into
mainfrom
chore/web-toolchain

Conversation

@RyPope

@RyPope RyPope commented Oct 31, 2026

Copy link
Copy Markdown
Owner

Stacked on #23 (React 19). This replaces Dependabot's grouped bump in #10, which failed npm ci with ERESOLVE.

Package From To
vite 6.0.5 8.3.5
@vitejs/plugin-react 4.3.4 6.1.2
vitest 2.1.8 5.0.5
eslint / @eslint/js 9.17 10.14 / 10.0
eslint-plugin-react-hooks 5.1 7.1
eslint-plugin-react-refresh 0.4 0.5
typescript-eslint 8.18 8.72
typescript 5.7.2 5.9.3 (not 7)
prettier 3.4 3.9
playwright 1.49 1.64
openapi-typescript 7.4 7.13
globals / @types/katex 15 / 0.16.7 17 / 0.16.8

Why TypeScript 5.9, not 7

typescript-eslint 8.72 accepts TypeScript <6.1 and openapi-typescript 7.13 accepts ^5.x, so 5.9.3 is the newest version every tool supports. This is what broke #10. Revisit TypeScript 7 when both tools widen their ranges.

Breaking changes handled

  • react-hooks 7 (React Compiler rules) flagged six reads of a ref during render in Workspace: useSplit returned its container ref in the same object as the pane size. useSplit now stores the container element in state through a callback ref, and Workspace destructures the hook results. No lint rules are disabled.
  • The old lint and test packages were removed before installing the new ones, so the lockfile resolves cleanly. Runtime dependency versions are unchanged (I compared them in the lockfile).

Node

Vitest 5 needs Node ^22.12, and ESLint 10 needs ^22.13. CI (node-version: "22") and the web build stage in backend/Dockerfile (node 22.23) already satisfy both, so neither changes.

Verification

  • npm run typecheck, npm test (17 passed), npm run lint (0 warnings), npm run format:check, npm run build. npm run api-types leaves the generated types unchanged.
  • In the browser on the Vite 8 dev server against a running stack: the workspace loads, dragging the split pane resizes it and saves the size, Run returns results, and the console shows no errors.

@RyPope
RyPope changed the base branch from feat/react-19 to main October 31, 2026 06:27
Vite 8, @vitejs/plugin-react 6, Vitest 5, ESLint 10 (@eslint/js 10, react-hooks 7,
react-refresh 0.5), typescript-eslint 8.72, TypeScript 5.9, Prettier 3.9,
Playwright 1.64, openapi-typescript 7.13, globals 17.

react-hooks 7 flags reading a ref during render: useSplit now keeps its container
element in state via a callback ref, and Workspace destructures the hook results.
@RyPope
RyPope force-pushed the chore/web-toolchain branch from b2121c8 to cdf6816 Compare October 31, 2026 06:28
@RyPope
RyPope merged commit 3280275 into main Oct 31, 2026
5 checks passed
@RyPope
RyPope deleted the chore/web-toolchain branch October 31, 2026 06:30
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