-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
57 lines (43 loc) · 1.38 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
const { transformRequest, transformResponse } = require('./src/apiGatewayTransformers')
const { logRequest, logResponse } = require('./src/logging')
const handleEvent = async (server, e, config) => {
const { enableLogs = true, logger = console } = config
const start = Date.now()
const preTransformRequest = Date.now()
const request = transformRequest(e)
const postTransformRequest = Date.now()
if (enableLogs) {
logRequest({ request, logger })
}
const preInject = Date.now()
const serverResponse = await server.inject(request)
const postInject = Date.now()
const preTransformResponse = Date.now()
const response = transformResponse(serverResponse)
const postTransformResponse = Date.now()
const end = Date.now()
const timing = {
total: end - start,
transformRequest: postTransformRequest - preTransformRequest,
inject: postInject - preInject,
transformResponse: postTransformResponse - preTransformResponse
}
if (enableLogs) {
logResponse({ request, response, timing, logger })
}
return response
}
let server
module.exports = (init, config = {}) => {
if (!init) {
throw new Error('Function "init" was not provided')
}
return async (e) => {
if (!server) {
server = await init()
await server.initialize()
console.log(`Server ready on ${server.info.uri}`)
}
return handleEvent(server, e, config)
}
}