UNPKG

nests

Version:

Fast and easy state storage with a lot of control.

39 lines (38 loc) 1.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const Events_1 = __importDefault(require("./Events")); class EventEmitter { constructor() { this.listeners = Object.values(Events_1.default).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_1.default)) { this[event.toLowerCase()] = (data) => { this.emit(event, data); }; } } } exports.default = EventEmitter;