From ff5335ddaabacd58b4347ecc1cb7d203befb94f0 Mon Sep 17 00:00:00 2001 From: Ben Kalsky Date: Sat, 12 Sep 2026 21:47:11 +0300 Subject: [PATCH] chore: align dev Node requirement with Vitest 5 Vitest 5 (#16) requires Node ^22.12.0 || ^24 || >=26 and declares a peer of @types/node ^22 || >=24, but the repo still said Node 20: - `@types/node` ^20.19.35 -> ^22.19.0 (resolves 22.20.2). Every install printed an unmet-peer warning; it is gone. - `.nvmrc` pins 22.12.0, the real floor rather than a bare `22`, which would let 22.0-22.11 through and fail the suite unexplained. - CLAUDE.md states the requirement next to the dev commands. Toolchain only: the package declares no `engines` field and its peer ranges are unchanged, so consumers of the published library see no difference. CI already runs Node 22 (latest 22.x, past 22.12). Verified: no peer warnings on install; typecheck, build and all 33 tests pass; `pnpm audit` clean. Co-Authored-By: Claude Opus 5 (1M context) --- .nvmrc | 1 + CLAUDE.md | 2 ++ package.json | 2 +- pnpm-lock.yaml | 34 +++++++++++++++++----------------- 4 files changed, 21 insertions(+), 18 deletions(-) create mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..1d9b783 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +22.12.0 diff --git a/CLAUDE.md b/CLAUDE.md index e0d5981..a69e175 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -47,6 +47,8 @@ pnpm typecheck # tsc --noEmit pnpm build # tsc → dist/ ``` +**Development needs Node 22.12 or newer** (see `.nvmrc`): Vitest 5 declares `^22.12.0 || ^24.0.0 || >=26.0.0`, so Node 20 and every 22.x below 22.12 fail to run the suite. This is a toolchain requirement only; consumers of the published package are unaffected. + The dev dependency on `sumit-api` installs from npm. To develop against a local checkout, clone it as a sibling directory and run `pnpm link ../sumit-api`. Branches: `fix/*`, `feat/*`, `chore/*`. PRs to `main`. Conventional-commit-ish messages. diff --git a/package.json b/package.json index e64a998..eb680ae 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ }, "devDependencies": { "@testing-library/react": "^16.1.0", - "@types/node": "^20.19.35", + "@types/node": "^22.19.0", "@types/react": "^19.0.0", "happy-dom": "^20.8.9", "react": "^19.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c4228eb..331d61f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^16.1.0 version: 16.3.3(@testing-library/dom@10.4.1)(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@types/node': - specifier: ^20.19.35 - version: 20.19.43 + specifier: ^22.19.0 + version: 22.20.2 '@types/react': specifier: ^19.0.0 version: 19.3.0 @@ -34,7 +34,7 @@ importers: version: 5.9.3 vitest: specifier: ^5.0.0 - version: 5.0.0(@types/node@20.19.43)(happy-dom@20.14.5)(vite@8.1.3(@types/node@20.19.43)) + version: 5.0.0(@types/node@22.20.2)(happy-dom@20.14.5)(vite@8.1.3(@types/node@22.20.2)) packages: @@ -211,8 +211,8 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/node@20.19.43': - resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==} + '@types/node@22.20.2': + resolution: {integrity: sha512-xlvWf4Vs9n1PEVYwP1n4vvG07M6y8WgvJ2t0vbrWTmijsIHp1cS+uJ2kMIRdY3nHZK0nCYKrPeD171+SzF4/zw==} '@types/react@19.3.0': resolution: {integrity: sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==} @@ -711,7 +711,7 @@ snapshots: '@types/estree@1.0.9': {} - '@types/node@20.19.43': + '@types/node@22.20.2': dependencies: undici-types: 6.21.0 @@ -723,16 +723,16 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 20.19.43 + '@types/node': 22.20.2 - '@vitest/mocker@5.0.0(vite@8.1.3(@types/node@20.19.43))': + '@vitest/mocker@5.0.0(vite@8.1.3(@types/node@22.20.2))': dependencies: '@jridgewell/trace-mapping': 0.3.31 '@vitest/spy': 5.0.0 estree-walker: 3.0.3 magic-string: 1.3.1 optionalDependencies: - vite: 8.1.3(@types/node@20.19.43) + vite: 8.1.3(@types/node@22.20.2) '@vitest/spy@5.0.0': {} @@ -748,7 +748,7 @@ snapshots: buffer-image-size@0.6.4: dependencies: - '@types/node': 20.19.43 + '@types/node': 22.20.2 chai@6.2.2: {} @@ -779,7 +779,7 @@ snapshots: happy-dom@20.14.5: dependencies: - '@types/node': 20.19.43 + '@types/node': 22.20.2 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 buffer-image-size: 0.6.4 @@ -925,7 +925,7 @@ snapshots: undici-types@6.21.0: {} - vite@8.1.3(@types/node@20.19.43): + vite@8.1.3(@types/node@22.20.2): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 @@ -933,13 +933,13 @@ snapshots: rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 20.19.43 + '@types/node': 22.20.2 fsevents: 2.3.3 - vitest@5.0.0(@types/node@20.19.43)(happy-dom@20.14.5)(vite@8.1.3(@types/node@20.19.43)): + vitest@5.0.0(@types/node@22.20.2)(happy-dom@20.14.5)(vite@8.1.3(@types/node@22.20.2)): dependencies: '@types/chai': 5.2.3 - '@vitest/mocker': 5.0.0(vite@8.1.3(@types/node@20.19.43)) + '@vitest/mocker': 5.0.0(vite@8.1.3(@types/node@22.20.2)) chai: 6.2.2 es-module-lexer: 2.3.2 expect-type: 1.4.0 @@ -950,10 +950,10 @@ snapshots: tinybench: 6.1.4 tinyexec: 1.3.0 tinyglobby: 0.2.17 - vite: 8.1.3(@types/node@20.19.43) + vite: 8.1.3(@types/node@22.20.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 20.19.43 + '@types/node': 22.20.2 happy-dom: 20.14.5 transitivePeerDependencies: - msw