UNPKG

@distributed-functions/core

Version:
121 lines 10.7 kB
import { CallHandler } from './call-handler'; import { CallSubscriberNotFoundError, EventSubscriberNotFoundError } from './errors'; import { EventHandler } from './event-handler'; import { bindTransportToCalls, bindTransportToEvents } from './transport'; export const InMemoryTransportName = 'InMemoryTransport'; export const InMemoryTransport = (props = {}) => { var _a, _b, _c; const ctx = () => { return props.ctx ? props.ctx() : {}; }; const { callsToPublish, eventsToPublish } = props; // # Logger let logger = (_a = props.logger) !== null && _a !== void 0 ? _a : { info: console.log, error: console.error, warn: console.warn, child: () => { return console; } }; if (logger.child) { logger = logger.child({ dfTransport: InMemoryTransportName }); } // # Subscribe maps let callSubscribersMap = {}; let eventSubscribersMap = {}; // # PUBLISH CALL const publishCall = async (callRequest, _, assignedCalls, // # This needed to send other here some assignedCalls from external Transport assignedEvents) => { const callSubscriber = callSubscribersMap[callRequest.name]; if (!callSubscriber) { throw new CallSubscriberNotFoundError(callRequest.name); } return callSubscriber.run(callRequest, ctx(), { call: assignedCalls !== null && assignedCalls !== void 0 ? assignedCalls : bindTransportToCalls(publishCall, callSubscriber.callsToPublish || {}), event: assignedEvents !== null && assignedEvents !== void 0 ? assignedEvents : bindTransportToEvents(publishEvent, callSubscriber.eventsToPublish || {}) }); }; const transportAssignedCalls = bindTransportToCalls(publishCall, (_b = props.callsToPublish) !== null && _b !== void 0 ? _b : {}); // # PUBLISH EVENTS const publishEvent = async (event, _, assignedCalls, // # This needed to send other here some assignedCalls from external Transport assignedEvents) => { const eventSubscriberList = eventSubscribersMap[event.name]; if (!eventSubscriberList) { throw new EventSubscriberNotFoundError(event.name); } eventSubscriberList.map(async (eventSubscriber) => { await eventSubscriber.run(event, ctx(), { call: assignedCalls !== null && assignedCalls !== void 0 ? assignedCalls : bindTransportToCalls(publishCall, eventSubscriber.callsToPublish || {}), event: assignedEvents !== null && assignedEvents !== void 0 ? assignedEvents : bindTransportToEvents(publishEvent, eventSubscriber.eventsToPublish || {}) }); }); }; // eslint-disable-next-line @typescript-eslint/no-unused-vars const transportAssignedEvents = bindTransportToEvents(publishEvent, (_c = props.eventsToPublish) !== null && _c !== void 0 ? _c : {}); return { // # INIT init: async () => { return; }, stop: async () => { return; }, restart: async () => { return; }, destroy: async () => { callSubscribersMap = {}; eventSubscribersMap = {}; }, ctx, // UTILS checkCallHandlerExist: (callName) => { return !!callSubscribersMap[callName]; }, getCallSub: (callName) => { return callSubscribersMap[callName]; }, // # CALL call: Object.assign({ publish: publishCall, subscribe: async (call, run, options) => { callSubscribersMap[call.name] = CallHandler({ run, call, parallel: options === null || options === void 0 ? void 0 : options.parallel, callsToPublish, eventsToPublish }); }, subscribeHandler: async (callHandler) => { callSubscribersMap[callHandler.call.name] = callHandler; return; } }, transportAssignedCalls), // # EVENT event: Object.assign({ publish: publishEvent, subscribe: async (event, run, options) => { const es = eventSubscribersMap[event.eventName]; const eventHandler = EventHandler({ event, run, parallel: options === null || options === void 0 ? void 0 : options.parallel, persistent: options === null || options === void 0 ? void 0 : options.persistent }); if (es) { es.push(eventHandler); } else { eventSubscribersMap[event.eventName] = [eventHandler]; } }, subscribeHandler: async (eventHandler) => { const es = eventSubscribersMap[eventHandler.event.eventName]; if (es) { es.push(eventHandler); } else { eventSubscribersMap[eventHandler.event.eventName] = [eventHandler]; } return; } }, transportAssignedEvents) }; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LWluLW1lbW9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc3BvcnQtaW4tbWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUE7QUFDNUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRXBGLE9BQU8sRUFBRSxZQUFZLEVBQXFDLE1BQU0saUJBQWlCLENBQUE7QUFHakYsT0FBTyxFQUFhLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXBGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFBO0FBV3hELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLFFBS0ksRUFBRSxFQUMwQixFQUFFOztJQUNsQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUU7UUFDZixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUUsRUFBVSxDQUFBO0lBQzlDLENBQUMsQ0FBQTtJQUVELE1BQU0sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRWpELFdBQVc7SUFDWCxJQUFJLE1BQU0sR0FBVyxNQUFBLEtBQUssQ0FBQyxNQUFNLG1DQUFJO1FBQ25DLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRztRQUNqQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDVixPQUFPLE9BQU8sQ0FBQTtRQUNoQixDQUFDO0tBQ0YsQ0FBQTtJQUVELElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNwQixXQUFXLEVBQUUscUJBQXFCO1NBQ25DLENBQUMsQ0FBQTtLQUNIO0lBRUQsbUJBQW1CO0lBQ25CLElBQUksa0JBQWtCLEdBQW9ELEVBQUUsQ0FBQTtJQUM1RSxJQUFJLG1CQUFtQixHQUE0RCxFQUFFLENBQUE7SUFFckYsaUJBQWlCO0lBRWpCLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFDdkIsV0FBK0IsRUFDL0IsQ0FBNkMsRUFDN0MsYUFBbUMsRUFBRSw4RUFBOEU7SUFDbkgsY0FBcUMsRUFDUCxFQUFFO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQThDLENBQUE7UUFFeEcsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixNQUFNLElBQUksMkJBQTJCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ3hEO1FBRUQsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM1QyxJQUFJLEVBQUUsYUFBYSxhQUFiLGFBQWEsY0FBYixhQUFhLEdBQUksb0JBQW9CLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO1lBQzdGLEtBQUssRUFBRSxjQUFjLGFBQWQsY0FBYyxjQUFkLGNBQWMsR0FBSSxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7U0FDbkcsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0lBRUQsTUFBTSxzQkFBc0IsR0FBdUIsb0JBQW9CLENBQ3JFLFdBQVcsRUFDWCxNQUFBLEtBQUssQ0FBQyxjQUFjLG1DQUFLLEVBQVMsQ0FDbkMsQ0FBQTtJQUVELG1CQUFtQjtJQUVuQixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQ3hCLEtBQTBCLEVBQzFCLENBQTJCLEVBQzNCLGFBQW1DLEVBQUUsOEVBQThFO0lBQ25ILGNBQXFDLEVBQ3RCLEVBQUU7UUFDakIsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFzRCxDQUFBO1FBRWhILElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUN4QixNQUFNLElBQUksNEJBQTRCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ25EO1FBRUQsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFBRTtZQUNoRCxNQUFNLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLEVBQUUsYUFBYSxhQUFiLGFBQWEsY0FBYixhQUFhLEdBQUksb0JBQW9CLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO2dCQUM5RixLQUFLLEVBQUUsY0FBYyxhQUFkLGNBQWMsY0FBZCxjQUFjLEdBQUkscUJBQXFCLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO2FBQ3BHLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0lBRUQsNkRBQTZEO0lBQzdELE1BQU0sdUJBQXVCLEdBQXdCLHFCQUFxQixDQUN4RSxZQUFZLEVBQ1osTUFBQSxLQUFLLENBQUMsZUFBZSxtQ0FBSyxFQUFTLENBQ3BDLENBQUE7SUFFRCxPQUFPO1FBQ0wsU0FBUztRQUNULElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtZQUNmLE9BQU07UUFDUixDQUFDO1FBQ0QsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2YsT0FBTTtRQUNSLENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbEIsT0FBTTtRQUNSLENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbEIsa0JBQWtCLEdBQUcsRUFBRSxDQUFBO1lBQ3ZCLG1CQUFtQixHQUFHLEVBQUUsQ0FBQTtRQUMxQixDQUFDO1FBRUQsR0FBRztRQUVILFFBQVE7UUFFUixxQkFBcUIsRUFBRSxDQUFDLFFBQWdCLEVBQUUsRUFBRTtZQUMxQyxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN2QyxDQUFDO1FBQ0QsVUFBVSxFQUFFLENBQUMsUUFBZ0IsRUFBRSxFQUFFO1lBQy9CLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDckMsQ0FBQztRQUVELFNBQVM7UUFDVCxJQUFJLGtCQUNGLE9BQU8sRUFBRSxXQUFXLEVBQ3BCLFNBQVMsRUFBRSxLQUFLLEVBQ2QsSUFBTyxFQUNQLEdBQW1DLEVBQ25DLE9BRUMsRUFDYyxFQUFFO2dCQUNqQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDO29CQUMxQyxHQUFHO29CQUNILElBQUk7b0JBQ0osUUFBUSxFQUFFLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxRQUFRO29CQUMzQixjQUFjO29CQUNkLGVBQWU7aUJBQ2hCLENBQUMsQ0FBQTtZQUNKLENBQUMsRUFDRCxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsV0FBb0UsRUFBRSxFQUFFO2dCQUMvRixrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQTtnQkFFdkQsT0FBTTtZQUNSLENBQUMsSUFDRSxzQkFBc0IsQ0FDMUI7UUFFRCxVQUFVO1FBQ1YsS0FBSyxrQkFDSCxPQUFPLEVBQUUsWUFBWSxFQUNyQixTQUFTLEVBQUUsS0FBSyxFQUNkLEtBQVEsRUFDUixHQUFvQyxFQUNwQyxPQUdDLEVBQ2MsRUFBRTtnQkFDakIsTUFBTSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUMvQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUM7b0JBQ2hDLEtBQUs7b0JBQ0wsR0FBRztvQkFDSCxRQUFRLEVBQUUsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFFBQVE7b0JBQzNCLFVBQVUsRUFBRSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsVUFBVTtpQkFDaEMsQ0FBQyxDQUFBO2dCQUVGLElBQUksRUFBRSxFQUFFO29CQUNOLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7aUJBQ3RCO3FCQUFNO29CQUNMLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFBO2lCQUN0RDtZQUNILENBQUMsRUFDRCxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsWUFBMkQsRUFBaUIsRUFBRTtnQkFDckcsTUFBTSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtnQkFFNUQsSUFBSSxFQUFFLEVBQUU7b0JBQ04sRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtpQkFDdEI7cUJBQU07b0JBQ0wsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFBO2lCQUNuRTtnQkFFRCxPQUFNO1lBQ1IsQ0FBQyxJQUNFLHVCQUF1QixDQUMzQjtLQUNGLENBQUE7QUFDSCxDQUFDLENBQUEifQ==