nests
Version:
Fast and easy state storage with a lot of control.
33 lines (32 loc) • 1.19 kB
JavaScript
import Events from "./Events";
export default class EventEmitter {
constructor() {
this.listeners = Object.values(Events).reduce((acc, val) => ((acc[val] = new Set()), acc), {});
this.on = function (event, listener) {
if (this.listeners[event].has(listener)) {
throw Error(`This listener on ${event} already exists.`);
}
this.listeners[event].add(listener);
};
this.once = function (event, listener) {
const onceListener = (event, data) => {
this.off(event, onceListener);
listener(event, data);
};
this.on(event, onceListener);
};
this.off = function (event, listener) {
this.listeners[event].delete(listener);
};
this.emit = function (event, data) {
for (const listener of this.listeners[event]) {
listener(event, data);
}
};
for (const event of Object.values(Events)) {
this[event.toLowerCase()] = (data) => {
this.emit(event, data);
};
}
}
}