ts-event-bus
Version:
Distributed messaging in Typescript
40 lines (31 loc) • 1.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.combineEvents = combineEvents;
exports.createEventBus = createEventBus;
var _Slot = require("./Slot");
var _Transport = require("./Transport");
// Explanation to how this type function: https://fettblog.eu/typescript-union-to-intersection/
// tl;dr Wrapping and unwrapping the generic into a fn force the unions to be an intersection
function combineEvents(...args) {
const keys = args.reduce((acc, arg) => {
acc.push.apply(acc, Object.keys(arg));
return acc;
}, []);
const uniqKeys = [...new Set(keys)];
if (keys.length > uniqKeys.length) {
throw new Error('ts-event-bus: duplicate slots encountered in combineEvents.');
}
return Object.assign({}, ...args);
}
function createEventBus(args) {
const transports = (args.channels || []).map(c => new _Transport.Transport(c, args.ignoredEvents));
const eventBus = {};
for (const event in args.events) {
if (args.events.hasOwnProperty(event) && (!args.ignoredEvents || args.ignoredEvents && !args.ignoredEvents.includes(event))) {
eventBus[event] = (0, _Slot.connectSlot)(event, transports, args.events[event].config);
}
}
return eventBus;
}