UNPKG

@zodash/event

Version:
77 lines (76 loc) 2.1 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventEmitter = exports.Event = void 0; const once_1 = require("@zodash/once"); const LISTENERS = Symbol('listeners'); class Event { constructor() { this[_a] = {}; } get listeners() { return this[LISTENERS]; } on(event, listener) { if (!this.listeners[event]) { this.listeners[event] = []; } this.listeners[event].push(listener); return this; } off(event, listener) { if (this.listeners[event]) { const all = this.listeners[event]; all.splice(all.indexOf(listener), 1); } return this; } once(event, listener) { if (!this.listeners[event]) { this.listeners[event] = []; } this.listeners[event].push(once_1.once(listener)); return this; } emit(event, ...args) { if (this.listeners[event]) { const partListeners = this.listeners[event]; partListeners.forEach((listener) => { if (event === 'error') { return listener.apply(this, args); } try { listener.apply(this, args); } catch (error) { this.emit('error', error); } }); return this; } // if no error listener, just throw if (event === 'error') { if (args[0] instanceof Error) { throw args[0]; } throw new Error(String(args[0])); } return this; } addListener(event, listener) { return this.on(event, listener); } removeListener(event, listener) { return this.off(event, listener); } removeAllListeners(event) { if (this.listeners[event]) { delete this.listeners[event]; } return this; } } exports.Event = Event; _a = LISTENERS; // alias of Event exports.EventEmitter = Event;