P0c: Private Fields (#) in Happy DOM Klassen patchen #80
Labels
No labels
bug
docs
feature
housekeeping
html-spec
performance
react-compat
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
glow-all/true-headless-browser#80
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
P0c: Private Fields (#) in Happy DOM Klassen — Hotfix
Priority: HIGH
Betrifft: youtube.com, airbnb.com, alle Polymer/Lit-Seiten
Fehler:
TypeError: Cannot access private method or accessor (evaluating 'this.#onSlotChange')Problembeschreibung
Happy DOM's
HTMLSlotElementimplementiert#onSlotChangeals echten JavaScript Private Field(ECMAScript Stage 4). Wenn dieser Code via
eval()in unserem Realm ausgeführt wird,ist die Private Field-Bindung verloren —
[[HomeObject]]zeigt auf den eval()-Scope,nicht auf die Original-Class-Definition.
Betroffene Klassen:
HTMLSlotElement→#onSlotChangeHTMLFormElement→ potenziell weitereOption A: Happy DOM direkt patchen (EMPFEHLUNG)
Akzeptanzkriterien
new HTMLSlotElement()wirft keinen TypeError wegen #Betroffene Dateien
src/dom/slot-patch.tssrc/pages/page.tstests/unit/sprint17-private-fields.test.ts❌ Nicht implementiert — Erfordert Happy DOM-Patching
TypeError: Cannot access private method or accessor (evaluating 'this.#onSlotChange')Private Fields (#) sind lexikal an die Original-Class-Definition gebunden (
[[HomeObject]]).Unser
with(_win)+eval()Realm hat keinen Einfluss auf die Bindung.Benötigt: Happy DOM's
HTMLSlotElementpatchen:#onSlotChange→_onSlotChangesowie ggf.
HTMLFormElement.Aufwandsabschätzung: ~4h für Analyse + Testing + Hotfix
✅ Implementiert — Sprint 17
Patch:
scripts/patch-happy-dom-private-fields.cjsWas wurde gemacht
Happy DOM's
Element.jsverwendet 3 private Fields:#onSlotChange— Shadow DOM Slot-Routing#addIdentifierToWindow—getElementById()-Unterstützung#removeIdentifierFromWindow— Aufräumen bei Element-RemovalPatch: Alle
#methodName()→_methodName()innode_modules/happy-dom/lib/nodes/element/Element.jsAutomatisch via Postinstall
Läuft nach jedem
bun install.Tests: 9/9 pass
slotchangeEvent-DispatchinggetElementById()— addIdentifierToWindowwith(_win)-Sandbox-SimulationRegression: 1519 pass / 4 pre-existing fail (0 new)