export default class EventEmitter {
constructor() {
this.events = new Map();
}
on(eventName, listener) {
if (!this.events.has(eventName)) {
this.events.set(eventName, []);
}
const listeners = this.events.get(eventName);
listeners.push(listener);
return {
off: () => {
const index = listeners.indexOf(listener);
if (index !== -1) {
listeners.splice(index, 1);
}
},
};
}
emit(eventName, ...args) {
if (!this.events.has(eventName)) {
return false;
}
const listeners = this.events.get(eventName);
if (listeners.length === 0) {
return false;
}
for (const listener of listeners) {
listener(...args);
}
return true;
}
}