UNPKG

2.31 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const common_1 = require("@nestjs/common");
4const dependencies_decorator_1 = require("@nestjs/common/decorators/core/dependencies.decorator");
5const utils_1 = require("./utils");
6class MiddlewareBuilder {
7 constructor(routesMapper) {
8 this.routesMapper = routesMapper;
9 this.middlewareCollection = new Set();
10 }
11 apply(...middleware) {
12 return new MiddlewareBuilder.ConfigProxy(this, dependencies_decorator_1.flatten(middleware));
13 }
14 build() {
15 return [...this.middlewareCollection];
16 }
17}
18exports.MiddlewareBuilder = MiddlewareBuilder;
19MiddlewareBuilder.ConfigProxy = class {
20 constructor(builder, middleware) {
21 this.builder = builder;
22 this.middleware = middleware;
23 this.excludedRoutes = [];
24 }
25 getExcludedRoutes() {
26 return this.excludedRoutes;
27 }
28 exclude(...routes) {
29 const { routesMapper } = this.builder;
30 this.excludedRoutes = this.mapRoutesToFlatList(routes.map(route => routesMapper.mapRouteToRouteInfo(route)));
31 return this;
32 }
33 forRoutes(...routes) {
34 const { middlewareCollection, routesMapper } = this.builder;
35 const forRoutes = this.mapRoutesToFlatList(routes.map(route => routesMapper.mapRouteToRouteInfo(route)));
36 const configuration = {
37 middleware: utils_1.filterMiddleware(this.middleware),
38 forRoutes: forRoutes.filter(route => !this.isRouteExcluded(route)),
39 };
40 middlewareCollection.add(configuration);
41 return this.builder;
42 }
43 mapRoutesToFlatList(forRoutes) {
44 return forRoutes.reduce((a, b) => a.concat(b));
45 }
46 isRouteExcluded(routeInfo) {
47 const pathLastIndex = routeInfo.path.length - 1;
48 const validatedRoutePath = routeInfo.path[pathLastIndex] === '/'
49 ? routeInfo.path.slice(0, pathLastIndex)
50 : routeInfo.path;
51 return this.excludedRoutes.some(excluded => {
52 const isPathEqual = validatedRoutePath === excluded.path;
53 if (!isPathEqual) {
54 return false;
55 }
56 return (routeInfo.method === excluded.method ||
57 excluded.method === common_1.RequestMethod.ALL);
58 });
59 }
60};