UNPKG

@boost/core

Version:

Robust pipeline for creating dev tools that separate logic into routines and tasks.

74 lines (73 loc) 2.62 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const camelCase_1 = __importDefault(require("lodash/camelCase")); const upperFirst_1 = __importDefault(require("lodash/upperFirst")); const constants_1 = require("./constants"); class Emitter { constructor() { this.listeners = new Map(); } /** * Remove all listeners for the defined event name. */ clearListeners(eventName) { this.getListeners(eventName).clear(); return this; } /** * Syncronously execute listeners for the defined event and arguments. */ emit(eventName, args = []) { Array.from(this.getListeners(eventName)).some(listener => listener(...args) === false); return this; } /** * Return all event names with registered listeners. */ getEventNames() { return Array.from(this.listeners.keys()); } /** * Return a set of listeners for a specific event name. */ getListeners(eventName) { if (!eventName.match(constants_1.EVENT_NAME_PATTERN)) { throw new Error(`Invalid event name "${eventName}". ` + 'May only contain dashes, periods, and lowercase characters.'); } if (!this.listeners.has(eventName)) { this.listeners.set(eventName, new Set()); } return this.listeners.get(eventName); } /** * Remove a listener function from a specific event name. */ off(eventName, listener) { this.getListeners(eventName).delete(listener); return this; } /** * Register a listener function to a specific event name. */ on(eventName, listener) { if (typeof listener !== 'function') { throw new TypeError(`Invalid event listener for "${eventName}", must be a function.`); } let eventProp = eventName; const args = ['listener']; if (eventName.includes('.')) { const [scope, event] = eventName.split('.', 2); args.push(`'${scope}'`); eventProp = event; } // eslint-disable-next-line no-console console.warn(`Boost emitter has been deprecated. Please migrate \`on('${eventName}', listener)\` to the new @boost/event system, \`on${upperFirst_1.default(camelCase_1.default(eventProp))}.listen(${args.join(', ')})\`.'`); this.getListeners(eventName).add(listener); return this; } } exports.default = Emitter;