11import { MiddlewareConfiguration } from './interfaces/middleware-configuration.interface' ;
22import { InvalidMiddlewareConfigurationException } from '../../errors/exceptions/invalid-middleware-configuration.exception' ;
3- import { isUndefined } from '../../common/utils/shared.utils' ;
3+ import { isUndefined , isNil } from '../../common/utils/shared.utils' ;
4+ import { BindResolveMiddlewareValues } from '../../common/utils/bind-resolve-values.util' ;
5+ import { Logger } from '../../common/services/logger.service' ;
6+ import { Metatype } from '../../common/interfaces/metatype.interface' ;
47
58export class MiddlewareBuilder {
6- private storedConfiguration = new Set < MiddlewareConfiguration > ( ) ;
9+ private middlewaresCollection = new Set < MiddlewareConfiguration > ( ) ;
10+ private logger = new Logger ( MiddlewareBuilder . name ) ;
711
12+ apply ( metatypes : Metatype < any > | Array < Metatype < any > > ) : MiddlewareConfigProxy {
13+ let resolveParams = null ;
14+ const configProxy = {
15+ with : ( ...data ) => {
16+ resolveParams = data ;
17+ return configProxy as MiddlewareConfigProxy ;
18+ } ,
19+ forRoutes : ( routes ) => {
20+ if ( isUndefined ( routes ) ) {
21+ throw new InvalidMiddlewareConfigurationException ( ) ;
22+ }
23+ const configuration = {
24+ middlewares : this . bindValuesToResolve ( metatypes , resolveParams ) ,
25+ forRoutes : [ ] . concat ( routes )
26+ } ;
27+ this . middlewaresCollection . add ( < MiddlewareConfiguration > configuration ) ;
28+ return this ;
29+ }
30+ } ;
31+ return configProxy ;
32+ }
33+
34+ /**
35+ * @deprecated
36+ * Since version RC.6 this method is deprecated. Use apply() instead.
37+ */
838 use ( configuration : MiddlewareConfiguration ) {
39+ this . logger . warn ( 'DEPRECATED! Since version RC.6 `use()` method is deprecated. Use `apply()` instead.' ) ;
40+
941 const { middlewares, forRoutes } = configuration ;
1042 if ( isUndefined ( middlewares ) || isUndefined ( forRoutes ) ) {
1143 throw new InvalidMiddlewareConfigurationException ( ) ;
1244 }
1345
14- this . storedConfiguration . add ( configuration ) ;
46+ this . middlewaresCollection . add ( configuration ) ;
1547 return this ;
1648 }
1749
1850 build ( ) {
19- return [ ...this . storedConfiguration ] ;
51+ return [ ...this . middlewaresCollection ] ;
52+ }
53+
54+ private bindValuesToResolve ( middlewares : Metatype < any > | Array < Metatype < any > > , resolveParams : Array < any > ) {
55+ if ( isNil ( resolveParams ) ) {
56+ return middlewares ;
57+ }
58+ const bindArgs = BindResolveMiddlewareValues ( resolveParams ) ;
59+ return [ ] . concat ( middlewares ) . map ( bindArgs ) ;
2060 }
61+ }
2162
63+ export interface MiddlewareConfigProxy {
64+ with : ( ...data ) => MiddlewareConfigProxy ;
65+ forRoutes : ( routes ) => MiddlewareBuilder ;
2266}
0 commit comments