UNPKG

@methodus/server

Version:

Server components for @methodus workflow

76 lines 3.78 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EmitterPlugin = exports.CustomMessageServer = exports.CustomMessageRouter = exports.resultEmitter = exports.sharedEmitter = void 0; require("reflect-metadata"); const events_1 = require("events"); const framework_commons_1 = __importDefault(require("@methodus/framework-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 = framework_commons_1.default.util.maybeProto(obj); const methodus = framework_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) => __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) { framework_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) { framework_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 __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