ts-bus
Version:
<p align="center"> <img src="logo.png" width="100" height="100"/> </p>
98 lines • 3.77 kB
JavaScript
;
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