@methodus/server
Version:
Server components for @methodus workflow
65 lines • 2.98 kB
JavaScript
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
;