@distributed-functions/core
Version:
Distributed Functions for TypeScript
121 lines • 10.7 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LWluLW1lbW9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc3BvcnQtaW4tbWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUE7QUFDNUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRXBGLE9BQU8sRUFBRSxZQUFZLEVBQXFDLE1BQU0saUJBQWlCLENBQUE7QUFHakYsT0FBTyxFQUFhLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXBGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFBO0FBV3hELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLFFBS0ksRUFBRSxFQUMwQixFQUFFOztJQUNsQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUU7UUFDZixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUUsRUFBVSxDQUFBO0lBQzlDLENBQUMsQ0FBQTtJQUVELE1BQU0sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRWpELFdBQVc7SUFDWCxJQUFJLE1BQU0sR0FBVyxNQUFBLEtBQUssQ0FBQyxNQUFNLG1DQUFJO1FBQ25DLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRztRQUNqQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDVixPQUFPLE9BQU8sQ0FBQTtRQUNoQixDQUFDO0tBQ0YsQ0FBQTtJQUVELElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZ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