@nest-boot/middleware 7.2.3 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/interfaces/middleware-config.interface.d.ts +5 -1
- package/dist/middleware.configurator.d.ts +31 -1
- package/dist/middleware.configurator.js +39 -1
- package/dist/middleware.configurator.js.map +1 -1
- package/dist/middleware.manager.js +28 -9
- package/dist/middleware.manager.js.map +1 -1
- package/dist/middleware.manager.spec.d.ts +1 -0
- package/dist/middleware.manager.spec.js +197 -0
- package/dist/middleware.manager.spec.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -11,8 +11,12 @@ export interface MiddlewareConfig {
|
|
|
11
11
|
routes: (string | Type | RouteInfo)[];
|
|
12
12
|
/** Routes to exclude from the middleware */
|
|
13
13
|
excludeRoutes: (string | RouteInfo)[];
|
|
14
|
-
/** Middlewares that must be applied before this one */
|
|
14
|
+
/** Middlewares that must be registered and applied before this one */
|
|
15
15
|
dependencyMiddlewares: Type<NestMiddleware>[];
|
|
16
|
+
/** Middlewares that should be applied before this one when registered */
|
|
17
|
+
afterMiddlewares: Type<NestMiddleware>[];
|
|
18
|
+
/** Middlewares that should be applied after this one when registered */
|
|
19
|
+
beforeMiddlewares: Type<NestMiddleware>[];
|
|
16
20
|
/** Whether to disable global exclude routes for this middleware */
|
|
17
21
|
disabledGlobalExcludeRoutes: boolean;
|
|
18
22
|
}
|
|
@@ -18,6 +18,10 @@ export declare class MiddlewareConfigurator {
|
|
|
18
18
|
private readonly excludeRoutes;
|
|
19
19
|
/** Middleware types that must run before this middleware. @internal */
|
|
20
20
|
private readonly dependencyMiddlewares;
|
|
21
|
+
/** Middleware types that should run before this middleware when registered. @internal */
|
|
22
|
+
private readonly afterMiddlewares;
|
|
23
|
+
/** Middleware types that should run after this middleware when registered. @internal */
|
|
24
|
+
private readonly beforeMiddlewares;
|
|
21
25
|
/**
|
|
22
26
|
* Creates a new MiddlewareConfigurator instance.
|
|
23
27
|
* @param manager - The middleware manager that owns this configurator
|
|
@@ -36,7 +40,33 @@ export declare class MiddlewareConfigurator {
|
|
|
36
40
|
*/
|
|
37
41
|
exclude(...routes: (string | RouteInfo)[]): this;
|
|
38
42
|
/**
|
|
39
|
-
* Declares middleware
|
|
43
|
+
* Declares middlewares that should run after this middleware when registered.
|
|
44
|
+
*
|
|
45
|
+
* @remarks
|
|
46
|
+
* This is a soft ordering hint. Unregistered middleware types are ignored.
|
|
47
|
+
*
|
|
48
|
+
* @param beforeMiddlewares - Middleware types that should run after this middleware
|
|
49
|
+
* @returns This configurator for chaining
|
|
50
|
+
*/
|
|
51
|
+
before(...beforeMiddlewares: Type<NestMiddleware>[]): this;
|
|
52
|
+
/**
|
|
53
|
+
* Declares middlewares that should run before this middleware when registered.
|
|
54
|
+
*
|
|
55
|
+
* @remarks
|
|
56
|
+
* This is a soft ordering hint. Unregistered middleware types are ignored.
|
|
57
|
+
*
|
|
58
|
+
* @param afterMiddlewares - Middleware types that should run before this middleware
|
|
59
|
+
* @returns This configurator for chaining
|
|
60
|
+
*/
|
|
61
|
+
after(...afterMiddlewares: Type<NestMiddleware>[]): this;
|
|
62
|
+
/**
|
|
63
|
+
* Declares middleware dependencies for ordering. Dependencies must be registered
|
|
64
|
+
* and must run before this middleware.
|
|
65
|
+
*
|
|
66
|
+
* @remarks
|
|
67
|
+
* This is a hard prerequisite. An unregistered dependency throws during
|
|
68
|
+
* middleware configuration.
|
|
69
|
+
*
|
|
40
70
|
* @param dependencyMiddlewares - Middleware types that must run before this middleware
|
|
41
71
|
* @returns This configurator for chaining
|
|
42
72
|
*/
|
|
@@ -23,6 +23,10 @@ class MiddlewareConfigurator {
|
|
|
23
23
|
this.excludeRoutes = [];
|
|
24
24
|
/** Middleware types that must run before this middleware. @internal */
|
|
25
25
|
this.dependencyMiddlewares = [];
|
|
26
|
+
/** Middleware types that should run before this middleware when registered. @internal */
|
|
27
|
+
this.afterMiddlewares = [];
|
|
28
|
+
/** Middleware types that should run after this middleware when registered. @internal */
|
|
29
|
+
this.beforeMiddlewares = [];
|
|
26
30
|
}
|
|
27
31
|
/**
|
|
28
32
|
* Disables global route exclusions for these middlewares.
|
|
@@ -42,7 +46,39 @@ class MiddlewareConfigurator {
|
|
|
42
46
|
return this;
|
|
43
47
|
}
|
|
44
48
|
/**
|
|
45
|
-
* Declares middleware
|
|
49
|
+
* Declares middlewares that should run after this middleware when registered.
|
|
50
|
+
*
|
|
51
|
+
* @remarks
|
|
52
|
+
* This is a soft ordering hint. Unregistered middleware types are ignored.
|
|
53
|
+
*
|
|
54
|
+
* @param beforeMiddlewares - Middleware types that should run after this middleware
|
|
55
|
+
* @returns This configurator for chaining
|
|
56
|
+
*/
|
|
57
|
+
before(...beforeMiddlewares) {
|
|
58
|
+
this.beforeMiddlewares.push(...beforeMiddlewares);
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Declares middlewares that should run before this middleware when registered.
|
|
63
|
+
*
|
|
64
|
+
* @remarks
|
|
65
|
+
* This is a soft ordering hint. Unregistered middleware types are ignored.
|
|
66
|
+
*
|
|
67
|
+
* @param afterMiddlewares - Middleware types that should run before this middleware
|
|
68
|
+
* @returns This configurator for chaining
|
|
69
|
+
*/
|
|
70
|
+
after(...afterMiddlewares) {
|
|
71
|
+
this.afterMiddlewares.push(...afterMiddlewares);
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Declares middleware dependencies for ordering. Dependencies must be registered
|
|
76
|
+
* and must run before this middleware.
|
|
77
|
+
*
|
|
78
|
+
* @remarks
|
|
79
|
+
* This is a hard prerequisite. An unregistered dependency throws during
|
|
80
|
+
* middleware configuration.
|
|
81
|
+
*
|
|
46
82
|
* @param dependencyMiddlewares - Middleware types that must run before this middleware
|
|
47
83
|
* @returns This configurator for chaining
|
|
48
84
|
*/
|
|
@@ -72,6 +108,8 @@ class MiddlewareConfigurator {
|
|
|
72
108
|
routes,
|
|
73
109
|
excludeRoutes: this.excludeRoutes,
|
|
74
110
|
dependencyMiddlewares: this.dependencyMiddlewares,
|
|
111
|
+
afterMiddlewares: this.afterMiddlewares,
|
|
112
|
+
beforeMiddlewares: this.beforeMiddlewares,
|
|
75
113
|
disabledGlobalExcludeRoutes: this.disabledGlobalExcludeRoutes,
|
|
76
114
|
});
|
|
77
115
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.configurator.js","sourceRoot":"","sources":["../src/middleware.configurator.ts"],"names":[],"mappings":";;;AAMA;;;;;;GAMG;AACH,MAAa,sBAAsB;
|
|
1
|
+
{"version":3,"file":"middleware.configurator.js","sourceRoot":"","sources":["../src/middleware.configurator.ts"],"names":[],"mappings":";;;AAMA;;;;;;GAMG;AACH,MAAa,sBAAsB;IAgBjC;;;;OAIG;IACH,YACmB,OAA0B,EAC1B,WAA2C;QAD3C,YAAO,GAAP,OAAO,CAAmB;QAC1B,gBAAW,GAAX,WAAW,CAAgC;QAtB9D,oFAAoF;QAC5E,gCAA2B,GAAG,KAAK,CAAC;QAE5C,4DAA4D;QAC3C,kBAAa,GAA2B,EAAE,CAAC;QAE5D,uEAAuE;QACtD,0BAAqB,GAA2B,EAAE,CAAC;QAEpE,yFAAyF;QACxE,qBAAgB,GAA2B,EAAE,CAAC;QAE/D,wFAAwF;QACvE,sBAAiB,GAA2B,EAAE,CAAC;IAU7D,CAAC;IAEJ;;;OAGG;IACI,0BAA0B;QAC/B,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,OAAO,CAAC,GAAG,MAA8B;QAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,GAAG,iBAAyC;QACxD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,GAAG,gBAAwC;QACtD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;OAUG;IACI,YAAY,CAAC,GAAG,qBAA6C;QAClE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,SAAS,CACd,GAAG,MAAqC;QAExC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE;gBAC/C,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;oBAC7B,IAAI,KAAK,IAAI,UAAU,EAAE,CAAC;wBACxB,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBACjC,CAAC;yBAAM,CAAC;wBACN,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;gBACD,MAAM;gBACN,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,2BAA2B,EAAE,IAAI,CAAC,2BAA2B;aAC9D,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAzHD,wDAyHC"}
|
|
@@ -34,6 +34,31 @@ let MiddlewareManager = class MiddlewareManager {
|
|
|
34
34
|
typeToMiddleware.set(middleware.constructor, middleware);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
+
const resolveDependencyMiddleware = (middlewareType) => {
|
|
38
|
+
const middleware = typeToMiddleware.get(middlewareType);
|
|
39
|
+
if (!middleware) {
|
|
40
|
+
throw new Error(`Dependency middleware ${middlewareType.name} is not registered`);
|
|
41
|
+
}
|
|
42
|
+
return middleware;
|
|
43
|
+
};
|
|
44
|
+
const dependencyMap = new Map();
|
|
45
|
+
for (const [middleware, config] of this.middlewareConfigMap) {
|
|
46
|
+
dependencyMap.set(middleware, config.dependencyMiddlewares.map((dependencyMiddleware) => resolveDependencyMiddleware(dependencyMiddleware)));
|
|
47
|
+
}
|
|
48
|
+
for (const [middleware, config] of this.middlewareConfigMap) {
|
|
49
|
+
for (const afterMiddleware of config.afterMiddlewares) {
|
|
50
|
+
const dependency = typeToMiddleware.get(afterMiddleware);
|
|
51
|
+
if (dependency) {
|
|
52
|
+
dependencyMap.get(middleware)?.push(dependency);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
for (const beforeMiddleware of config.beforeMiddlewares) {
|
|
56
|
+
const dependent = typeToMiddleware.get(beforeMiddleware);
|
|
57
|
+
if (dependent) {
|
|
58
|
+
dependencyMap.get(dependent)?.push(middleware);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
37
62
|
const visit = (middleware) => {
|
|
38
63
|
if (visited.has(middleware)) {
|
|
39
64
|
return;
|
|
@@ -42,15 +67,9 @@ let MiddlewareManager = class MiddlewareManager {
|
|
|
42
67
|
throw new Error("Circular dependency detected in middleware");
|
|
43
68
|
}
|
|
44
69
|
visiting.add(middleware);
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const depMiddleware = typeToMiddleware.get(dependencyMiddleware);
|
|
49
|
-
if (!depMiddleware) {
|
|
50
|
-
throw new Error(`Dependency middleware ${dependencyMiddleware.name} is not registered`);
|
|
51
|
-
}
|
|
52
|
-
visit(depMiddleware);
|
|
53
|
-
}
|
|
70
|
+
const dependencies = dependencyMap.get(middleware) ?? [];
|
|
71
|
+
for (const dependency of dependencies) {
|
|
72
|
+
visit(dependency);
|
|
54
73
|
}
|
|
55
74
|
visiting.delete(middleware);
|
|
56
75
|
visited.add(middleware);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.manager.js","sourceRoot":"","sources":["../src/middleware.manager.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAkE;AAIlE,uEAAmE;AAGnE;;;;;;GAMG;AAEI,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAAvB;QACL,uEAAuE;QAC/D,wBAAmB,GAA2B,EAAE,CAAC;QAEzD,qEAAqE;QACrD,wBAAmB,GAAG,IAAI,GAAG,EAG1C,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.manager.js","sourceRoot":"","sources":["../src/middleware.manager.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAkE;AAIlE,uEAAmE;AAGnE;;;;;;GAMG;AAEI,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAAvB;QACL,uEAAuE;QAC/D,wBAAmB,GAA2B,EAAE,CAAC;QAEzD,qEAAqE;QACrD,wBAAmB,GAAG,IAAI,GAAG,EAG1C,CAAC;IAkIN,CAAC;IAhIC,uEAAuE;IACvE,IAAY,iBAAiB;QAC3B,MAAM,MAAM,GAAmC,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgC,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAC;QAEzD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAwC,CAAC;QACzE,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC;YACzD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;gBAC7D,gBAAgB,CAAC,GAAG,CAClB,UAAU,CAAC,WAAmC,EAC9C,UAAU,CACX,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,2BAA2B,GAAG,CAClC,cAAoC,EACpC,EAAE;YACF,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACxD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CACb,yBAAyB,cAAc,CAAC,IAAI,oBAAoB,CACjE,CAAC;YACJ,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,IAAI,GAAG,EAG1B,CAAC;QAEJ,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5D,aAAa,CAAC,GAAG,CACf,UAAU,EACV,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,oBAAoB,EAAE,EAAE,CACxD,2BAA2B,CAAC,oBAAoB,CAAC,CAClD,CACF,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5D,KAAK,MAAM,eAAe,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACtD,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBACzD,IAAI,UAAU,EAAE,CAAC;oBACf,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YAED,KAAK,MAAM,gBAAgB,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBACxD,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBACzD,IAAI,SAAS,EAAE,CAAC;oBACd,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,UAAwC,EAAE,EAAE;YACzD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,CAAC;YAED,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAEzB,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACzD,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;gBACtC,KAAK,CAAC,UAAU,CAAC,CAAC;YACpB,CAAC;YAED,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC;YACzD,KAAK,CAAC,UAAU,CAAC,CAAC;QACpB,CAAC;QAED,OAAO,MAAM;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC3C,MAAM,CAAC,CAAC,MAAM,EAA8B,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC1E,CAAC;IAED;;;;OAIG;IACH,KAAK,CACH,GAAG,WAA2C;QAE9C,OAAO,IAAI,gDAAsB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,GAAG,MAA8B;QAC7C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,QAA4B;QACpC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAEhD,MAAM,aAAa,GAAG,MAAM,CAAC,2BAA2B;gBACtD,CAAC,CAAC,MAAM,CAAC,aAAa;gBACtB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;YAE3D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,KAAK,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,CAAC;YAClC,CAAC;YAED,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;CACF,CAAA;AA1IY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;GACA,iBAAiB,CA0I7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const MiddlewareExports = __importStar(require("."));
|
|
37
|
+
const middleware_manager_1 = require("./middleware.manager");
|
|
38
|
+
const middleware_module_1 = require("./middleware.module");
|
|
39
|
+
class RecordingMiddleware {
|
|
40
|
+
constructor(name, calls) {
|
|
41
|
+
this.name = name;
|
|
42
|
+
this.calls = calls;
|
|
43
|
+
}
|
|
44
|
+
use(_req, _res, next) {
|
|
45
|
+
this.calls.push(this.name);
|
|
46
|
+
next();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
class FirstMiddleware extends RecordingMiddleware {
|
|
50
|
+
}
|
|
51
|
+
class SecondMiddleware extends RecordingMiddleware {
|
|
52
|
+
}
|
|
53
|
+
class MissingMiddleware extends RecordingMiddleware {
|
|
54
|
+
}
|
|
55
|
+
const createMiddlewareConsumer = () => {
|
|
56
|
+
const middlewares = [];
|
|
57
|
+
const proxy = {
|
|
58
|
+
exclude: jest.fn().mockReturnThis(),
|
|
59
|
+
forRoutes: jest.fn().mockReturnThis(),
|
|
60
|
+
};
|
|
61
|
+
const consumer = {
|
|
62
|
+
apply: jest.fn((middleware) => {
|
|
63
|
+
middlewares.push(middleware);
|
|
64
|
+
return proxy;
|
|
65
|
+
}),
|
|
66
|
+
};
|
|
67
|
+
return { consumer, middlewares, proxy };
|
|
68
|
+
};
|
|
69
|
+
const collectMiddlewares = (manager) => {
|
|
70
|
+
const { consumer, middlewares } = createMiddlewareConsumer();
|
|
71
|
+
manager.configure(consumer);
|
|
72
|
+
return middlewares;
|
|
73
|
+
};
|
|
74
|
+
const runMiddlewares = (middlewares) => {
|
|
75
|
+
for (const middleware of middlewares) {
|
|
76
|
+
middleware({}, {}, jest.fn());
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
describe("MiddlewareManager", () => {
|
|
80
|
+
it("exports middleware APIs from the package entrypoint", () => {
|
|
81
|
+
expect(MiddlewareExports.MiddlewareManager).toBe(middleware_manager_1.MiddlewareManager);
|
|
82
|
+
expect(MiddlewareExports.MiddlewareModule).toBe(middleware_module_1.MiddlewareModule);
|
|
83
|
+
});
|
|
84
|
+
it("applies middleware after target middleware", () => {
|
|
85
|
+
const calls = [];
|
|
86
|
+
const first = new FirstMiddleware("first", calls);
|
|
87
|
+
const second = new SecondMiddleware("second", calls);
|
|
88
|
+
const manager = new middleware_manager_1.MiddlewareManager();
|
|
89
|
+
manager.apply(second).after(FirstMiddleware).forRoutes("*");
|
|
90
|
+
manager.apply(first).forRoutes("*");
|
|
91
|
+
runMiddlewares(collectMiddlewares(manager));
|
|
92
|
+
expect(calls).toEqual(["first", "second"]);
|
|
93
|
+
});
|
|
94
|
+
it("applies hard dependency middleware before current middleware", () => {
|
|
95
|
+
const calls = [];
|
|
96
|
+
const first = new FirstMiddleware("first", calls);
|
|
97
|
+
const second = new SecondMiddleware("second", calls);
|
|
98
|
+
const manager = new middleware_manager_1.MiddlewareManager();
|
|
99
|
+
manager.apply(second).dependencies(FirstMiddleware).forRoutes("*");
|
|
100
|
+
manager.apply(first).forRoutes("*");
|
|
101
|
+
runMiddlewares(collectMiddlewares(manager));
|
|
102
|
+
expect(calls).toEqual(["first", "second"]);
|
|
103
|
+
});
|
|
104
|
+
it("applies middleware before target middleware", () => {
|
|
105
|
+
const calls = [];
|
|
106
|
+
const first = new FirstMiddleware("first", calls);
|
|
107
|
+
const second = new SecondMiddleware("second", calls);
|
|
108
|
+
const manager = new middleware_manager_1.MiddlewareManager();
|
|
109
|
+
manager.apply(second).forRoutes("*");
|
|
110
|
+
manager.apply(first).before(SecondMiddleware).forRoutes("*");
|
|
111
|
+
runMiddlewares(collectMiddlewares(manager));
|
|
112
|
+
expect(calls).toEqual(["first", "second"]);
|
|
113
|
+
});
|
|
114
|
+
it("ignores after target middleware when it is not registered", () => {
|
|
115
|
+
const calls = [];
|
|
116
|
+
const first = new FirstMiddleware("first", calls);
|
|
117
|
+
const manager = new middleware_manager_1.MiddlewareManager();
|
|
118
|
+
manager.apply(first).after(MissingMiddleware).forRoutes("*");
|
|
119
|
+
runMiddlewares(collectMiddlewares(manager));
|
|
120
|
+
expect(calls).toEqual(["first"]);
|
|
121
|
+
});
|
|
122
|
+
it("ignores before target middleware when it is not registered", () => {
|
|
123
|
+
const calls = [];
|
|
124
|
+
const first = new FirstMiddleware("first", calls);
|
|
125
|
+
const manager = new middleware_manager_1.MiddlewareManager();
|
|
126
|
+
manager.apply(first).before(MissingMiddleware).forRoutes("*");
|
|
127
|
+
runMiddlewares(collectMiddlewares(manager));
|
|
128
|
+
expect(calls).toEqual(["first"]);
|
|
129
|
+
});
|
|
130
|
+
it("throws when dependencies reference an unregistered middleware", () => {
|
|
131
|
+
const calls = [];
|
|
132
|
+
const first = new FirstMiddleware("first", calls);
|
|
133
|
+
const manager = new middleware_manager_1.MiddlewareManager();
|
|
134
|
+
manager.apply(first).dependencies(MissingMiddleware).forRoutes("*");
|
|
135
|
+
expect(() => collectMiddlewares(manager)).toThrow("Dependency middleware MissingMiddleware is not registered");
|
|
136
|
+
});
|
|
137
|
+
it("throws when middleware ordering is circular", () => {
|
|
138
|
+
const calls = [];
|
|
139
|
+
const first = new FirstMiddleware("first", calls);
|
|
140
|
+
const second = new SecondMiddleware("second", calls);
|
|
141
|
+
const manager = new middleware_manager_1.MiddlewareManager();
|
|
142
|
+
manager.apply(first).before(SecondMiddleware).forRoutes("*");
|
|
143
|
+
manager.apply(second).before(FirstMiddleware).forRoutes("*");
|
|
144
|
+
expect(() => collectMiddlewares(manager)).toThrow("Circular dependency detected in middleware");
|
|
145
|
+
});
|
|
146
|
+
it("applies function middleware with route exclusions", () => {
|
|
147
|
+
const calls = [];
|
|
148
|
+
const manager = new middleware_manager_1.MiddlewareManager();
|
|
149
|
+
const { consumer, middlewares, proxy } = createMiddlewareConsumer();
|
|
150
|
+
manager
|
|
151
|
+
.globalExclude("/global")
|
|
152
|
+
.apply((_req, _res, next) => {
|
|
153
|
+
calls.push("function");
|
|
154
|
+
next();
|
|
155
|
+
})
|
|
156
|
+
.exclude("/local")
|
|
157
|
+
.forRoutes("/route");
|
|
158
|
+
manager.configure(consumer);
|
|
159
|
+
runMiddlewares(middlewares);
|
|
160
|
+
expect(proxy.exclude).toHaveBeenCalledWith("/global", "/local");
|
|
161
|
+
expect(proxy.forRoutes).toHaveBeenCalledWith("/route");
|
|
162
|
+
expect(calls).toEqual(["function"]);
|
|
163
|
+
});
|
|
164
|
+
it("can disable global exclude routes for a middleware", () => {
|
|
165
|
+
const calls = [];
|
|
166
|
+
const first = new FirstMiddleware("first", calls);
|
|
167
|
+
const manager = new middleware_manager_1.MiddlewareManager();
|
|
168
|
+
const { consumer, proxy } = createMiddlewareConsumer();
|
|
169
|
+
manager
|
|
170
|
+
.globalExclude("/global")
|
|
171
|
+
.apply(first)
|
|
172
|
+
.disableGlobalExcludeRoutes()
|
|
173
|
+
.exclude("/local")
|
|
174
|
+
.forRoutes("/route");
|
|
175
|
+
manager.configure(consumer);
|
|
176
|
+
expect(proxy.exclude).toHaveBeenCalledWith("/local");
|
|
177
|
+
expect(proxy.exclude).not.toHaveBeenCalledWith("/global");
|
|
178
|
+
});
|
|
179
|
+
it("returns manager without registering middleware when no routes are provided", () => {
|
|
180
|
+
const calls = [];
|
|
181
|
+
const first = new FirstMiddleware("first", calls);
|
|
182
|
+
const manager = new middleware_manager_1.MiddlewareManager();
|
|
183
|
+
expect(manager.apply(first).forRoutes()).toBe(manager);
|
|
184
|
+
expect(collectMiddlewares(manager)).toEqual([]);
|
|
185
|
+
});
|
|
186
|
+
it("delegates module configuration to the middleware manager", () => {
|
|
187
|
+
const configure = jest.fn();
|
|
188
|
+
const manager = {
|
|
189
|
+
configure,
|
|
190
|
+
};
|
|
191
|
+
const consumer = {};
|
|
192
|
+
const module = new middleware_module_1.MiddlewareModule(manager);
|
|
193
|
+
module.configure(consumer);
|
|
194
|
+
expect(configure).toHaveBeenCalledWith(consumer);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
//# sourceMappingURL=middleware.manager.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.manager.spec.js","sourceRoot":"","sources":["../src/middleware.manager.spec.ts"],"names":[],"mappings":"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"}
|