UNPKG

@decorators/server

Version:

node decorators - decorators for express library

69 lines 9.72 kB
"use strict"; 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.RouteResolver = 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 route_handler_1 = require("./route-handler"); let RouteResolver = exports.RouteResolver = class RouteResolver { constructor(adapter, containerManager, metadataScanner, routeHandler, reflector) { this.adapter = adapter; this.containerManager = containerManager; this.metadataScanner = metadataScanner; this.routeHandler = routeHandler; this.reflector = reflector; } async resolve() { const metadatas = this.metadataScanner.scan() .filter(meta => (0, core_1.isEnum)(constants_1.HttpMethodType, meta.type)); const baseRoutes = metadatas.filter(meta => !meta.url.includes('*')); const wildcardRoutes = metadatas .filter(meta => meta.url.includes('*')) .sort(this.sortWildcardRoutes); const routes = []; for (const metadata of [...baseRoutes, ...wildcardRoutes]) { const container = this.containerManager.get(metadata.module); const controller = await container.get(metadata.controller); const routePipes = await (0, core_1.asyncMap)(metadata.pipes, (pipe) => container.get(pipe)); const template = this.reflector.getMetadata(constants_1.METHOD_TEMPLATE_METADATA, metadata.controller.prototype[metadata.methodName]); const handler = this.routeHandler.createHandler(controller, metadata.methodName, metadata.params, routePipes, metadata.status, template); routes.push({ handler, type: metadata.type, url: metadata.url, }); } this.adapter.routes(routes); } sortWildcardRoutes(routeA, routeB) { const segmentsA = routeA.url.split('/').length; const segmentsB = routeB.url.split('/').length; if (segmentsA === segmentsB) { return routeB.url.length - routeA.url.length; } return segmentsB - segmentsA; } }; exports.RouteResolver = RouteResolver = __decorate([ (0, di_1.Injectable)(), __param(0, (0, di_1.Inject)(constants_1.HTTP_ADAPTER)), __metadata("design:paramtypes", [http_application_adapter_1.HttpApplicationAdapter, core_1.ContainerManager, core_1.MetadataScanner, route_handler_1.RouteHandler, core_1.Reflector]) ], RouteResolver); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm1zL2h0dHAvaGVscGVycy9yb3V0ZS1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBb0Q7QUFFcEQsd0NBQThIO0FBRTlILDJDQUFxRjtBQUNyRix5RUFBb0U7QUFDcEUsbURBQStDO0FBR3hDLElBQU0sYUFBYSwyQkFBbkIsTUFBTSxhQUFhO0lBQ3hCLFlBQ2dDLE9BQStCLEVBQ3JELGdCQUFrQyxFQUNsQyxlQUFnQyxFQUNoQyxZQUEwQixFQUMxQixTQUFvQjtRQUpFLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBQ3JELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGNBQVMsR0FBVCxTQUFTLENBQVc7SUFDMUIsQ0FBQztJQUVMLEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQWlCO2FBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUEsYUFBTSxFQUFDLDBCQUFjLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFckQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLGNBQWMsR0FBRyxTQUFTO2FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVqQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFbEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsY0FBYyxDQUFDLEVBQUU7WUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUFpQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUYsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFBLGVBQVEsRUFBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBc0IsRUFBRSxFQUFFLENBQzNFLFNBQVMsQ0FBQyxHQUFHLENBQWMsSUFBSSxDQUFDLENBQ2pDLENBQUM7WUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FDekMsb0NBQXdCLEVBQ3hCLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FDbkQsQ0FBQztZQUVGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUM3QyxVQUFVLEVBQ1YsUUFBUSxDQUFDLFVBQVUsRUFDbkIsUUFBUSxDQUFDLE1BQU0sRUFDZixVQUFVLEVBQ1YsUUFBUSxDQUFDLE1BQU0sRUFDZixRQUFRLENBQ1QsQ0FBQztZQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsT0FBTztnQkFDUCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRzthQUNsQixDQUFDLENBQUM7U0FDSjtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFxQixFQUFFLE1BQXFCO1FBQzdELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFL0MsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQzNCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7U0FDOUM7UUFFRCxPQUFPLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQztDQUNGLENBQUE7d0JBN0RZLGFBQWE7SUFEekIsSUFBQSxlQUFVLEdBQUU7SUFHUixXQUFBLElBQUEsV0FBTSxFQUFDLHdCQUFZLENBQUMsQ0FBQTtxQ0FBa0IsaURBQXNCO1FBQ25DLHVCQUFnQjtRQUNqQixzQkFBZTtRQUNsQiw0QkFBWTtRQUNmLGdCQUFTO0dBTm5CLGFBQWEsQ0E2RHpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGRlY29yYXRvcnMvZGknO1xuXG5pbXBvcnQgeyBhc3luY01hcCwgQ2xhc3NDb25zdHJ1Y3RvciwgQ29udGFpbmVyTWFuYWdlciwgaXNFbnVtLCBNZXRhZGF0YVNjYW5uZXIsIFByb2Nlc3NQaXBlLCBSZWZsZWN0b3IgfSBmcm9tICcuLi8uLi8uLi9jb3JlJztcbmltcG9ydCB7IFJvdXRlTWV0YWRhdGEgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBIVFRQX0FEQVBURVIsIEh0dHBNZXRob2RUeXBlLCBNRVRIT0RfVEVNUExBVEVfTUVUQURBVEEgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBIdHRwQXBwbGljYXRpb25BZGFwdGVyIH0gZnJvbSAnLi9odHRwLWFwcGxpY2F0aW9uLWFkYXB0ZXInO1xuaW1wb3J0IHsgUm91dGVIYW5kbGVyIH0gZnJvbSAnLi9yb3V0ZS1oYW5kbGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJvdXRlUmVzb2x2ZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEhUVFBfQURBUFRFUikgcHJpdmF0ZSBhZGFwdGVyOiBIdHRwQXBwbGljYXRpb25BZGFwdGVyLFxuICAgIHByaXZhdGUgY29udGFpbmVyTWFuYWdlcjogQ29udGFpbmVyTWFuYWdlcixcbiAgICBwcml2YXRlIG1ldGFkYXRhU2Nhbm5lcjogTWV0YWRhdGFTY2FubmVyLFxuICAgIHByaXZhdGUgcm91dGVIYW5kbGVyOiBSb3V0ZUhhbmRsZXIsXG4gICAgcHJpdmF0ZSByZWZsZWN0b3I6IFJlZmxlY3RvcixcbiAgKSB7IH1cblxuICBhc3luYyByZXNvbHZlKCkge1xuICAgIGNvbnN0IG1ldGFkYXRhcyA9IHRoaXMubWV0YWRhdGFTY2FubmVyLnNjYW48Um91dGVNZXRhZGF0YT4oKVxuICAgICAgLmZpbHRlcihtZXRhID0+IGlzRW51bShIdHRwTWV0aG9kVHlwZSwgbWV0YS50eXBlKSk7XG5cbiAgICBjb25zdCBiYXNlUm91dGVzID0gbWV0YWRhdGFzLmZpbHRlcihtZXRhID0+ICFtZXRhLnVybC5pbmNsdWRlcygnKicpKTtcbiAgICBjb25zdCB3aWxkY2FyZFJvdXRlcyA9IG1ldGFkYXRhc1xuICAgICAgLmZpbHRlcihtZXRhID0+IG1ldGEudXJsLmluY2x1ZGVzKCcqJykpXG4gICAgICAuc29ydCh0aGlzLnNvcnRXaWxkY2FyZFJvdXRlcyk7XG5cbiAgICBjb25zdCByb3V0ZXMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgbWV0YWRhdGEgb2YgWy4uLmJhc2VSb3V0ZXMsIC4uLndpbGRjYXJkUm91dGVzXSkge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJNYW5hZ2VyLmdldChtZXRhZGF0YS5tb2R1bGUpO1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IGF3YWl0IGNvbnRhaW5lci5nZXQ8SW5zdGFuY2VUeXBlPENsYXNzQ29uc3RydWN0b3I+PihtZXRhZGF0YS5jb250cm9sbGVyKTtcbiAgICAgIGNvbnN0IHJvdXRlUGlwZXMgPSBhd2FpdCBhc3luY01hcChtZXRhZGF0YS5waXBlcywgKHBpcGU6IENsYXNzQ29uc3RydWN0b3IpID0+XG4gICAgICAgIGNvbnRhaW5lci5nZXQ8UHJvY2Vzc1BpcGU+KHBpcGUpLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnJlZmxlY3Rvci5nZXRNZXRhZGF0YShcbiAgICAgICAgTUVUSE9EX1RFTVBMQVRFX01FVEFEQVRBLFxuICAgICAgICBtZXRhZGF0YS5jb250cm9sbGVyLnByb3RvdHlwZVttZXRhZGF0YS5tZXRob2ROYW1lXSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLnJvdXRlSGFuZGxlci5jcmVhdGVIYW5kbGVyKFxuICAgICAgICBjb250cm9sbGVyLFxuICAgICAgICBtZXRhZGF0YS5tZXRob2ROYW1lLFxuICAgICAgICBtZXRhZGF0YS5wYXJhbXMsXG4gICAgICAgIHJvdXRlUGlwZXMsXG4gICAgICAgIG1ldGFkYXRhLnN0YXR1cyxcbiAgICAgICAgdGVtcGxhdGUsXG4gICAgICApO1xuXG4gICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgIGhhbmRsZXIsXG4gICAgICAgIHR5cGU6IG1ldGFkYXRhLnR5cGUsXG4gICAgICAgIHVybDogbWV0YWRhdGEudXJsLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGFwdGVyLnJvdXRlcyhyb3V0ZXMpO1xuICB9XG5cbiAgc29ydFdpbGRjYXJkUm91dGVzKHJvdXRlQTogUm91dGVNZXRhZGF0YSwgcm91dGVCOiBSb3V0ZU1ldGFkYXRhKSB7XG4gICAgY29uc3Qgc2VnbWVudHNBID0gcm91dGVBLnVybC5zcGxpdCgnLycpLmxlbmd0aDtcbiAgICBjb25zdCBzZWdtZW50c0IgPSByb3V0ZUIudXJsLnNwbGl0KCcvJykubGVuZ3RoO1xuXG4gICAgaWYgKHNlZ21lbnRzQSA9PT0gc2VnbWVudHNCKSB7XG4gICAgICByZXR1cm4gcm91dGVCLnVybC5sZW5ndGggLSByb3V0ZUEudXJsLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VnbWVudHNCIC0gc2VnbWVudHNBO1xuICB9XG59XG4iXX0=