chore(deps-dev): eslint 10 and vitest 4, holding typescript at 5 - #35
Conversation
Splits the dev-dependencies group bump. Two of its three majors land here; the third cannot land at all yet. eslint 9 -> 10 and vitest 1 -> 4 are clean: no config or source change, and the emitted dist/index.d.ts is byte-identical to main, so nothing about the published type surface moves. typescript 5 -> 6 is held back. openapi-typescript 7.13.0, the newest release, still declares `peer typescript@"^5.x"`, so a clean `npm ci` with TypeScript 6 fails to resolve. That is what makes the grouped bump red, and no amount of retrying the group will fix it. Worth recording for whenever that peer range widens: TypeScript 6 also breaks `tsup --dts`. tsup 8.5.1 hardcodes `baseUrl: compilerOptions.baseUrl || "."` when it builds declarations, and TS 6 errors on `baseUrl` as deprecated (TS5101). Adding `"ignoreDeprecations": "6.0"` to tsconfig.json clears it, but only until TypeScript 7 removes the option outright, so the durable answer is a tsup that stops injecting it, or moving declaration emit to tsc. Verified from a clean `npm ci`: typecheck, lint, unit tests (64), build and live smoke tests all pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
eslint 10 and vitest 4 both require Node 20 or newer, so the Node 18 lane fails on `npm ci` while 20 and 22 pass. Node 18 reached end of life on 2025-04-30. The constraint is entirely in the dev toolchain — nothing in the shipped bundle needs Node 20. The choice was between quietly dropping the lane while still advertising `engines: >=18`, and withdrawing a support claim nothing verifies. This does the second: matrix moves to 20/22/24, `engines` to `>=20`, README and CHANGELOG updated to match. Consumers still on Node 18 should stay on 7.1.x. Note for whoever merges: branch protection still requires `Test (Node 18)`, which no longer exists. The required contexts need updating to `Test (Node 20)`, `Test (Node 22)`, `Test (Node 24)` or this cannot merge. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Pushed a second commit: the Node 18 lane is dropped and the tested floor moves to 20. eslint 10 and vitest 4 both declare Node 20+ ( The constraint is dev-toolchain only — nothing in the shipped bundle needs Node 20. So the choice was between dropping the lane while still advertising Before this can merge: branch protection still requires |
Supersedes #27, which cannot go green as a group.
#27 bundles three majors: eslint 9 → 10, vitest 1 → 4, and typescript 5 → 6. The first two are fine. The third is blocked upstream, and it takes the whole group down with it.
Why typescript 6 cannot land here
openapi-typescript@7.13.0, the newest release, still declares:So a clean
npm ciwith TypeScript 6 fails to resolve before any build runs:openapi-typescriptis a real dependency here —scripts/regenerate.tsuses it to buildsrc/_generated/schema.ts— so it cannot simply be dropped. Nothing in this repo can fix it; the peer range has to widen upstream.A second thing waiting behind it
Worth writing down now so it is not rediscovered later. Even with the peer conflict forced past, TypeScript 6 breaks
tsup --dts:This repo's
tsconfig.jsondoes not setbaseUrl. tsup does:tsup@8.5.1hardcodesbaseUrl: compilerOptions.baseUrl || "."in its declaration build (node_modules/tsup/dist/rollup.js:6837). Adding"ignoreDeprecations": "6.0"clears it and the build then succeeds, but that option is itself a countdown — TypeScript 7 removesbaseUrloutright. The durable fix is a tsup release that stops injecting it, or moving declaration emit totsc.What this PR does
Takes the two majors that work, holds typescript at
^5.4.0. No config or source change was needed.npm cinpm run typechecknpm run lintnpm testnpm run buildnpm run test:livedist/index.d.tsis byte-identical to the one built frommain, so the published type surface does not move.🤖 Generated with Claude Code