Skip to content

build(deps-dev): bump jsdom from 29.1.1 to 30.1.1 - #117

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/npm_and_yarn/jsdom-30.1.1
Closed

dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/npm_and_yarn/jsdom-30.1.1

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Bumps jsdom from 29.1.1 to 30.1.1.

Release notes

Sourced from jsdom's releases.

v30.1.1

  • Fixed spurious window blur and focusout events and incorrect event.relatedTarget values when focusing an element after removing the previously focused element, which regressed in v30.1.0. (@​asamuzaK)
  • Fixed focus and blur behavior across frames, and focusing the document's viewport through document.documentElement.focus(). (@​asamuzaK)
  • Fixed focus targets removed or disabled by blur listeners becoming active, and text selections made by focus and blur listeners being overwritten. (@​asamuzaK)
  • Fixed element.focus() incorrectly focusing disabled form controls and <input type="hidden"> elements with tabindex="". (@​scttcper)
  • Fixed invalid style.setProperty() calls changing existing !important priorities, serialized styles, or mutation records. (@​FedgeNo)
  • Fixed !important handling when updating CSS longhands after shorthands, using variables or CSS-wide keywords, and assigning style properties directly. (@​FedgeNo)
  • Fixed <noscript> parsing with includeNodeLocations: true or inside frames to honor the runScripts option.
  • Fixed the storageQuota option being ignored by frames.
  • Fixed encoding detection of HTML and XML byte input to honor XML encoding declarations and detect UTF-16 without a byte order mark.
  • Fixed exceptions caused by truncated charset parameters in <meta> elements, and encoding detection incorrectly using incomplete <meta> tags. (@​FedgeNo)
  • Fixed XML serialization errors for namespaces named constructor, toString, __proto__, or "null", and incorrect reuse of namespace prefixes declared on sibling elements.
  • Fixed element.innerHTML and element.outerHTML in XML documents to reject invalid characters in attribute values and avoid stack overflows on large strings.
  • Fixed selector matching for :lang(), :nth-child(... of ...) after mutations, and :has() with duplicate IDs or nested logical pseudo-classes. (@​asamuzaK)

v30.1.0

jsdom is feeling the AGI!

This release is dedicated to @​scttcper, who unleashed @​codex upon jsdom and found tons of performance improvements. Along the way, he found and fixed many correctness issues as well.

We really appreciate his thoughtful PRs, which did a great job following the project's contribution guidelines, and were clearly human-curated, with their PR descriptions edited to be brief and respectful of the maintainers' time.

