@decorators/server
Version:
node decorators - decorators for express library
69 lines • 10.7 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.RouteHandler = void 0;
const di_1 = require("@decorators/di");
const core_1 = require("../../../core");
const constants_1 = require("./constants");
const http_application_adapter_1 = require("./http-application-adapter");
const http_context_1 = require("./http-context");
let RouteHandler = exports.RouteHandler = class RouteHandler 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, params, pipes, status = core_1.HttpStatus.OK, template) {
const handler = controller[methodName].bind(controller);
return async (...args) => {
const req = await this.adapter.getParam(constants_1.ParameterType.REQUEST, null, ...args);
const res = await this.adapter.getParam(constants_1.ParameterType.RESPONSE, null, ...args);
const verifiedParams = [];
const context = new http_context_1.HttpContext(controller.constructor, controller[methodName], this.adapter, req(), res(), verifiedParams);
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 routeHandler = async () => {
if (message) {
throw message;
}
message = await handler(...verifiedParams);
if (await this.adapter.isHeadersSent(res()) || !template) {
return message;
}
this.adapter.setHeader(res(), 'Content-Type', 'text/html');
return this.adapter.render(res(), template, message);
};
message = await this.runHandler(() => this.pipeline.run(this.pipes.concat(message ? [] : pipes), context, routeHandler));
await context.reply(this.message(message), this.status(message, status));
};
}
getParam(param, args) {
return this.adapter.getParam(param.paramType, param.paramName, ...args);
}
};
exports.RouteHandler = RouteHandler = __decorate([
(0, di_1.Injectable)(),
__param(0, (0, di_1.Inject)(constants_1.HTTP_ADAPTER)),
__param(1, (0, di_1.Inject)(core_1.GLOBAL_PIPE)),
__param(1, (0, di_1.Optional)()),
__metadata("design:paramtypes", [http_application_adapter_1.HttpApplicationAdapter, Array, core_1.Pipeline,
core_1.ParamValidator])
], RouteHandler);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbGF0Zm9ybXMvaHR0cC9oZWxwZXJzL3JvdXRlLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUNBQThEO0FBRTlELHdDQUF1STtBQUN2SSwyQ0FBMEQ7QUFDMUQseUVBQW9FO0FBQ3BFLGlEQUE2QztBQUd0QyxJQUFNLFlBQVksMEJBQWxCLE1BQU0sWUFBYSxTQUFRLHFCQUFjO0lBQzlDLFlBQ2dDLE9BQStCLEVBQ3BCLFFBQXVCLEVBQUUsRUFDMUQsUUFBa0IsRUFDbEIsY0FBOEI7UUFFdEMsS0FBSyxFQUFFLENBQUM7UUFMc0IsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7UUFDcEIsVUFBSyxHQUFMLEtBQUssQ0FBb0I7UUFDMUQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFHeEMsQ0FBQztJQUVELGFBQWEsQ0FDWCxVQUE2QixFQUM3QixVQUFrQixFQUNsQixNQUF1QixFQUN2QixLQUFvQixFQUNwQixNQUFNLEdBQUcsaUJBQVUsQ0FBQyxFQUFFLEVBQ3RCLFFBQWlCO1FBRWpCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEQsT0FBTyxLQUFLLEVBQUUsR0FBRyxJQUFlLEVBQUUsRUFBRTtZQUNsQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHlCQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzlFLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMseUJBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFFL0UsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksMEJBQVcsQ0FDN0IsVUFBVSxDQUFDLFdBQVcsRUFDdEIsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUN0QixJQUFJLENBQUMsT0FBTyxFQUNaLEdBQUcsRUFBRSxFQUNMLEdBQUcsRUFBRSxFQUNMLGNBQWMsQ0FDZixDQUFDO1lBRUYsSUFBSSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUM3QyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFFakUsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDN0QsQ0FBQyxDQUFDLENBQUM7WUFFSCxzRkFBc0Y7WUFDdEYsNkNBQTZDO1lBQzdDLE1BQU0sWUFBWSxHQUFHLEtBQUssSUFBSSxFQUFFO2dCQUM5QixJQUFJLE9BQU8sRUFBRTtvQkFDWCxNQUFNLE9BQU8sQ0FBQztpQkFDZjtnQkFFRCxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztnQkFFM0MsSUFBSSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ3hELE9BQU8sT0FBTyxDQUFDO2lCQUNoQjtnQkFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBRTNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FBQztZQUVGLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQ2xGLENBQUM7WUFFRixNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBb0IsRUFBRSxJQUFlO1FBQzVDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQTBCLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzNGLENBQUM7Q0FDRixDQUFBO3VCQXJFWSxZQUFZO0lBRHhCLElBQUEsZUFBVSxHQUFFO0lBR1IsV0FBQSxJQUFBLFdBQU0sRUFBQyx3QkFBWSxDQUFDLENBQUE7SUFDcEIsV0FBQSxJQUFBLFdBQU0sRUFBQyxrQkFBVyxDQUFDLENBQUE7SUFBRSxXQUFBLElBQUEsYUFBUSxHQUFFLENBQUE7cUNBRE8saURBQXNCLFNBRTNDLGVBQVE7UUFDRixxQkFBYztHQUw3QixZQUFZLENBcUV4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAZGVjb3JhdG9ycy9kaSc7XG5cbmltcG9ydCB7IEdMT0JBTF9QSVBFLCBIYW5kbGVyLCBIYW5kbGVyQ3JlYXRvciwgSHR0cFN0YXR1cywgUGFyYW1NZXRhZGF0YSwgUGFyYW1WYWxpZGF0b3IsIFBpcGVsaW5lLCBQcm9jZXNzUGlwZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgSFRUUF9BREFQVEVSLCBQYXJhbWV0ZXJUeXBlIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSHR0cEFwcGxpY2F0aW9uQWRhcHRlciB9IGZyb20gJy4vaHR0cC1hcHBsaWNhdGlvbi1hZGFwdGVyJztcbmltcG9ydCB7IEh0dHBDb250ZXh0IH0gZnJvbSAnLi9odHRwLWNvbnRleHQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUm91dGVIYW5kbGVyIGV4dGVuZHMgSGFuZGxlckNyZWF0b3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEhUVFBfQURBUFRFUikgcHJpdmF0ZSBhZGFwdGVyOiBIdHRwQXBwbGljYXRpb25BZGFwdGVyLFxuICAgIEBJbmplY3QoR0xPQkFMX1BJUEUpIEBPcHRpb25hbCgpIHByaXZhdGUgcGlwZXM6IFByb2Nlc3NQaXBlW10gPSBbXSxcbiAgICBwcml2YXRlIHBpcGVsaW5lOiBQaXBlbGluZSxcbiAgICBwcml2YXRlIHBhcmFtVmFsaWRhdG9yOiBQYXJhbVZhbGlkYXRvcixcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGNyZWF0ZUhhbmRsZXIoXG4gICAgY29udHJvbGxlcjogSW5zdGFuY2VUeXBlPGFueT4sXG4gICAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAgIHBhcmFtczogUGFyYW1NZXRhZGF0YVtdLFxuICAgIHBpcGVzOiBQcm9jZXNzUGlwZVtdLFxuICAgIHN0YXR1cyA9IEh0dHBTdGF0dXMuT0ssXG4gICAgdGVtcGxhdGU/OiBzdHJpbmcsXG4gICk6IEhhbmRsZXIge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBjb250cm9sbGVyW21ldGhvZE5hbWVdLmJpbmQoY29udHJvbGxlcik7XG5cbiAgICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgY29uc3QgcmVxID0gYXdhaXQgdGhpcy5hZGFwdGVyLmdldFBhcmFtKFBhcmFtZXRlclR5cGUuUkVRVUVTVCwgbnVsbCwgLi4uYXJncyk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFkYXB0ZXIuZ2V0UGFyYW0oUGFyYW1ldGVyVHlwZS5SRVNQT05TRSwgbnVsbCwgLi4uYXJncyk7XG5cbiAgICAgIGNvbnN0IHZlcmlmaWVkUGFyYW1zID0gW107XG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KFxuICAgICAgICBjb250cm9sbGVyLmNvbnN0cnVjdG9yLFxuICAgICAgICBjb250cm9sbGVyW21ldGhvZE5hbWVdLFxuICAgICAgICB0aGlzLmFkYXB0ZXIsXG4gICAgICAgIHJlcSgpLFxuICAgICAgICByZXMoKSxcbiAgICAgICAgdmVyaWZpZWRQYXJhbXMsXG4gICAgICApO1xuXG4gICAgICBsZXQgbWVzc2FnZSA9IGF3YWl0IHRoaXMucnVuSGFuZGxlcihhc3luYyAoKSA9PiB7XG4gICAgICAgIHZlcmlmaWVkUGFyYW1zLnB1c2goLi4uYXdhaXQgdGhpcy5wYXJhbXMocGFyYW1zLCBjb250ZXh0LCBhcmdzKSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5wYXJhbVZhbGlkYXRvci52YWxpZGF0ZShwYXJhbXMsIHZlcmlmaWVkUGFyYW1zKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBSdW5zIGVpdGhlciBhbGwgdGhlIHBpcGVzIHdpdGggdGhlIGhhbmRsZXIgaWYgdmFsaWRhdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZFxuICAgICAgLy8gb3IganVzdCBnbG9iYWwgcGlwZXMgd2l0aCB2YWxpZGF0aW9uIGVycm9yXG4gICAgICBjb25zdCByb3V0ZUhhbmRsZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgdGhyb3cgbWVzc2FnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lc3NhZ2UgPSBhd2FpdCBoYW5kbGVyKC4uLnZlcmlmaWVkUGFyYW1zKTtcblxuICAgICAgICBpZiAoYXdhaXQgdGhpcy5hZGFwdGVyLmlzSGVhZGVyc1NlbnQocmVzKCkpIHx8ICF0ZW1wbGF0ZSkge1xuICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hZGFwdGVyLnNldEhlYWRlcihyZXMoKSwgJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hZGFwdGVyLnJlbmRlcihyZXMoKSwgdGVtcGxhdGUsIG1lc3NhZ2UpO1xuICAgICAgfTtcblxuICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMucnVuSGFuZGxlcigoKSA9PlxuICAgICAgICB0aGlzLnBpcGVsaW5lLnJ1bih0aGlzLnBpcGVzLmNvbmNhdChtZXNzYWdlID8gW10gOiBwaXBlcyksIGNvbnRleHQsIHJvdXRlSGFuZGxlciksXG4gICAgICApO1xuXG4gICAgICBhd2FpdCBjb250ZXh0LnJlcGx5KHRoaXMubWVzc2FnZShtZXNzYWdlKSwgdGhpcy5zdGF0dXMobWVzc2FnZSwgc3RhdHVzKSk7XG4gICAgfTtcbiAgfVxuXG4gIGdldFBhcmFtKHBhcmFtOiBQYXJhbU1ldGFkYXRhLCBhcmdzOiB1bmtub3duW10pOiB1bmtub3duIHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmdldFBhcmFtKHBhcmFtLnBhcmFtVHlwZSBhcyBQYXJhbWV0ZXJUeXBlLCBwYXJhbS5wYXJhbU5hbWUsIC4uLmFyZ3MpO1xuICB9XG59XG4iXX0=