1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const common_1 = require("@nestjs/common");
|
4 | const dependencies_decorator_1 = require("@nestjs/common/decorators/core/dependencies.decorator");
|
5 | const utils_1 = require("./utils");
|
6 | class 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 | }
|
18 | exports.MiddlewareBuilder = MiddlewareBuilder;
|
19 | MiddlewareBuilder.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 | };
|