Thanks to @​scttcper, as well as all the other contributors of this release (most of whom were AI-assisted).

  • Added named access to elements on document, such as document.myForm for <form name="myForm">. (@​vojtisprime11)
  • Added QuotaExceededError, including its use for storage quota errors and oversized crypto.getRandomValues() requests.
  • Added support for the relaxed DOM naming rules when creating elements, attributes, and document types.
  • Improved performance of DOM construction, tree mutations, range operations, and live collection access, especially on large documents. (@​scttcper, @​erezrokah)
  • Improved performance of getComputedStyle(), style changes, and CSS serialization. (@​scttcper, @​jhult)
  • Improved performance of event dispatch, form control and label lookups, and updates to <select> elements and radio button groups. (@​scttcper)
  • Reduced memory use when creating and working with DOM nodes, attributes, event listeners, and mutation observers. (@​scttcper)
  • Changed window.close() to preserve access to the document and its DOM through retained references.
  • Fixed element.querySelectorAll() returning no matches when the first part of the selector matches the element itself, which regressed in v30.0.0. (@​asamuzaK)
  • Fixed case sensitivity in CSS attribute selectors, including selectors matching data-state="", title="", and other case-sensitive values. (@​asamuzaK)
  • Fixed document.querySelector() failing to find a matching element when an earlier element has the same ID but does not match the rest of the selector. (@​vojtisprime11)
  • Fixed :focus matching in shadow trees. (@​asamuzaK)
  • Fixed DOM insertion and replacement, including valid document.replaceChildren() calls, invalid document element and doctype placements, and mutations during element.replaceWith().
  • Fixed the ordering of script execution, custom element callbacks, iframe loading, and mutation observer notifications during DOM insertion, including in shadow trees.
  • Fixed queued events and navigation continuing after window.close() or iframe removal, and prevented new scripts, resource loads, timers, and animation frames from starting in destroyed documents. (@​scttcper)
  • Fixed parent documents waiting indefinitely for loading to finish when a child iframe removes itself during loading.
  • Fixed request cancellation across redirects, during pending requestInterceptor() callbacks, and when reusing an XMLHttpRequest after aborting it.
  • Fixed resource loading and JSDOM.fromURL() potentially hanging when response handling throws and response stream cleanup does not finish.
  • Fixed successful cached resource loads being treated as aborted.
  • Fixed getComputedStyle() and document.styleSheets using the wrong stylesheet order after inserting or updating <style> elements.
  • Fixed getComputedStyle() ignoring nested @import and @media rules in imported stylesheets, and returning stale results after imports finish loading.
  • Fixed style invalidation, stylesheet removal, and frame source updates in shadow trees.
  • Fixed repeated getComputedStyle() calls changing case-sensitive background URLs, and inconsistent resolution of border shorthands containing system colors. (@​scttcper)
  • Fixed computed border widths, including borderless elements incorrectly reporting 16px, which regressed in v30.0.0. (@​Alberto-BaseNet)
  • Fixed getComputedStyle() to resolve 'font-weight' keywords to numeric values. (@​tianrking)
  • Fixed getComputedStyle() to convert lengths to pixels inside CSS math functions containing percentages, and to resolve percentages in 'font-size' math functions. (@​soroushm)

... (truncated)

Commits
  • 0a117f4 30.1.1
  • 103f67d Remove unnecessary window cleanup from API tests
  • cdda00a Test HTTP/2 document and subresource loading
  • 7ab92ce Update @​asamuzakjp/dom-selector to v9.2.1
  • d940c20 Share jsdom settings across descendant windows
  • 6ba40cb Fix and simplify option propagation
  • 3b3be70 Preserve CSS priorities across declaration updates
  • 97b2758 Align focusing and unfocusing with HTML
  • b7b460b Update w3c-xmlserializer to v6
  • 71d562f Update html-encoding-sniffer to v7
  • Additional commits viewable in compare view

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Sep 30, 2026
@clawsweeper

clawsweeper Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added P2 Normal priority bug or improvement with limited blast radius. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Sep 30, 2026
@clawsweeper

clawsweeper Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Codex review: blocked before merge. Reviewed October 6, 2026, 7:47 AM ET / 11:47 UTC (Revision 3).

ClawSweeper review

What this changes

Updates the React SDK’s simulated browser test environment to jsdom 30.1.1 and refreshes the dependency lockfile.

Merge readiness

⛔ Blocked before merge - 4 items remain

The prior Node compatibility finding remains unresolved. Current main still uses jsdom 29.1.1 for React tests, so this upgrade remains distinct and cannot close as implemented.

Priority: P2
Reviewed head: 40be9b960b2e1b493238471e115c1975ab0bae62
Owner decision: Required. See Decision needed.

Review scores

Measure Result What it means
Overall readiness 🦐 gold shrimp (3/6) The focused dependency update has passing CI but retains a concrete runtime compatibility blocker.
Proof confidence 🌊 off-meta tidepool Not applicable: This bot-authored development dependency update is exempt from contributor runtime proof. Passing CI supplements review but does not resolve the unsupported Node minimum; no stored-data contract changes.
Patch quality 🦐 gold shrimp (3/6) 1 actionable review finding remain.

Verification

