@decorators/server
Version:
node decorators - decorators for express library
75 lines • 11 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventHandler = void 0;
const di_1 = require("@decorators/di");
const core_1 = require("../../../core");
const constants_1 = require("./constants");
const sockets_application_adapter_1 = require("./sockets-application-adapter");
const sockets_context_1 = require("./sockets-context");
let EventHandler = exports.EventHandler = class EventHandler extends core_1.HandlerCreator {
constructor(adapter, pipes = [], pipeline, paramValidator) {
super();
this.adapter = adapter;
this.pipes = pipes;
this.pipeline = pipeline;
this.paramValidator = paramValidator;
}
createHandler(controller, methodName, eventType, params, pipes) {
const handler = controller[methodName].bind(controller);
return async (...args) => {
const server = await this.adapter.getParam(constants_1.ParameterType.SERVER, null, ...args);
const socket = await this.adapter.getParam(constants_1.ParameterType.SOCKET, null, ...args);
const ack = await this.adapter.getParam(constants_1.ParameterType.ACK, null, ...args);
const verifiedParams = [];
const context = new sockets_context_1.SocketsContext(controller.constructor, controller[methodName], this.adapter, server(), socket(), args.slice(1));
let message = await this.runHandler(async () => {
verifiedParams.push(...await this.params(params, context, args));
await this.paramValidator.validate(params, verifiedParams);
});
// Runs either all the pipes with the handler if validation was successfully completed
// or just global pipes with validation error
const eventHandler = () => {
if (message) {
throw message;
}
return handler(...verifiedParams);
};
message = await this.runHandler(() => this.pipeline.run(this.pipes.concat(message ? [] : pipes), context, eventHandler));
if (message instanceof Error) {
await context.emit('error', this.message(message));
if (eventType === constants_1.EventType.CONNECTION) {
await this.adapter.disconnect(socket());
}
return;
}
const reply = ack();
if (reply) {
return reply(message);
}
};
}
getParam(param, args) {
return this.adapter.getParam(param.paramType, param.callIndex, ...args);
}
};
exports.EventHandler = EventHandler = __decorate([
(0, di_1.Injectable)(),
__param(0, (0, di_1.Inject)(constants_1.SOCKETS_ADAPTER)),
__param(1, (0, di_1.Inject)(core_1.GLOBAL_PIPE)),
__param(1, (0, di_1.Optional)()),
__metadata("design:paramtypes", [sockets_application_adapter_1.SocketsApplicationAdapter, Array, core_1.Pipeline,
core_1.ParamValidator])
], EventHandler);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbGF0Zm9ybXMvc29ja2V0cy9oZWxwZXJzL2V2ZW50LWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUNBQThEO0FBRTlELHdDQUFrSDtBQUVsSCwyQ0FBd0U7QUFDeEUsK0VBQTBFO0FBQzFFLHVEQUFtRDtBQUc1QyxJQUFNLFlBQVksMEJBQWxCLE1BQU0sWUFBYSxTQUFRLHFCQUFjO0lBQzlDLFlBQ21DLE9BQWtDLEVBQzFCLFFBQXVCLEVBQUUsRUFDMUQsUUFBa0IsRUFDbEIsY0FBOEI7UUFFdEMsS0FBSyxFQUFFLENBQUM7UUFMeUIsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFDMUIsVUFBSyxHQUFMLEtBQUssQ0FBb0I7UUFDMUQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFHeEMsQ0FBQztJQUVELGFBQWEsQ0FDWCxVQUE2QixFQUM3QixVQUFrQixFQUNsQixTQUFvQixFQUNwQixNQUF1QixFQUN2QixLQUFvQjtRQUVwQixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXhELE9BQU8sS0FBSyxFQUFFLEdBQUcsSUFBZSxFQUFFLEVBQUU7WUFDbEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyx5QkFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNoRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHlCQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2hGLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMseUJBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFFMUUsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksZ0NBQWMsQ0FDaEMsVUFBVSxDQUFDLFdBQVcsRUFDdEIsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUN0QixJQUFJLENBQUMsT0FBTyxFQUNaLE1BQU0sRUFBRSxFQUNSLE1BQU0sRUFBRSxFQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ2QsQ0FBQztZQUVGLElBQUksT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDN0MsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBRWpFLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzdELENBQUMsQ0FBQyxDQUFDO1lBRUgsc0ZBQXNGO1lBQ3RGLDZDQUE2QztZQUM3QyxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7Z0JBQ3hCLElBQUksT0FBTyxFQUFFO29CQUNYLE1BQU0sT0FBTyxDQUFDO2lCQUNmO2dCQUVELE9BQU8sT0FBTyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDO1lBRUYsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FDbEYsQ0FBQztZQUVGLElBQUksT0FBTyxZQUFZLEtBQUssRUFBRTtnQkFDNUIsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBRW5ELElBQUksU0FBUyxLQUFLLHFCQUFTLENBQUMsVUFBVSxFQUFFO29CQUN0QyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7aUJBQ3pDO2dCQUVELE9BQU87YUFDUjtZQUVELE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBaUIsQ0FBQztZQUVuQyxJQUFJLEtBQUssRUFBRTtnQkFDVCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN2QjtRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBb0IsRUFBRSxJQUFlO1FBQzVDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQTBCLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzNGLENBQUM7Q0FDRixDQUFBO3VCQTNFWSxZQUFZO0lBRHhCLElBQUEsZUFBVSxHQUFFO0lBR1IsV0FBQSxJQUFBLFdBQU0sRUFBQywyQkFBZSxDQUFDLENBQUE7SUFDdkIsV0FBQSxJQUFBLFdBQU0sRUFBQyxrQkFBVyxDQUFDLENBQUE7SUFBRSxXQUFBLElBQUEsYUFBUSxHQUFFLENBQUE7cUNBRFUsdURBQXlCLFNBRWpELGVBQVE7UUFDRixxQkFBYztHQUw3QixZQUFZLENBMkV4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAZGVjb3JhdG9ycy9kaSc7XG5cbmltcG9ydCB7IEdMT0JBTF9QSVBFLCBIYW5kbGVyQ3JlYXRvciwgUGFyYW1NZXRhZGF0YSwgUGFyYW1WYWxpZGF0b3IsIFBpcGVsaW5lLCBQcm9jZXNzUGlwZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQWNrRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBFdmVudFR5cGUsIFBhcmFtZXRlclR5cGUsIFNPQ0tFVFNfQURBUFRFUiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNvY2tldHNBcHBsaWNhdGlvbkFkYXB0ZXIgfSBmcm9tICcuL3NvY2tldHMtYXBwbGljYXRpb24tYWRhcHRlcic7XG5pbXBvcnQgeyBTb2NrZXRzQ29udGV4dCB9IGZyb20gJy4vc29ja2V0cy1jb250ZXh0JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEV2ZW50SGFuZGxlciBleHRlbmRzIEhhbmRsZXJDcmVhdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChTT0NLRVRTX0FEQVBURVIpIHByaXZhdGUgYWRhcHRlcjogU29ja2V0c0FwcGxpY2F0aW9uQWRhcHRlcixcbiAgICBASW5qZWN0KEdMT0JBTF9QSVBFKSBAT3B0aW9uYWwoKSBwcml2YXRlIHBpcGVzOiBQcm9jZXNzUGlwZVtdID0gW10sXG4gICAgcHJpdmF0ZSBwaXBlbGluZTogUGlwZWxpbmUsXG4gICAgcHJpdmF0ZSBwYXJhbVZhbGlkYXRvcjogUGFyYW1WYWxpZGF0b3IsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBjcmVhdGVIYW5kbGVyKFxuICAgIGNvbnRyb2xsZXI6IEluc3RhbmNlVHlwZTxhbnk+LFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBldmVudFR5cGU6IEV2ZW50VHlwZSxcbiAgICBwYXJhbXM6IFBhcmFtTWV0YWRhdGFbXSxcbiAgICBwaXBlczogUHJvY2Vzc1BpcGVbXSxcbiAgKSB7XG4gICAgY29uc3QgaGFuZGxlciA9IGNvbnRyb2xsZXJbbWV0aG9kTmFtZV0uYmluZChjb250cm9sbGVyKTtcblxuICAgIHJldHVybiBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCB0aGlzLmFkYXB0ZXIuZ2V0UGFyYW0oUGFyYW1ldGVyVHlwZS5TRVJWRVIsIG51bGwsIC4uLmFyZ3MpO1xuICAgICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgdGhpcy5hZGFwdGVyLmdldFBhcmFtKFBhcmFtZXRlclR5cGUuU09DS0VULCBudWxsLCAuLi5hcmdzKTtcbiAgICAgIGNvbnN0IGFjayA9IGF3YWl0IHRoaXMuYWRhcHRlci5nZXRQYXJhbShQYXJhbWV0ZXJUeXBlLkFDSywgbnVsbCwgLi4uYXJncyk7XG5cbiAgICAgIGNvbnN0IHZlcmlmaWVkUGFyYW1zID0gW107XG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IFNvY2tldHNDb250ZXh0KFxuICAgICAgICBjb250cm9sbGVyLmNvbnN0cnVjdG9yLFxuICAgICAgICBjb250cm9sbGVyW21ldGhvZE5hbWVdLFxuICAgICAgICB0aGlzLmFkYXB0ZXIsXG4gICAgICAgIHNlcnZlcigpLFxuICAgICAgICBzb2NrZXQoKSxcbiAgICAgICAgYXJncy5zbGljZSgxKSxcbiAgICAgICk7XG5cbiAgICAgIGxldCBtZXNzYWdlID0gYXdhaXQgdGhpcy5ydW5IYW5kbGVyKGFzeW5jICgpID0+IHtcbiAgICAgICAgdmVyaWZpZWRQYXJhbXMucHVzaCguLi5hd2FpdCB0aGlzLnBhcmFtcyhwYXJhbXMsIGNvbnRleHQsIGFyZ3MpKTtcblxuICAgICAgICBhd2FpdCB0aGlzLnBhcmFtVmFsaWRhdG9yLnZhbGlkYXRlKHBhcmFtcywgdmVyaWZpZWRQYXJhbXMpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFJ1bnMgZWl0aGVyIGFsbCB0aGUgcGlwZXMgd2l0aCB0aGUgaGFuZGxlciBpZiB2YWxpZGF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkXG4gICAgICAvLyBvciBqdXN0IGdsb2JhbCBwaXBlcyB3aXRoIHZhbGlkYXRpb24gZXJyb3JcbiAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICB0aHJvdyBtZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhhbmRsZXIoLi4udmVyaWZpZWRQYXJhbXMpO1xuICAgICAgfTtcblxuICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMucnVuSGFuZGxlcigoKSA9PlxuICAgICAgICB0aGlzLnBpcGVsaW5lLnJ1bih0aGlzLnBpcGVzLmNvbmNhdChtZXNzYWdlID8gW10gOiBwaXBlcyksIGNvbnRleHQsIGV2ZW50SGFuZGxlciksXG4gICAgICApO1xuXG4gICAgICBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCgnZXJyb3InLCB0aGlzLm1lc3NhZ2UobWVzc2FnZSkpO1xuXG4gICAgICAgIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5DT05ORUNUSU9OKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGFwdGVyLmRpc2Nvbm5lY3Qoc29ja2V0KCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXBseSA9IGFjaygpIGFzIEFja0Z1bmN0aW9uO1xuXG4gICAgICBpZiAocmVwbHkpIHtcbiAgICAgICAgcmV0dXJuIHJlcGx5KG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXRQYXJhbShwYXJhbTogUGFyYW1NZXRhZGF0YSwgYXJnczogdW5rbm93bltdKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5nZXRQYXJhbShwYXJhbS5wYXJhbVR5cGUgYXMgUGFyYW1ldGVyVHlwZSwgcGFyYW0uY2FsbEluZGV4LCAuLi5hcmdzKTtcbiAgfVxufVxuIl19