Skip to content

Commit ea1a2d7

Browse files
jasnellcodebytere
authored andcommitted
events: support dispatching event from event
Co-authored-by: Benjamin Gruenbaum <[email protected]> PR-URL: #34015 Reviewed-By: Denys Otrishko <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]>
1 parent 5ce1533 commit ea1a2d7

File tree

2 files changed

+6
-15
lines changed

2 files changed

+6
-15
lines changed

lib/internal/event_target.js

+3-11
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ const {
77
Map,
88
NumberIsInteger,
99
Object,
10-
Set,
1110
Symbol,
1211
SymbolFor,
1312
SymbolToStringTag,
@@ -199,7 +198,6 @@ class EventTarget {
199198
static [kIsEventTarget] = true;
200199

201200
[kEvents] = new Map();
202-
#emitting = new Set();
203201

204202
[kNewListener](size, type, listener, once, capture, passive) {}
205203
[kRemoveListener](size, type, listener, capture) {}
@@ -266,25 +264,20 @@ class EventTarget {
266264
}
267265

268266
dispatchEvent(event) {
269-
if (!(event instanceof Event)) {
267+
if (!(event instanceof Event))
270268
throw new ERR_INVALID_ARG_TYPE('event', 'Event', event);
271-
}
272269

273-
if (!isEventTarget(this)) {
270+
if (!isEventTarget(this))
274271
throw new ERR_INVALID_THIS('EventTarget');
275-
}
276272

277-
if (this.#emitting.has(event.type) ||
278-
event[kTarget] !== null) {
273+
if (event[kTarget] !== null)
279274
throw new ERR_EVENT_RECURSION(event.type);
280-
}
281275

282276
const root = this[kEvents].get(event.type);
283277
if (root === undefined || root.next === undefined)
284278
return true;
285279

286280
event[kTarget] = this;
287-
this.#emitting.add(event.type);
288281

289282
let handler = root.next;
290283
let next;
@@ -310,7 +303,6 @@ class EventTarget {
310303
handler = next;
311304
}
312305

313-
this.#emitting.delete(event.type);
314306
event[kTarget] = undefined;
315307

316308
return event.defaultPrevented !== true;

test/parallel/test-eventtarget.js

+3-4
Original file line numberDiff line numberDiff line change
@@ -293,13 +293,12 @@ ok(EventTarget);
293293

294294
// Once handler only invoked once
295295
const ev = common.mustCall((event) => {
296-
throws(() => eventTarget.dispatchEvent(new Event('foo')), {
297-
code: 'ERR_EVENT_RECURSION'
298-
});
296+
// Can invoke the same event name recursively
297+
eventTarget.dispatchEvent(new Event('foo'));
299298
});
300299

301300
// Errors in a handler won't stop calling the others.
302-
eventTarget.addEventListener('foo', ev);
301+
eventTarget.addEventListener('foo', ev, { once: true });
303302

304303
eventTarget.dispatchEvent(new Event('foo'));
305304
}

0 commit comments

Comments
 (0)