Check Result Evidence
Real behavior Not applicable Not applicable: This bot-authored development dependency update is exempt from contributor runtime proof. Passing CI supplements review but does not resolve the unsupported Node minimum; no stored-data contract changes.
Evidence reviewed 6 items Introduced dependency change: The pinned introduction changes the direct React development dependency from ^29.1.1 to ^30.1.1. The lockfile replaces React's compatible jsdom 29 dependency with required jsdom 30.1.1; the base's separate jsdom 30.0.1 snapshot was optional.
Current main support contract: Current main declares Node >=22.22.0 and retains ^29.1.1 in the React package. CONTRIBUTING.md directs contributors to the declared Node version, and React's Vitest configuration explicitly uses jsdom.
Verified upstream engine requirement: The upstream 30.1.1 manifest confirms engines.node is ^22.22.2 || ^24.15.0 || >=26.0.0. Its repository metadata verifies jsdom/jsdom ownership. This dependency contract applies because the PR directly requires jsdom and the React test configuration selects it.
Findings 1 actionable finding [P2] Keep jsdom within the supported Node range
Security None None.

How this fits together

The React SDK supplies feature-flag hooks and server evaluation helpers. Its tests use jsdom to simulate browser rendering and storage; this dependency change affects repository development and testing.

flowchart LR
  A[Node runtime] --> B[Dependency installation]
  C[Locked jsdom version] --> B
  B --> D[Simulated browser]
  E[React SDK tests] --> D
  D --> F[Test results]
Loading

Decision needed

Question Recommendation
Should jsdom 30 remain deferred, or should the repository intentionally narrow its supported Node versions to adopt it? Preserve the Node contract: Retain compatible jsdom 29 and defer the major upgrade.

Why: The merged dependency refresh explicitly preserved the existing floor; changing that promise requires an intentional compatibility decision.

Before merge

  • Keep jsdom within the supported Node range (P2) - The prior blocker remains: jsdom 30.1.1 requires ^22.22.2 || ^24.15.0 || >=26.0.0, while the repository still supports Node >=22.22.0. Making it the required React test environment leaves contributors at the declared minimum using an unsupported dependency. Retain a compatible version or obtain approval for a coordinated runtime-contract change and validate its minimum; Node 24.x CI does not cover this case.
  • Resolve merge risk (P1) - Contributors using declared-supported Node 22.22.0 or 22.22.1 would receive a required test dependency that excludes their runtime; the PR supplies no coordinated support-contract change or minimum-version validation.
  • Complete next step (P2) - Resolve the declared Node compatibility mismatch and validate frozen installation and React tests at the approved supported minimum.
  • Resolve maintainer decision - Resolve the maintainer decision shown above before merge.

Findings

  • [P2] Keep jsdom within the supported Node range — packages/react/package.json:79
Agent review details

Security

None.

Review metrics

None.

Merge-risk options

Maintainer options:

  1. Defer the incompatible major (recommended)
    Pause this upgrade while retaining the existing Node support contract.
  2. Coordinate the support change
    After explicit approval, update the runtime contract and verify frozen installation and React tests at the chosen minimum.

Technical review

Best possible solution:

Keep the React test environment compatible with the declared Node contract until a separately approved runtime-support update validates installation and tests at the new minimum.

Do we have a high-confidence way to reproduce the issue?

Yes, source establishes the engine-contract mismatch: Node 22.22.0 satisfies the repository requirement but fails jsdom 30.1.1’s requirement. Installation and runtime failure were not executed in this read-only review.

Is this the best way to solve the issue?

No, the unconditional major upgrade conflicts with the declared runtime contract. Retaining the compatible dependency is safer until a coordinated support update is approved.

Full review comments:

  • [P2] Keep jsdom within the supported Node range — packages/react/package.json:79
    The prior blocker remains: jsdom 30.1.1 requires ^22.22.2 || ^24.15.0 || >=26.0.0, while the repository still supports Node >=22.22.0. Making it the required React test environment leaves contributors at the declared minimum using an unsupported dependency. Retain a compatible version or obtain approval for a coordinated runtime-contract change and validate its minimum; Node 24.x CI does not cover this case.
    Confidence: 0.99

Overall correctness: patch is incorrect
Overall confidence: 0.98

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 7be7204292c9.

Labels

Label changes:

No label changes.

