UNPKG

acelga-bus

Version:

An extensible typescript message bus with support for middlewares

64 lines 2.55 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"); const middlewareChain_1 = require("./middlewareChain"); class Receiver { constructor() { this.middlewareChain = new middlewareChain_1.MiddlewareChain(); 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* () { const result = yield this.middlewareChain.execute(event); const callbacks = this.subscriptions.get(event.constructor); if (!result) return; const future = []; if (callbacks) { future.push(new executor_1.Executor(result, ...callbacks)); } if (this.globalSubscriptions.size) { future.push(new executor_1.Executor(result, ...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); } pushMiddleware(middleware) { this.middlewareChain.push(middleware); } unshiftMiddleware(middleware) { this.middlewareChain.unshift(middleware); } } exports.Receiver = Receiver; //# sourceMappingURL=receiver.js.map