coincident
Version:
An Atomics based Proxy to simplify, and synchronize, Worker related tasks
24 lines (22 loc) • 750 B
JavaScript
const { addEventListener } = EventTarget.prototype;
const eventsHandler = new WeakMap;
Reflect.defineProperty(EventTarget.prototype, 'addEventListener', {
value(type, listener, ...options) {
const invoke = options.at(0)?.invoke;
if (invoke) {
let map = eventsHandler.get(this);
if (!map) {
map = new Map;
eventsHandler.set(this, map);
}
map.set(type, [].concat(invoke));
delete options[0].invoke;
}
return addEventListener.call(this, type, listener, ...options);
},
});
export default event => {
const { currentTarget, target, type } = event;
const methods = eventsHandler.get(currentTarget || target)?.get(type);
if (methods) for (const method of methods) event[method]();
};