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