UNPKG

nests

Version:

Fast and easy state storage with a lot of control.

33 lines (32 loc) 1.19 kB
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); }; } } }