From 7fba0f7cad91d313c1f84ffe166ae5d650e11132 Mon Sep 17 00:00:00 2001 From: Oluwatimi Date: Tue, 29 Jul 2025 13:36:11 -0400 Subject: [PATCH 1/4] Fix test events not writable --- packages/polyfill/source/Event.ts | 17 ++++++++++++++--- packages/polyfill/source/EventTarget.ts | 15 +++++++++++++-- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/packages/polyfill/source/Event.ts b/packages/polyfill/source/Event.ts index 0b2390d8..5c21c9c7 100644 --- a/packages/polyfill/source/Event.ts +++ b/packages/polyfill/source/Event.ts @@ -117,9 +117,20 @@ export function fireEvent( if (!list) return; for (const listener of list) { - event.eventPhase = - event.target === currentTarget ? EventPhase.AT_TARGET : phase; - event.currentTarget = currentTarget; + // Safely set eventPhase property only if it's writable + try { + event.eventPhase = + event.target === currentTarget ? EventPhase.AT_TARGET : phase; + } catch { + // eventPhase property may be read-only on native DOM Events + } + + // Safely set currentTarget property only if it's writable + try { + event.currentTarget = currentTarget; + } catch { + // currentTarget property may be read-only on native DOM Events + } try { if (typeof listener === 'object') { diff --git a/packages/polyfill/source/EventTarget.ts b/packages/polyfill/source/EventTarget.ts index ea448660..7e85ed90 100644 --- a/packages/polyfill/source/EventTarget.ts +++ b/packages/polyfill/source/EventTarget.ts @@ -109,8 +109,19 @@ export class EventTarget { // while (target instanceof Node && (target = target.parentNode)) { // path.push(target); // } - event.target = this; - event.srcElement = this; + // Safely set target property only if it's writable (native DOM Events have read-only target) + try { + event.target = this; + } catch { + // target property is read-only on native DOM Events, which is fine + // since the native event already has the correct target + } + + try { + event.srcElement = this; + } catch { + // srcElement property may also be read-only on some implementations + } event[PATH] = path; for (let i = path.length; i--; ) { From 20dfcf358aede8be7faf4a587aef5197938cea56 Mon Sep 17 00:00:00 2001 From: Oluwatimi Date: Tue, 29 Jul 2025 13:50:08 -0400 Subject: [PATCH 2/4] Update prettier --- packages/polyfill/source/Event.ts | 2 +- packages/polyfill/source/EventTarget.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/polyfill/source/Event.ts b/packages/polyfill/source/Event.ts index 5c21c9c7..12ba6e88 100644 --- a/packages/polyfill/source/Event.ts +++ b/packages/polyfill/source/Event.ts @@ -124,7 +124,7 @@ export function fireEvent( } catch { // eventPhase property may be read-only on native DOM Events } - + // Safely set currentTarget property only if it's writable try { event.currentTarget = currentTarget; diff --git a/packages/polyfill/source/EventTarget.ts b/packages/polyfill/source/EventTarget.ts index 7e85ed90..c908a0a2 100644 --- a/packages/polyfill/source/EventTarget.ts +++ b/packages/polyfill/source/EventTarget.ts @@ -116,7 +116,7 @@ export class EventTarget { // target property is read-only on native DOM Events, which is fine // since the native event already has the correct target } - + try { event.srcElement = this; } catch { From 8aa2911be86561ed63ea335d50d4f59c7c4ab35f Mon Sep 17 00:00:00 2001 From: Oluwatimi Date: Tue, 29 Jul 2025 13:51:39 -0400 Subject: [PATCH 3/4] Update --- packages/polyfill/source/Event.ts | 6 ++++-- packages/polyfill/source/EventTarget.ts | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/polyfill/source/Event.ts b/packages/polyfill/source/Event.ts index 12ba6e88..1dfe5508 100644 --- a/packages/polyfill/source/Event.ts +++ b/packages/polyfill/source/Event.ts @@ -122,14 +122,16 @@ export function fireEvent( event.eventPhase = event.target === currentTarget ? EventPhase.AT_TARGET : phase; } catch { - // eventPhase property may be read-only on native DOM Events + // eventPhase property is read-only on native DOM Events + // Event will still function but may have different phase behavior } // Safely set currentTarget property only if it's writable try { event.currentTarget = currentTarget; } catch { - // currentTarget property may be read-only on native DOM Events + // currentTarget property is read-only on native DOM Events + // Event will still function but currentTarget may not update correctly during bubbling } try { diff --git a/packages/polyfill/source/EventTarget.ts b/packages/polyfill/source/EventTarget.ts index c908a0a2..08528fd8 100644 --- a/packages/polyfill/source/EventTarget.ts +++ b/packages/polyfill/source/EventTarget.ts @@ -113,8 +113,8 @@ export class EventTarget { try { event.target = this; } catch { - // target property is read-only on native DOM Events, which is fine - // since the native event already has the correct target + // target property is read-only on native DOM Events + // Event will still function but may have different target than expected } try { From c0e9de9d50940b73ec218242bda286806e009d32 Mon Sep 17 00:00:00 2001 From: Oluwatimi Date: Tue, 29 Jul 2025 13:52:54 -0400 Subject: [PATCH 4/4] Add changeset --- .changeset/silver-jokes-tease.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/silver-jokes-tease.md diff --git a/.changeset/silver-jokes-tease.md b/.changeset/silver-jokes-tease.md new file mode 100644 index 00000000..c9b39f4f --- /dev/null +++ b/.changeset/silver-jokes-tease.md @@ -0,0 +1,5 @@ +--- +'@remote-dom/polyfill': minor +--- + +Fix trying to write to readonly events