feat: once

This commit is contained in:
cha0s 2024-11-10 18:18:59 -06:00
parent 500ada03ff
commit 9262e7b1a8

View File

@ -2,19 +2,22 @@ import fastCall from './fast-call.js';
export default class EventEmitter {
$$listeners = {};
addListener(type, listener) {
addListener(type, listener, options = {}) {
if (!this.$$listeners[type]) {
this.$$listeners[type] = new Set();
this.$$listeners[type] = new Map();
}
this.$$listeners[type].add(listener);
this.$$listeners[type].set(listener, options);
}
invoke(type, ...args) {
const listeners = this.$$listeners[type];
if (!listeners) {
return;
}
for (const listener of listeners) {
for (const [listener, options] of listeners) {
fastCall(listener, undefined, args);
if (options.once) {
listeners.delete(listener);
}
}
}
removeListener(type, listener) {