@decorators/server
Version:
node decorators - decorators for express library
69 lines • 9.72 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.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=