UNPKG

ts-bus

Version:

<p align="center"> <img src="logo.png" width="100" height="100"/> </p>

98 lines 3.77 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); // Using EventEmitter2 in order to be able to use wildcards to subscribe to all events var eventemitter2_1 = require("eventemitter2"); function showWarning(msg) { /* istanbul ignore next */ if (process && process.env && process.env.NODE_ENV !== "production") { console.warn(msg); } } function isEventDescriptor(descriptor) { return !!descriptor && descriptor.eventType; } function isPredicateFn(descriptor) { return !isEventDescriptor(descriptor) && typeof descriptor === "function"; } function createEventDefinition(options) { return function (type) { function eventCreator(payload) { // Allow runtime payload checking for plain JavaScript usage if (options && payload) { var testFn = typeof options === "function" ? options : options.test; /* istanbul ignore next */ if (testFn && !testFn(payload)) { showWarning(JSON.stringify(payload) + " does not match expected payload."); } } return { type: type, payload: payload }; } eventCreator.eventType = type; eventCreator.toString = function () { return type; }; // allow String coercion to deliver the eventType return eventCreator; }; } exports.createEventDefinition = createEventDefinition; function defineEvent(type) { showWarning("defineEvent is deprecated and will be removed in the future. Please use createEventDefinition instead."); var eventCreator = function (payload) { return ({ type: type, payload: payload }); }; eventCreator.eventType = type; return eventCreator; } exports.defineEvent = defineEvent; function getEventType(descriptor) { if (isEventDescriptor(descriptor)) return descriptor.eventType; return descriptor; } function filter(predicate, handler) { return function (event) { if (predicate(event)) return handler(event); }; } var EventBus = /** @class */ (function () { function EventBus() { this.emitter = new eventemitter2_1.EventEmitter2({ wildcard: true }); } EventBus.prototype.publish = function (event, meta) { this.emitter.emit(event.type, !meta ? event : __assign({}, event, { meta: __assign({}, event.meta, meta) })); }; EventBus.prototype.subscribe = function (subscription, handler) { // store emitter on closure var emitter = this.emitter; var subscribeToSubdef = function (subdef) { if (isPredicateFn(subdef)) { var filteredHandler_1 = filter(subdef, handler); emitter.on("**", filteredHandler_1); return function () { return emitter.off("**", filteredHandler_1); }; } var type = getEventType(subdef); emitter.on(type, handler); return function () { return emitter.off(type, handler); }; }; var subs = Array.isArray(subscription) ? subscription : [subscription]; var unsubscribers = subs.map(subscribeToSubdef); return function () { return unsubscribers.forEach(function (u) { return u(); }); }; }; return EventBus; }()); exports.EventBus = EventBus; //# sourceMappingURL=EventBus.js.map