class EventEmitter {
#events = {};
on(event, listener) {
(this.#events[event] ??= []).push(listener);
return () => this.off(event, listener);
}
once(event, listener) {
const wrapper = (...args) => { listener(...args); this.off(event, wrapper); };
return this.on(event, wrapper);
}
off(event, listener) {
this.#events[event] = (this.#events[event] ?? []).filter((l) => l !== listener);
}
emit(event, ...args) {
(this.#events[event] ?? []).forEach((l) => l(...args));
}
}
// Usage
const bus = new EventEmitter();
const off = bus.on('data', (d) => console.log('received:', d));
bus.emit('data', { id: 1 }); // received: { id: 1 }
off(); // unsubscribe
Create a free account and build your private vault. Share publicly whenever you want.