1
- import { HttpClient , HttpParams , HttpHeaders } from " @angular/common/http" ;
2
- import { InjectionToken , Injector } from " @angular/core" ;
3
- import { MonoTypeOperatorFunction } from 'rxjs' ;
4
- import { delay } from " rxjs/operators" ;
1
+ import { HttpClient } from ' @angular/common/http' ;
2
+ import { InjectionToken , Injector } from ' @angular/core' ;
3
+ import { MonoTypeOperatorFunction } from 'rxjs' ;
4
+ import { delay } from ' rxjs/operators' ;
5
5
6
6
export const HTTP_ANNOTATIONS_USE_MOCKS : InjectionToken < boolean > = new InjectionToken ( 'HTTP_ANNOTATIONS_USE_MOCKS' ) ;
7
7
8
8
export const HTTP_ANNOTATIONS_USE_DELAY : InjectionToken < number > = new InjectionToken ( 'HTTP_ANNOTATIONS_USE_DELAY' ) ;
9
9
10
- interface httpRequestOptions {
11
- body ?: any ;
12
- headers ?: HttpHeaders ;
13
- params ?: HttpParams ;
14
- observe ?: 'body' | 'events' | 'response' ;
15
- reportProgress ?: boolean ;
16
- responseType ?: 'arraybuffer' | 'blob' | 'json' | 'text' ;
17
- withCredentials ?: boolean ;
18
- }
19
10
20
- interface CallConfig { url : string , requestMethodName : string , params : any , args : any [ ] } ;
11
+
12
+ interface CallConfig { url : string ; requestMethodName : string ; params : any ; args : any [ ] ; }
21
13
22
14
23
15
export function observe ( annotations : any ) {
@@ -26,7 +18,7 @@ export function observe(annotations: any) {
26
18
export function path ( annotations : any ) {
27
19
return ( ...args : any [ ] ) => {
28
20
return HttpRestUtils . decorate . apply ( this , [ 'path' , annotations , ...args ] ) ;
29
- }
21
+ } ;
30
22
}
31
23
export function body ( annotations : any ) {
32
24
return ( ...args : any [ ] ) => HttpRestUtils . decorate . apply ( this , [ 'body' , annotations , ...args ] ) ;
@@ -51,11 +43,11 @@ interface ExtraEntityData {
51
43
keyName : string ;
52
44
index : number ;
53
45
}
54
- const RESOURSE_METADATA_ROOT = 'resources_metadata' ;
46
+ const RESOURCE_METADATA_ROOT = 'resources_metadata' ;
55
47
// @dynamic
56
- const NO_DELAY : number = 0 ;
48
+ const NO_DELAY = 0 ;
57
49
58
- const MOCK_DEFAULT_DELAY : number = 500 ;
50
+ const MOCK_DEFAULT_DELAY = 500 ;
59
51
60
52
export class HttpRestUtils {
61
53
@@ -70,7 +62,7 @@ export class HttpRestUtils {
70
62
break ;
71
63
}
72
64
case 2 : {
73
- const [ target , key ] = args ;
65
+ const [ target , __key ] = args ;
74
66
HttpRestUtils . constructMetadata . apply ( this , [ decoratorName , 'props' , annotations , target ] ) ;
75
67
break ;
76
68
}
@@ -80,7 +72,7 @@ export class HttpRestUtils {
80
72
HttpRestUtils . constructMetadata . apply ( this , [ decoratorName , 'params' , annotations , target , { keyName, index } ] ) ;
81
73
break ;
82
74
} else {
83
- const [ target , keyName , descriptor ] = args ;
75
+ const [ target , keyName , __descriptor ] = args ;
84
76
HttpRestUtils . constructMetadata . apply ( this , [ decoratorName , 'methods' , annotations , target , { keyName } ] ) ;
85
77
break ;
86
78
}
@@ -90,20 +82,24 @@ export class HttpRestUtils {
90
82
}
91
83
92
84
/**
93
- * Set up metadada
94
- * @param type Entity type
85
+ * Set up metadata
86
+ * @param entityType
95
87
* @param value Value of metadata
96
88
* @param target Prototype of current object
97
89
* @param metaName Decorator name
98
90
* @param entityData Entity extra data
99
91
*/
100
- private static constructMetadata ( metaName : string , entityType : ResourceMetadataType , value : any , target : any , entityData ?: ExtraEntityData ) {
92
+ private static constructMetadata (
93
+ metaName : string ,
94
+ entityType : ResourceMetadataType ,
95
+ value : any ,
96
+ target : any ,
97
+ entityData ?: ExtraEntityData ) {
101
98
102
- target [ RESOURSE_METADATA_ROOT ] = target [ RESOURSE_METADATA_ROOT ] || { } ;
103
- target [ RESOURSE_METADATA_ROOT ] [ entityType ] = target [ RESOURSE_METADATA_ROOT ] [ entityType ] || { } ;
99
+ target [ RESOURCE_METADATA_ROOT ] = target [ RESOURCE_METADATA_ROOT ] || { } ;
100
+ target [ RESOURCE_METADATA_ROOT ] [ entityType ] = target [ RESOURCE_METADATA_ROOT ] [ entityType ] || { } ;
104
101
105
- const rootMetadata = target [ RESOURSE_METADATA_ROOT ] ;
106
- const metadataObj = target [ RESOURSE_METADATA_ROOT ] [ entityType ] ;
102
+ const metadataObj = target [ RESOURCE_METADATA_ROOT ] [ entityType ] ;
107
103
if ( entityData && entityData . keyName ) {
108
104
metadataObj [ entityData . keyName ] = metadataObj [ entityData . keyName ] || { } ;
109
105
}
@@ -117,21 +113,24 @@ export class HttpRestUtils {
117
113
case 'params' : metadataObj [ entityData . keyName ] [ metaName ] [ value || 'default' ] = entityData . index ;
118
114
}
119
115
120
- target [ RESOURSE_METADATA_ROOT ] [ entityType ] = metadataObj ;
116
+ target [ RESOURCE_METADATA_ROOT ] [ entityType ] = metadataObj ;
121
117
}
122
118
123
119
public static requestMethod ( requestMethodName : string ) : any {
124
120
// @dynamic
125
121
return ( target : any , key : string , descriptor : any ) => {
126
- let originalFunction = descriptor . value ;
122
+ const originalFunction = descriptor . value ;
127
123
128
124
descriptor . value = function ( ...args : any [ ] ) {
129
125
const url = HttpRestUtils . collectUrl ( target , key , args ) ;
130
- const body = HttpRestUtils . collectBody ( target , key , args ) ;
126
+ // tslint:disable-next-line:no-shadowed-variable
127
+ const body = HttpRestUtils . collectBodyContent ( target , key , args ) ;
131
128
const search = HttpRestUtils . collectQueryParams ( target , key , args ) ;
132
- const headers = HttpRestUtils . collectHeaders ( target , key , args ) ;
129
+ // tslint:disable-next-line:no-shadowed-variable
130
+ const headers = HttpRestUtils . collectHttpHeaders ( target , key , args ) ;
133
131
const producesType = HttpRestUtils . produce ( target , key , args ) ;
134
- const observe = HttpRestUtils . getObserve ( target , key , args ) ;
132
+ // tslint:disable-next-line:no-shadowed-variable
133
+ const observe = HttpRestUtils . getHttpClientObserve ( target , key , args ) ;
135
134
const params : any = {
136
135
body,
137
136
params : search ,
@@ -141,17 +140,17 @@ export class HttpRestUtils {
141
140
} ;
142
141
const newArgs = args ;
143
142
const responseIndex = HttpRestUtils . collectResponseIndex ( target , key , args ) ;
144
- const callConfig = {
143
+ const callConfig : CallConfig = {
145
144
url,
146
145
requestMethodName,
147
146
params,
148
147
args : newArgs ,
149
148
} ;
150
149
151
- if ( HttpRestUtils . ifUseMock ( callConfig ) ) { // If use mock is true, call original function, to get mock directly from function
150
+ if ( HttpRestUtils . ifUseMock ( callConfig ) ) { // If " use mock" is true, call original function, to get mock directly from function
152
151
return HttpRestUtils . processIfUseMock ( responseIndex , args , newArgs , originalFunction ) ;
153
152
}
154
- let request = HttpRestUtils . http . request ( requestMethodName , url , params ) ;
153
+ const request = HttpRestUtils . http . request ( requestMethodName , url , params ) ;
155
154
156
155
157
156
@@ -162,10 +161,10 @@ export class HttpRestUtils {
162
161
newArgs . splice ( responseIndex , 0 , request ) ;
163
162
}
164
163
165
- return originalFunction ( ...newArgs ) . pipe ( this . getDelay ( ) ) ;
164
+ return originalFunction ( ...newArgs ) . pipe ( HttpRestUtils . getDelay ( callConfig ) ) ;
166
165
}
167
166
168
- return request . pipe ( this . getDelay ( ) ) ;
167
+ return request . pipe ( HttpRestUtils . getDelay ( callConfig ) ) ;
169
168
} ;
170
169
171
170
} ;
@@ -200,48 +199,48 @@ export class HttpRestUtils {
200
199
return delay ( useDelay as number ) ;
201
200
}
202
201
203
- private static getObserve ( target : any , methodName : string , args : any [ ] ) {
204
- if ( target [ RESOURSE_METADATA_ROOT ] . methods
205
- && target [ RESOURSE_METADATA_ROOT ] . methods [ methodName ] ) {
206
- return target [ RESOURSE_METADATA_ROOT ] . methods [ methodName ] . observe ;
202
+ private static getHttpClientObserve ( target : any , methodName : string , __args : any [ ] ) {
203
+ if ( target [ RESOURCE_METADATA_ROOT ] . methods
204
+ && target [ RESOURCE_METADATA_ROOT ] . methods [ methodName ] ) {
205
+ return target [ RESOURCE_METADATA_ROOT ] . methods [ methodName ] . observe ;
207
206
}
208
207
return undefined ;
209
208
}
210
209
211
- private static produce ( target : any , methodName : string , args : any [ ] ) {
212
- if ( target [ RESOURSE_METADATA_ROOT ] . methods
213
- && target [ RESOURSE_METADATA_ROOT ] . methods [ methodName ] ) {
214
- return target [ RESOURSE_METADATA_ROOT ] . methods [ methodName ] . produces ;
210
+ private static produce ( target : any , methodName : string , __args : any [ ] ) {
211
+ if ( target [ RESOURCE_METADATA_ROOT ] . methods
212
+ && target [ RESOURCE_METADATA_ROOT ] . methods [ methodName ] ) {
213
+ return target [ RESOURCE_METADATA_ROOT ] . methods [ methodName ] . produces ;
215
214
}
216
215
return 'json' ;
217
216
}
218
217
219
218
private static collectUrl ( target : any , methodName : string , args : any [ ] ) {
220
- const baseUrl = target [ RESOURSE_METADATA_ROOT ] && target [ RESOURSE_METADATA_ROOT ] . class
221
- ? target [ RESOURSE_METADATA_ROOT ] . class . path
219
+ const baseUrl = target [ RESOURCE_METADATA_ROOT ] && target [ RESOURCE_METADATA_ROOT ] . class
220
+ ? target [ RESOURCE_METADATA_ROOT ] . class . path
222
221
: '' ;
223
- const methodUrl = target [ RESOURSE_METADATA_ROOT ] . methods && target [ RESOURSE_METADATA_ROOT ] . methods [ methodName ]
224
- ? target [ RESOURSE_METADATA_ROOT ] . methods [ methodName ] . path
222
+ const methodUrl = target [ RESOURCE_METADATA_ROOT ] . methods && target [ RESOURCE_METADATA_ROOT ] . methods [ methodName ]
223
+ ? target [ RESOURCE_METADATA_ROOT ] . methods [ methodName ] . path
225
224
: '' ;
226
225
const isRelativePath = `${ baseUrl } ${ methodUrl } ` [ 0 ] === '/' ;
227
226
const methodUrlWithParams
228
227
= [ baseUrl , methodUrl ]
229
- . filter ( path => path )
228
+ . filter ( pathToFilter => pathToFilter )
230
229
. join ( '/' )
231
230
. split ( '/' )
232
- . map ( path => {
233
- if ( path [ 0 ] === ':' ) {
234
- const paramName = path . substring ( 1 ) ;
235
- const index = target [ RESOURSE_METADATA_ROOT ] . params
236
- && target [ RESOURSE_METADATA_ROOT ] . params [ methodName ]
237
- && target [ RESOURSE_METADATA_ROOT ] . params [ methodName ] . path
238
- ? target [ RESOURSE_METADATA_ROOT ] . params [ methodName ] . path [ paramName ]
231
+ . map ( pathParams => {
232
+ if ( pathParams [ 0 ] === ':' ) {
233
+ const paramName = pathParams . substring ( 1 ) ;
234
+ const index = target [ RESOURCE_METADATA_ROOT ] . params
235
+ && target [ RESOURCE_METADATA_ROOT ] . params [ methodName ]
236
+ && target [ RESOURCE_METADATA_ROOT ] . params [ methodName ] . path
237
+ ? target [ RESOURCE_METADATA_ROOT ] . params [ methodName ] . path [ paramName ]
239
238
: '' ;
240
239
return args [ index ] ;
241
240
}
242
- return path ;
241
+ return pathParams ;
243
242
} )
244
- . filter ( path => path )
243
+ . filter ( pathToFilter => pathToFilter )
245
244
. join ( '/' ) ;
246
245
247
246
if ( ! isRelativePath ) {
@@ -251,33 +250,32 @@ export class HttpRestUtils {
251
250
return `/${ methodUrlWithParams } ` ;
252
251
}
253
252
254
- private static collectBody ( target : any , methodName : string , args : any [ ] ) {
255
- if ( ! target [ RESOURSE_METADATA_ROOT ] . params
256
- || ! target [ RESOURSE_METADATA_ROOT ] . params [ methodName ]
257
- || ! target [ RESOURSE_METADATA_ROOT ] . params [ methodName ] . body ) return undefined ;
253
+ private static collectBodyContent ( target : any , methodName : string , args : any [ ] ) {
254
+ if ( ! target [ RESOURCE_METADATA_ROOT ] . params
255
+ || ! target [ RESOURCE_METADATA_ROOT ] . params [ methodName ]
256
+ || ! target [ RESOURCE_METADATA_ROOT ] . params [ methodName ] . body ) { return undefined ; }
258
257
259
- const index = target [ RESOURSE_METADATA_ROOT ] . params [ methodName ] . body . default ;
258
+ const index = target [ RESOURCE_METADATA_ROOT ] . params [ methodName ] . body . default ;
260
259
return args [ index ] ;
261
260
}
262
261
263
- private static collectResponseIndex ( target : any , methodName : string , args : any [ ] ) {
264
- if ( ! target [ RESOURSE_METADATA_ROOT ] . params
265
- || ! target [ RESOURSE_METADATA_ROOT ] . params [ methodName ]
266
- || ! target [ RESOURSE_METADATA_ROOT ] . params [ methodName ] . response ) return undefined ;
262
+ private static collectResponseIndex ( target : any , methodName : string , __args : any [ ] ) {
263
+ if ( ! target [ RESOURCE_METADATA_ROOT ] . params
264
+ || ! target [ RESOURCE_METADATA_ROOT ] . params [ methodName ]
265
+ || ! target [ RESOURCE_METADATA_ROOT ] . params [ methodName ] . response ) { return undefined ; }
267
266
268
- const index = target [ RESOURSE_METADATA_ROOT ] . params [ methodName ] . response . default ;
269
- return index ;
267
+ return target [ RESOURCE_METADATA_ROOT ] . params [ methodName ] . response . default ;
270
268
}
271
269
272
270
private static collectQueryParams ( target : any , methodName : string , args : any [ ] ) {
273
- if ( ! target [ RESOURSE_METADATA_ROOT ] . params
274
- || ! target [ RESOURSE_METADATA_ROOT ] . params [ methodName ]
275
- || ! target [ RESOURSE_METADATA_ROOT ] . params [ methodName ] . query ) return undefined ;
276
-
277
- let queryParams = { } ;
278
- const queryParamsObjectIndex = target [ RESOURSE_METADATA_ROOT ] . params [ methodName ] . query . default ;
279
- const queryMetadata = target [ RESOURSE_METADATA_ROOT ] . params [ methodName ] . query ;
280
- const queryParamsCollection = queryParamsObjectIndex != undefined
271
+ if ( ! target [ RESOURCE_METADATA_ROOT ] . params
272
+ || ! target [ RESOURCE_METADATA_ROOT ] . params [ methodName ]
273
+ || ! target [ RESOURCE_METADATA_ROOT ] . params [ methodName ] . query ) { return undefined ; }
274
+
275
+ const queryParams = { } ;
276
+ const queryParamsObjectIndex = target [ RESOURCE_METADATA_ROOT ] . params [ methodName ] . query . default ;
277
+ const queryMetadata = target [ RESOURCE_METADATA_ROOT ] . params [ methodName ] . query ;
278
+ const queryParamsCollection = queryParamsObjectIndex !== undefined
281
279
? args [ queryParamsObjectIndex ]
282
280
: Object . keys ( queryMetadata ) . reduce ( ( mergedObj , paramName ) =>
283
281
Object . assign ( mergedObj , { [ paramName ] : args [ queryMetadata [ paramName ] ] } ) , { }
@@ -292,14 +290,11 @@ export class HttpRestUtils {
292
290
return queryParams ;
293
291
}
294
292
295
- private static collectHeaders ( target : any , methodName : string , args : any [ ] ) {
296
- const classHeaders = target [ RESOURSE_METADATA_ROOT ] . class ? target [ RESOURSE_METADATA_ROOT ] . class . headers : { } ;
297
- const methodHeaders = target [ RESOURSE_METADATA_ROOT ] . methods && target [ RESOURSE_METADATA_ROOT ] . methods [ methodName ]
298
- ? target [ RESOURSE_METADATA_ROOT ] . methods [ methodName ] . headers
293
+ private static collectHttpHeaders ( target : any , methodName : string , __args : any [ ] ) {
294
+ const classHeaders = target [ RESOURCE_METADATA_ROOT ] . class ? target [ RESOURCE_METADATA_ROOT ] . class . headers : { } ;
295
+ const methodHeaders = target [ RESOURCE_METADATA_ROOT ] . methods && target [ RESOURCE_METADATA_ROOT ] . methods [ methodName ]
296
+ ? target [ RESOURCE_METADATA_ROOT ] . methods [ methodName ] . headers
299
297
: { } ;
300
- const mergedHeaders = Object . assign ( { } , classHeaders , methodHeaders ) ;
301
-
302
-
303
- return mergedHeaders ;
298
+ return Object . assign ( { } , classHeaders , methodHeaders ) ;
304
299
}
305
300
}
0 commit comments