@@ -3,6 +3,7 @@ import inProcessRequestHandler from 'in-process-request';
3
3
import * as apigw from './types' ;
4
4
import eventToRequestOptions from './eventToRequestOptions'
5
5
import { inProcessResponseToLambdaResponse , errorResponse } from './response' ;
6
+ import { MockRequestOptions , MockResponse } from 'in-process-request/dist/compile/httpMock' ;
6
7
7
8
declare namespace handler {
8
9
type APIGatewayEvent = apigw . APIGatewayEvent ;
@@ -16,30 +17,27 @@ const eventWithMultiValueHeaders = (event: handler.APIGatewayEvent): boolean =>
16
17
return event . multiValueHeaders !== null && typeof event . multiValueHeaders === 'object' ;
17
18
}
18
19
19
- const handlerPromise = ( appPromiseFn : ( ) => Promise < RequestListener > ) : handler . APIGatewayEventHandler => {
20
- let _p : Promise < RequestListener > | null = null ;
20
+ const processRequest = ( app : Promise < RequestListener > ) : handler . APIGatewayEventHandler => {
21
+ let appHandler : ( ( r : MockRequestOptions ) => Promise < MockResponse > ) | null = null ;
21
22
return async ( event , ctx ) => {
22
- if ( ! _p ) {
23
- _p = appPromiseFn ( ) ;
23
+ if ( ! appHandler ) {
24
+ const resolvedApp = await app ;
25
+ appHandler = inProcessRequestHandler ( resolvedApp ) ;
26
+ }
27
+ try {
28
+ const reqOptions = eventToRequestOptions ( event , ctx ) ;
29
+ const mockResponse = await appHandler ( reqOptions ) ;
30
+ return inProcessResponseToLambdaResponse ( mockResponse , eventWithMultiValueHeaders ( event ) ) ;
31
+ } catch ( e ) {
32
+ console . error ( e ) ;
33
+ return errorResponse ( ) ;
24
34
}
25
- const app = await _p ;
26
- return processRequest ( app , event , ctx ) ;
27
35
}
28
- }
36
+ } ;
29
37
30
- const processRequest = async ( app : RequestListener , event : handler . APIGatewayEvent , ctx ?: handler . LambdaContext ) : Promise < handler . LambdaResponse > => {
31
- try {
32
- const reqOptions = eventToRequestOptions ( event , ctx ) ;
33
- const appHandler = inProcessRequestHandler ( app ) ;
34
- const mockResponse = await appHandler ( reqOptions ) ;
35
- return inProcessResponseToLambdaResponse ( mockResponse , eventWithMultiValueHeaders ( event ) ) ;
36
- } catch ( e ) {
37
- console . error ( e ) ;
38
- return errorResponse ( ) ;
39
- }
40
- }
38
+ const handlerPromise = ( appPromiseFn : ( ) => Promise < RequestListener > ) : handler . APIGatewayEventHandler => processRequest ( appPromiseFn ( ) ) ;
41
39
42
- const handler = ( app : RequestListener ) : handler . APIGatewayEventHandler => handlerPromise ( async ( ) => app ) ;
40
+ const handler = ( app : RequestListener ) : handler . APIGatewayEventHandler => processRequest ( Promise . resolve ( app ) ) ;
43
41
44
42
handler . deferred = handlerPromise ;
45
43
0 commit comments