UNPKG

@methodus/server

Version:

Server components for @methodus workflow

65 lines 2.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EmitterPlugin = exports.CustomMessageServer = exports.CustomMessageRouter = exports.resultEmitter = exports.sharedEmitter = void 0; const tslib_1 = require("tslib"); require("reflect-metadata"); const events_1 = require("events"); const commons_1 = tslib_1.__importDefault(require("@methodus/framework-decorators/commons")); const serversList_1 = require("../../servers/serversList"); const metadataKey = 'methodus'; exports.sharedEmitter = new events_1.EventEmitter(); exports.resultEmitter = new events_1.EventEmitter(); class CustomMessageRouter { constructor(obj) { this.prefix = ''; const proto = commons_1.default.util.maybeProto(obj); const methodus = commons_1.default.util.maybeMethodus(obj)[obj.name]; const existingClassMetadata = Reflect.getOwnMetadata(metadataKey, proto) || {}; existingClassMetadata.returnMessages = true; Reflect.defineMetadata(metadataKey, existingClassMetadata, proto); Object.keys(methodus._descriptors).forEach((itemKey) => { const item = methodus._descriptors[itemKey]; exports.sharedEmitter.on(item.verb + '_' + item.route, (data, callback) => tslib_1.__awaiter(this, void 0, void 0, function* () { const functionArgs = []; methodus._descriptors[itemKey].params.forEach((xitem) => { functionArgs[xitem.index] = data.params[xitem.name]; }); try { const result = yield proto[itemKey](...functionArgs, data.securityContext); exports.resultEmitter.emit(itemKey, result); } catch (error) { commons_1.default.logger.error(error); } })); }); } } exports.CustomMessageRouter = CustomMessageRouter; class CustomMessageServer { useClass(classType, methodType) { return new CustomMessageRouter(classType); } sendMessage(verb, route, params, paramsMap, securityContext) { exports.sharedEmitter.emit(`${verb}_${route}`, { params, securityContext }); } } exports.CustomMessageServer = CustomMessageServer; class EmitterPlugin { constructor() { this.name = 'Plugin'; } register(server, parentServer) { commons_1.default.logger.info(`> Starting Custom ${server.type.name} server`); const app = new CustomMessageServer(); serversList_1.Servers.set(server.instanceId, server.type.name, app); } send(methodus, functionArgs, paramsMap, securityContext) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return messageServer.sendMessage(methodus.verb, methodus.route, functionArgs, paramsMap, securityContext); }); } } exports.EmitterPlugin = EmitterPlugin; const messageServer = new CustomMessageServer(); //# sourceMappingURL=emitter.plugin.js.map