@middy/http-response-serializer 5.1.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +62 -51
  2. package/package.json +4 -4
package/index.js CHANGED
@@ -1,56 +1,67 @@
1
- import { normalizeHttpResponse } from '@middy/util';
1
+ import { normalizeHttpResponse } from '@middy/util'
2
+
2
3
  const defaults = {
3
- serializers: [],
4
- defaultContentType: undefined
5
- };
6
- const httpResponseSerializerMiddleware = (opts = {})=>{
7
- const { serializers, defaultContentType } = {
8
- ...defaults,
9
- ...opts
10
- };
11
- const httpResponseSerializerMiddlewareAfter = async (request)=>{
12
- normalizeHttpResponse(request);
13
- if (request.response.headers['Content-Type'] ?? request.response.headers['content-type']) {
14
- return;
4
+ serializers: [],
5
+ defaultContentType: undefined
6
+ }
7
+
8
+ const httpResponseSerializerMiddleware = (opts = {}) => {
9
+ const { serializers, defaultContentType } = { ...defaults, ...opts }
10
+ const httpResponseSerializerMiddlewareAfter = async (request) => {
11
+ normalizeHttpResponse(request)
12
+
13
+ // skip serialization when Content-Type or content-type is already set
14
+ if (
15
+ request.response.headers['Content-Type'] ??
16
+ request.response.headers['content-type']
17
+ ) {
18
+ return
19
+ }
20
+
21
+ // find accept value(s)
22
+ let types
23
+
24
+ // TODO deprecate `requiredContentType` in v6
25
+ if (request.event.requiredContentType) {
26
+ types = [request.event.requiredContentType]
27
+ } else {
28
+ types = [
29
+ ...(request.context.preferredMediaTypes ?? []), // from @middy/http-content-negotiation
30
+ defaultContentType
31
+ ]
32
+ }
33
+
34
+ for (const type of types) {
35
+ let breakTypes
36
+ for (const s of serializers) {
37
+ if (!s.regex.test(type)) {
38
+ continue
15
39
  }
16
- let types;
17
- if (request.event.requiredContentType) {
18
- types = [
19
- request.event.requiredContentType
20
- ];
40
+
41
+ request.response.headers['Content-Type'] = type
42
+ const result = s.serializer(request.response)
43
+ if (typeof result === 'object' && 'body' in result) {
44
+ request.response = result
21
45
  } else {
22
- types = [
23
- ...request.context.preferredMediaTypes ?? [],
24
- defaultContentType
25
- ];
26
- }
27
- for (const type of types){
28
- let breakTypes;
29
- for (const s of serializers){
30
- if (!s.regex.test(type)) {
31
- continue;
32
- }
33
- request.response.headers['Content-Type'] = type;
34
- const result = s.serializer(request.response);
35
- if (typeof result === 'object' && 'body' in result) {
36
- request.response = result;
37
- } else {
38
- request.response.body = result;
39
- }
40
- breakTypes = true;
41
- break;
42
- }
43
- if (breakTypes) break;
46
+ // otherwise only replace the body attribute
47
+ request.response.body = result
44
48
  }
45
- };
46
- const httpResponseSerializerMiddlewareOnError = async (request)=>{
47
- if (request.response === undefined) return;
48
- await httpResponseSerializerMiddlewareAfter(request);
49
- };
50
- return {
51
- after: httpResponseSerializerMiddlewareAfter,
52
- onError: httpResponseSerializerMiddlewareOnError
53
- };
54
- };
55
- export default httpResponseSerializerMiddleware;
56
49
 
50
+ breakTypes = true
51
+ break
52
+ }
53
+ if (breakTypes) break
54
+ }
55
+ }
56
+
57
+ const httpResponseSerializerMiddlewareOnError = async (request) => {
58
+ if (request.response === undefined) return
59
+ await httpResponseSerializerMiddlewareAfter(request)
60
+ }
61
+ return {
62
+ after: httpResponseSerializerMiddlewareAfter,
63
+ onError: httpResponseSerializerMiddlewareOnError
64
+ }
65
+ }
66
+
67
+ export default httpResponseSerializerMiddleware
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@middy/http-response-serializer",
3
- "version": "5.1.0",
3
+ "version": "5.2.0",
4
4
  "description": "The Http Serializer middleware lets you define serialization mechanisms based on the current content negotiation.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -63,10 +63,10 @@
63
63
  "url": "https://github.com/sponsors/willfarrell"
64
64
  },
65
65
  "dependencies": {
66
- "@middy/util": "5.1.0"
66
+ "@middy/util": "5.2.0"
67
67
  },
68
68
  "devDependencies": {
69
- "@middy/core": "5.1.0"
69
+ "@middy/core": "5.2.0"
70
70
  },
71
- "gitHead": "bbdaf5843914921804ba085dd58117273febe6b5"
71
+ "gitHead": "2d9096a49cd8fb62359517be96d6c93609df41f0"
72
72
  }