@@ -16,24 +16,44 @@ const isEmpty = v => v === null || v === undefined;
1616/**
1717 * Wrapper for function that handled aws event, context, callback
1818 * and returns unified response for errors and success statuses
19+ * @param {object } settings - Optional settings for function
1920 * @param {handlerFunction } handler - Handles the response
2021 */
21- function R ( handler ) {
22+ function R ( ...params ) {
23+ const defaultSettings = {
24+ validate : data => Promise . resolve ( data ) ,
25+ transform : data => Promise . resolve ( data ) ,
26+ } ;
27+
28+ let settings ;
29+ let handler ;
30+
31+ if ( params . length === 2 ) {
32+ [ settings , handler ] = params ;
33+ }
34+
35+ if ( params . length === 1 ) {
36+ [ handler ] = params ;
37+ settings = { } ;
38+ }
39+
40+ const usedSettings = Object . assign ( { } , defaultSettings , settings ) ;
41+
2242 return ( event , context , callback ) => {
2343 const startTime = process . hrtime ( ) ;
2444 const data = event && event . body
2545 ? JSON . parse ( event . body )
2646 : event . queryStringParameters || { } ;
2747
2848 // calling handler for function
29- let result ;
30- try {
31- result = handler ( data ) ;
32- } catch ( e ) {
33- result = Promise . reject ( e ) ;
34- }
49+ let transformed ;
3550
36- Promise . resolve ( result )
51+ Promise . resolve ( usedSettings . transform ( data ) )
52+ . then ( usedSettings . validate )
53+ . then ( ( transformedData ) => {
54+ transformed = transformedData ;
55+ return handler ( transformedData ) ;
56+ } )
3757 . then ( ( response ) => {
3858 callback ( null , {
3959 statusCode : 200 ,
@@ -45,7 +65,7 @@ function R(handler) {
4565 requestId : context . requestId ,
4666 dataAvailable : ! isEmpty ( response ) ,
4767 executionTimeInMs : calculateExecution ( process . hrtime ( startTime ) ) ,
48- originalRequest : data ,
68+ originalRequest : transformed ,
4969 data : response ,
5070 } ) ,
5171 } ) ;
@@ -61,7 +81,7 @@ function R(handler) {
6181 requestId : context . requestId ,
6282 dataAvailable : false ,
6383 executionTimeInMs : calculateExecution ( process . hrtime ( startTime ) ) ,
64- originalRequest : data ,
84+ originalRequest : transformed ,
6585 errorMessage : err . message || 'Unknown error. No error message' ,
6686 errorName : err . name || 'UnknownError' ,
6787 errorData : err . data ? err . data : null ,
0 commit comments