UNPKG

ts-event-bus

Version:
40 lines (31 loc) 1.23 kB
"use strict"; 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; }