@@ -13,15 +13,19 @@ declare namespace handler {
13
13
type APIGatewayEventHandler = ( event : handler . APIGatewayEvent , context ?: handler . LambdaContext ) => Promise < handler . LambdaResponse >
14
14
} ;
15
15
16
+ type F < A , B > = ( a : A ) => B ;
17
+ type Nullable < T > = T | null ;
18
+ type PromiseFactory < A > = ( ) => Promise < A > ;
19
+
16
20
const eventHasMultiValueHeaders = ( event : handler . APIGatewayEvent ) : boolean => {
17
21
return event . multiValueHeaders !== null && typeof event . multiValueHeaders === 'object' ;
18
22
}
19
23
20
- const processRequest = ( app : Promise < RequestListener > ) : handler . APIGatewayEventHandler => {
21
- let appHandler : ( ( r : MockRequestOptions ) => Promise < MockResponse > ) | null = null ;
24
+ const handlerBuilder = ( appFn : PromiseFactory < RequestListener > ) : handler . APIGatewayEventHandler => {
25
+ let appHandler : Nullable < F < MockRequestOptions , Promise < MockResponse > > > ;
22
26
return async ( event , ctx ) => {
23
27
if ( ! appHandler ) {
24
- const resolvedApp = await app ;
28
+ const resolvedApp = await appFn ( ) ;
25
29
appHandler = inProcessRequestHandler ( resolvedApp ) ;
26
30
}
27
31
try {
@@ -35,10 +39,7 @@ const processRequest = (app: Promise<RequestListener>): handler.APIGatewayEventH
35
39
}
36
40
} ;
37
41
38
- const handlerPromise = ( appPromiseFn : ( ) => Promise < RequestListener > ) : handler . APIGatewayEventHandler => processRequest ( appPromiseFn ( ) ) ;
39
-
40
- const handler = ( app : RequestListener ) : handler . APIGatewayEventHandler => processRequest ( Promise . resolve ( app ) ) ;
41
-
42
- handler . deferred = handlerPromise ;
42
+ const handler = ( app : RequestListener ) => handlerBuilder ( ( ) => Promise . resolve ( app ) ) ;
43
+ handler . deferred = handlerBuilder ;
43
44
44
45
export = handler ;
0 commit comments