UNPKG

acelga-bus

Version:

An extensible typescript message bus with support for middlewares

55 lines 2.18 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const executor_1 = require("./executor"); class Dispatcher { constructor() { this.subscriptions = new Map(); this.globalSubscriptions = new Set(); } on(eventType, callback) { let callbacksSet = this.subscriptions.get(eventType); if (!callbacksSet) callbacksSet = new Set(); callbacksSet.add(callback); this.subscriptions.set(eventType, callbacksSet); } onAny(callback) { this.globalSubscriptions.add(callback); } trigger(event) { return __awaiter(this, void 0, void 0, function* () { if (!event) return; const callbacks = this.subscriptions.get(event.constructor); const future = []; if (callbacks) { future.push(new executor_1.Executor(event, ...callbacks)); } if (this.globalSubscriptions.size) { future.push(new executor_1.Executor(event, ...this.globalSubscriptions)); } return Promise.all(future.map(executor => executor.execStopOnFail())) .then(() => { }); }); } off(eventType, callback) { if (!callback) { this.subscriptions.delete(eventType); return; } const callbacks = this.subscriptions.get(eventType); if (!callbacks) return; callbacks.delete(callback); } } exports.Dispatcher = Dispatcher; //# sourceMappingURL=dispatcher.js.map