Skip to content

Raise dev Node.js requirement to match jsdom 30 - #63

Merged
dentifrag merged 3 commits into
mainfrom
dentifrag-miniature-pancake
Aug 25, 2026
Merged

Raise dev Node.js requirement to match jsdom 30#63
dentifrag merged 3 commits into
mainfrom
dentifrag-miniature-pancake

Conversation

@dentifrag

Copy link
Copy Markdown
Owner

Follow-up to the Dependabot batch merged today, specifically #56 (jsdom 29 -> 30).

Why

jsdom 30 raised its Node floor to ^22.22.2 || ^24.15.0 || >=26.0.0, but engines.node and CONTRIBUTING still advertised ^20.19.0 || >=22.12.0. A contributor on Node 20 (or 22.12 - 22.22.1, or 24.0 - 24.14) would install successfully with only an EBADENGINE warning, then hit failures running the test suite.

Checking engines.node across every direct dependency, the effective floor is exactly jsdom's:

Package engines.node
jsdom 30.0.1 ^22.22.2 || ^24.15.0 || >=26.0.0
@yao-pkg/pkg 6.22.0 >=22.0.0
@testing-library/jest-dom 7.0.1 >=22
vitest 4.1.11 ^20.0.0 || ^22.0.0 || >=24.0.0
vite 8.2.1 / oxlint 1.79.0 / @vitejs/plugin-react 6.0.5 ^20.19.0 || >=22.12.0

Worth noting Node 20 was already effectively unsupported before this PR: @testing-library/jest-dom@7 and @yao-pkg/pkg@6 both require >=22. This change makes the declared requirement honest rather than newly restricting anything.

What changed

  • package.json: engines.node -> ^22.22.2 || ^24.15.0 || >=26.0.0
  • CONTRIBUTING.md: prerequisites updated to match
  • CHANGELOG.md: entry under Unreleased

Scope

Dev toolchain only. jsdom is a devDependency and is not bundled into dist-server, so no runtime behavior changes:

  • CI already runs Node 22 (resolves above the new floor)
  • Dockerfile build stage uses node:22-slim; the runtime stage installs with --omit=dev
  • pkg targets remain node22-*

Verification

npm ci then the full CI suite locally on Node 26.5.0:

  • typecheck (node + web): pass
  • lint (oxlint): pass
  • format:check (prettier): pass
  • test: 29 files, 181 tests passed
  • build (vite + esbuild): pass

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

package-lock.json appears out of sync with the updated package.json engine range and should be updated to avoid install/CI inconsistency.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR updates the repository’s declared development Node.js version requirement to match jsdom 30’s supported Node range, and reflects that change in contributor documentation and the changelog.

Changes:

  • Updated package.json engines.node to ^22.22.2 || ^24.15.0 || >=26.0.0.
  • Updated CONTRIBUTING.md prerequisites to match the new Node.js requirement.
  • Added an Unreleased changelog entry describing the updated dev Node.js floor.
File summaries
File Description
package.json Raises declared engines.node requirement to match jsdom 30’s Node floor.
CONTRIBUTING.md Updates contributor prerequisites to the new Node.js version range.
CHANGELOG.md Documents the dev Node.js requirement change under Unreleased.
Review details
  • Files reviewed: 3/3 changed files
  • Comments generated: 2
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread package.json
Comment thread CONTRIBUTING.md Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

package-lock.json still reflects the old root engines.node range, so the lockfile should be regenerated/updated to avoid conflicting engine requirements.

Review details

Suppressed comments (2)

package.json:14

  • package-lock.json still declares the old engines.node range for the root package (e.g. it currently has ^20.19.0 || >=22.12.0). When package.json changes, the lockfile should be regenerated/updated so the root packages[""].engines.node matches, to avoid contributors seeing conflicting engine requirements depending on which file they look at.
    "node": "^22.22.2 || ^24.15.0 || >=26.0.0"

CONTRIBUTING.md:10

  • The Node.js version range in CONTRIBUTING uses >=26, while package.json/CHANGELOG use >=26.0.0. Aligning the docs to the exact semver range helps avoid ambiguity for contributors selecting a Node version.
- **Node.js `^22.22.2`, `^24.15.0`, or `>=26`** (required by the jsdom and Vite dev tooling; the
  project builds and packages against Node 22).
  • Files reviewed: 3/3 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The Node engine requirement and documentation/lockfile updates are consistent and aligned with the stated dependency constraints.

Review details
  • Files reviewed: 3/4 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@dentifrag
dentifrag marked this pull request as ready for review August 25, 2026 17:54
@dentifrag
dentifrag merged commit 2c68ba9 into main Aug 25, 2026
1 check passed
@dentifrag
dentifrag deleted the dentifrag-miniature-pancake branch August 25, 2026 19:59
@dentifrag dentifrag mentioned this pull request Aug 25, 2026
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.

2 participants