UNPKG

2.1 kBJavaScriptView Raw
1import { normalizeHttpResponse } from '@middy/util';
2import Accept from '@hapi/accept';
3const defaults = {
4 serializers: [],
5 defaultContentType: undefined
6};
7const httpResponseSerializerMiddleware = (opts = {})=>{
8 const { serializers , defaultContentType } = {
9 ...defaults,
10 ...opts
11 };
12 const httpResponseSerializerMiddlewareAfter = async (request)=>{
13 normalizeHttpResponse(request);
14 if (request.response.headers['Content-Type'] ?? request.response.headers['content-type']) {
15 return;
16 }
17 let types;
18 if (request.event.requiredContentType) {
19 types = [
20 request.event.requiredContentType
21 ];
22 } else {
23 const acceptHeader = request.event.headers.Accept ?? request.event.headers.accept;
24 types = [
25 ...(acceptHeader && Accept.mediaTypes(acceptHeader)) ?? [],
26 request.event.preferredContentType,
27 defaultContentType
28 ];
29 }
30 for (const type of types){
31 let breakTypes;
32 for (const s of serializers){
33 if (!s.regex.test(type)) {
34 continue;
35 }
36 request.response.headers['Content-Type'] = type;
37 const result = s.serializer(request.response);
38 if (typeof result === 'object' && 'body' in result) {
39 request.response = result;
40 } else {
41 request.response.body = result;
42 }
43 breakTypes = true;
44 break;
45 }
46 if (breakTypes) break;
47 }
48 };
49 const httpResponseSerializerMiddlewareOnError = async (request)=>{
50 if (request.response === undefined) return;
51 return httpResponseSerializerMiddlewareAfter(request);
52 };
53 return {
54 after: httpResponseSerializerMiddlewareAfter,
55 onError: httpResponseSerializerMiddlewareOnError
56 };
57};
58export default httpResponseSerializerMiddleware;
59
60
61//# sourceMappingURL=index.js.map
\No newline at end of file