Label justifications:

  • P2: This development dependency upgrade has a bounded runtime compatibility blocker.
  • merge-risk: 🚨 compatibility: The required React test dependency excludes Node versions still supported by the repository.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🌊 off-meta tidepool and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Not applicable: This bot-authored development dependency update is exempt from contributor runtime proof. Passing CI supplements review but does not resolve the unsupported Node minimum; no stored-data contract changes.

Evidence

What I checked:

  • Introduced dependency change: The pinned introduction changes the direct React development dependency from ^29.1.1 to ^30.1.1. The lockfile replaces React's compatible jsdom 29 dependency with required jsdom 30.1.1; the base's separate jsdom 30.0.1 snapshot was optional. (packages/react/package.json:79, 40be9b960b2e)
  • Current main support contract: Current main declares Node >=22.22.0 and retains ^29.1.1 in the React package. CONTRIBUTING.md directs contributors to the declared Node version, and React's Vitest configuration explicitly uses jsdom. (package.json:31, 7be7204292c9)
  • Verified upstream engine requirement: The upstream 30.1.1 manifest confirms engines.node is ^22.22.2 || ^24.15.0 || >=26.0.0. Its repository metadata verifies jsdom/jsdom ownership. This dependency contract applies because the PR directly requires jsdom and the React test configuration selects it. (package.json, 0a117f4581b0)
  • Related merged dependency refresh: build(deps): refresh compatible dependencies and patch Undici #87 explicitly preserved the Node >=22.22.0 floor and deferred jsdom 30 because it raises that floor. Its verified merge commit records the same compatibility intent; it does not implement this upgrade. (f7f30f343461)
  • Re-review continuity: The supplied completed review at this same head identified the Node range mismatch and requested minimum-version installation and React-test validation. The current manifest and lockfile still establish that mismatch. CI uses Node 24.x, which does not cover the declared minimum. (.github/workflows/ci.yml:55, 40be9b960b2e)
  • History inspection limits: Path logs identified recent dependency work by Peter Steinberger and SDK release work by Vincent Koc. Deeper blame and follow-history inspection failed when unavailable historical objects triggered a denied promisor fetch; no source-line introduction attribution is asserted. The attempted GitHub canonical title search was also denied. (packages/react/package.json, 7be7204292c9)

Likely related people:

  • steipete: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)
  • Vincent Koc: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)

Rank-up moves

Optional improvements that raise the rating; they are not merge blockers.

  • Resolve the Node support contract and validate frozen installation and React tests at the chosen supported minimum.

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (2 earlier review cycles)
  • reviewed 2026-09-30T18:54:00.507Z sha df93119 :: blocked before merge. :: [P2] Keep jsdom within the supported Node range
  • reviewed 2026-10-02T17:07:18.101Z sha 40be9b9 :: blocked before merge. :: [P2] Keep jsdom within the supported Node range

Bumps [jsdom](https://github.com/jsdom/jsdom) from 29.1.1 to 30.1.1.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Commits](jsdom/jsdom@v29.1.1...v30.1.1)

---
updated-dependencies:
- dependency-name: jsdom
  dependency-version: 30.1.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot changed the title chore(deps-dev): bump jsdom from 29.1.1 to 30.1.1 build(deps-dev): bump jsdom from 29.1.1 to 30.1.1 Oct 2, 2026
@dependabot
dependabot Bot force-pushed the dependabot/npm_and_yarn/jsdom-30.1.1 branch from df93119 to 40be9b9 Compare October 2, 2026 17:03
@steipete

steipete commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Thanks for the update. Closing this major upgrade to preserve the documented Node.js floor. jsdom 30.1.1 requires ^22.22.2 || ^24.15.0 || >=26.0.0, but Krillswitch supports Node.js >=22.22.0. The green Node 24 CI does not cover that compatibility gap. Revisit alongside an intentional, documented runtime-floor change; compatible dependency updates are being consolidated separately.

@steipete steipete closed this Oct 7, 2026
@dependabot @github

dependabot Bot commented on behalf of github Oct 7, 2026

Copy link
Copy Markdown
Contributor Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P2 Normal priority bug or improvement with limited blast radius. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant