@salesforce/pwa-kit-runtime 3.15.0-nightly-20251208080231 → 3.15.0-preview.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/pwa-kit-runtime",
3
- "version": "3.15.0-nightly-20251208080231",
3
+ "version": "3.15.0-preview.0",
4
4
  "description": "The PWAKit Runtime",
5
5
  "homepage": "https://github.com/SalesforceCommerceCloud/pwa-kit/tree/develop/packages/pwa-kit-runtime#readme",
6
6
  "bugs": {
@@ -46,11 +46,11 @@
46
46
  },
47
47
  "devDependencies": {
48
48
  "@loadable/component": "^5.15.3",
49
- "@salesforce/pwa-kit-dev": "3.15.0-nightly-20251208080231",
49
+ "@salesforce/pwa-kit-dev": "3.15.0-preview.0",
50
50
  "@serverless/event-mocks": "^1.1.1",
51
51
  "aws-lambda-mock-context": "^3.2.1",
52
52
  "fs-extra": "^11.1.1",
53
- "internal-lib-build": "3.15.0-nightly-20251208080231",
53
+ "internal-lib-build": "3.15.0-preview.0",
54
54
  "nock": "^13.3.0",
55
55
  "nodemon": "^2.0.22",
56
56
  "sinon": "^13.0.2",
@@ -58,7 +58,7 @@
58
58
  "supertest": "^4.0.2"
59
59
  },
60
60
  "peerDependencies": {
61
- "@salesforce/pwa-kit-dev": "3.15.0-nightly-20251208080231"
61
+ "@salesforce/pwa-kit-dev": "3.15.0-preview.0"
62
62
  },
63
63
  "peerDependenciesMeta": {
64
64
  "@salesforce/pwa-kit-dev": {
@@ -72,5 +72,5 @@
72
72
  "publishConfig": {
73
73
  "directory": "dist"
74
74
  },
75
- "gitHead": "937b1a20b08cb7fd113601c33d910e817b915e9f"
75
+ "gitHead": "40542ae8754e3274bc7910e89e57c96089e2d22a"
76
76
  }
@@ -17,8 +17,7 @@ var _buildRemoteServer = require("./build-remote-server");
17
17
  var _constants = require("./constants");
18
18
  var _express2 = require("./express");
19
19
  var _crypto = require("crypto");
20
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
21
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
20
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
22
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
22
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
24
23
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _loggerFactory = _interopRequireWildcard(require("./logger-factory"));
4
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
5
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
4
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
6
5
  /*
7
6
  * Copyright (c) 2024, Salesforce, Inc.
8
7
  * All rights reserved.
@@ -2,8 +2,7 @@
2
2
 
3
3
  var _ssrNamespacePaths = require("./ssr-namespace-paths");
4
4
  var ssrConfig = _interopRequireWildcard(require("./ssr-config"));
5
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
6
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
5
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
7
6
  /*
8
7
  * Copyright (c) 2024, Salesforce, Inc.
9
8
  * All rights reserved.
@@ -2,8 +2,7 @@
2
2
 
3
3
  var _configureProxy = require("./configure-proxy");
4
4
  var ssrProxying = _interopRequireWildcard(require("../ssr-proxying"));
5
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
6
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
5
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
7
6
  /*
8
7
  * Copyright (c) 2025, Salesforce, Inc.
9
8
  * All rights reserved.
@@ -3,8 +3,7 @@
3
3
  var _hybridProxy = require("./hybrid-proxy");
4
4
  var _loggerInstance = _interopRequireDefault(require("../logger-instance"));
5
5
  var utils = _interopRequireWildcard(require("./utils"));
6
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
7
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
6
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
8
7
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
8
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
10
9
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.processLambdaResponse = void 0;
6
+ exports.processLambdaResponse = exports.processHeaders = void 0;
7
7
  var _constants = require("../../ssr/server/constants");
8
8
  var _serverlessAdapter = require("@h4ad/serverless-adapter");
9
9
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -16,30 +16,95 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
16
16
  * SPDX-License-Identifier: BSD-3-Clause
17
17
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
18
18
  */
19
+ /**
20
+ * Processes multi-value headers by flattening them into a single headers object,
21
+ * while preserving cookies in multiValueHeaders format.
22
+ * Cookies are extracted from multiValueHeaders and kept separate, as they need
23
+ * to remain in multiValueHeaders format for AWS Lambda responses.
24
+ * Also restores the original content type if it was temporarily replaced
25
+ * (e.g., when binary content encoding is used).
26
+ *
27
+ * @private
28
+ * @param {Object} multiValueHeaders - An object containing multi-value headers,
29
+ * where each key maps to an array of header values (e.g., {'set-cookie': ['cookie1', 'cookie2']})
30
+ * @returns {Object} An object containing:
31
+ * - headers: A flattened headers object with all headers joined by commas,
32
+ * excluding set-cookie headers, with a 'date' header added and content-type
33
+ * restored from x-original-content-type if present
34
+ * - multiValueHeaders: An object containing only the 'set-cookie' header if cookies were present,
35
+ * otherwise an empty object
36
+ */
37
+ const processHeaders = multiValueHeaders => {
38
+ const cookies = multiValueHeaders === null || multiValueHeaders === void 0 ? void 0 : multiValueHeaders['set-cookie'];
39
+ let headers = (0, _serverlessAdapter.getFlattenedHeadersMap)(multiValueHeaders || {}, ',', true);
40
+ headers['date'] = new Date().toUTCString();
41
+ let newMultiValueHeaders = {};
42
+
43
+ // Only allow set-cookie headers to be in multiValueHeaders
44
+ // to return multiple set-cookie headers instead of a single set-cookie header with multiple values
45
+ if (cookies) {
46
+ delete headers['set-cookie'];
47
+ newMultiValueHeaders = {
48
+ 'set-cookie': cookies
49
+ };
50
+ }
51
+
52
+ // If the response contains an X_ORIGINAL_CONTENT_TYPE header,
53
+ // then replace the current CONTENT_TYPE header with it.
54
+ const originalContentType = headers[_constants.X_ORIGINAL_CONTENT_TYPE];
55
+ if (originalContentType) {
56
+ headers[_constants.CONTENT_TYPE] = originalContentType;
57
+ delete headers[_constants.X_ORIGINAL_CONTENT_TYPE];
58
+ }
59
+ return {
60
+ headers,
61
+ multiValueHeaders: newMultiValueHeaders
62
+ };
63
+ };
64
+
65
+ /**
66
+ * Processes a Lambda response by converting multi-value headers to a flattened format,
67
+ * preserving cookies in multiValueHeaders, and adding correlation ID from the event.
68
+ *
69
+ * This function is used to transform Express response headers into the format
70
+ * expected by AWS Lambda/API Gateway, ensuring that:
71
+ * - Multi-value headers are properly flattened (except for set-cookie)
72
+ * - Cookies remain in multiValueHeaders format for proper handling
73
+ * - Correlation IDs are propagated from the request to the response
74
+ * - Original content types are restored when they were temporarily replaced
75
+ * (handled by processHeaders)
76
+ *
77
+ * @param {Object} response - The Lambda response object containing multiValueHeaders
78
+ * @param {Object} event - The Lambda event object containing request headers
79
+ * @param {Object} [event.headers] - Request headers from the Lambda event
80
+ * @param {string} [event.headers['x-correlation-id']] - Correlation ID to add to response headers
81
+ * @returns {Object} The processed response object with:
82
+ * - headers: Flattened headers object (all headers joined by commas, except set-cookie)
83
+ * - multiValueHeaders: Object containing set-cookie headers if present
84
+ * - All other properties from the original response object
85
+ */
86
+ exports.processHeaders = processHeaders;
19
87
  const processLambdaResponse = (response, event) => {
20
88
  var _event$headers;
21
89
  if (!response) return response;
22
90
 
23
91
  // Retrieve the correlation ID from the event headers
24
92
  const correlationId = (_event$headers = event.headers) === null || _event$headers === void 0 ? void 0 : _event$headers['x-correlation-id'];
25
- let joinedHeaders = (0, _serverlessAdapter.getFlattenedHeadersMap)(response.multiValueHeaders || {}, ',', true);
26
- joinedHeaders['date'] = new Date().toUTCString();
27
- delete response['multiValueHeaders'];
93
+
94
+ // The response only has multiValueHeaders but the updated response needs joined single value headers
95
+ // except for the set-cookie headers
96
+ let {
97
+ headers,
98
+ multiValueHeaders
99
+ } = processHeaders(response.multiValueHeaders);
28
100
 
29
101
  // Add the correlation ID to the response headers if it exists
30
102
  if (correlationId) {
31
- joinedHeaders['x-correlation-id'] = correlationId;
32
- }
33
-
34
- // If the response contains an X_ORIGINAL_CONTENT_TYPE header,
35
- // then replace the current CONTENT_TYPE header with it.
36
- const originalContentType = joinedHeaders[_constants.X_ORIGINAL_CONTENT_TYPE];
37
- if (originalContentType) {
38
- joinedHeaders[_constants.CONTENT_TYPE] = originalContentType;
39
- delete joinedHeaders[_constants.X_ORIGINAL_CONTENT_TYPE];
103
+ headers['x-correlation-id'] = correlationId;
40
104
  }
41
105
  const result = _objectSpread(_objectSpread({}, response), {}, {
42
- headers: joinedHeaders
106
+ headers,
107
+ multiValueHeaders
43
108
  });
44
109
  return result;
45
110
  };
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var utils = _interopRequireWildcard(require("./utils"));
4
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
5
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
4
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
6
5
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /*
7
6
  * Copyright (c) 2022, Salesforce, Inc.
8
7
  * All rights reserved.
@@ -502,6 +502,76 @@ describe('processLambdaResponse', () => {
502
502
  testCase.validate(res.headers);
503
503
  });
504
504
  });
505
+ test('preserves single cookie in multiValueHeaders', () => {
506
+ const response = {
507
+ multiValueHeaders: {
508
+ 'set-cookie': ['test-cookie=test-value; Path=/']
509
+ }
510
+ };
511
+ const event = {};
512
+ const result = (0, _ssrServer.processLambdaResponse)(response, event);
513
+ expect(result.multiValueHeaders).toBeDefined();
514
+ expect(result.multiValueHeaders['set-cookie']).toEqual(['test-cookie=test-value; Path=/']);
515
+ expect(result.headers['set-cookie']).toBeUndefined();
516
+ });
517
+ test('preserves multiple cookies in multiValueHeaders', () => {
518
+ const response = {
519
+ multiValueHeaders: {
520
+ 'set-cookie': ['test-cookie=test-value; Path=/', 'test-value2', 'test-value3']
521
+ }
522
+ };
523
+ const event = {};
524
+ const result = (0, _ssrServer.processLambdaResponse)(response, event);
525
+ expect(result.multiValueHeaders).toBeDefined();
526
+ expect(result.multiValueHeaders['set-cookie']).toEqual(['test-cookie=test-value; Path=/', 'test-value2', 'test-value3']);
527
+ expect(result.headers['set-cookie']).toBeUndefined();
528
+ });
529
+ test('removes set-cookie from headers when cookies are in multiValueHeaders', () => {
530
+ const response = {
531
+ multiValueHeaders: {
532
+ 'set-cookie': ['test-cookie=test-value; Path=/'],
533
+ 'Accept-Language': ['en-US']
534
+ }
535
+ };
536
+ const event = {};
537
+ const result = (0, _ssrServer.processLambdaResponse)(response, event);
538
+
539
+ // set-cookie should be removed from headers
540
+ expect(result.headers['set-cookie']).toBeUndefined();
541
+ // Other headers should still be present
542
+ expect(result.headers['accept-language']).toBe('en-US');
543
+ // Cookies should be in multiValueHeaders
544
+ expect(result.multiValueHeaders['set-cookie']).toEqual(['test-cookie=test-value; Path=/']);
545
+ });
546
+ test('does not add multiValueHeaders when no cookies are present', () => {
547
+ const response = {
548
+ multiValueHeaders: {
549
+ 'Accept-Language': ['en-US']
550
+ }
551
+ };
552
+ const event = {};
553
+ const result = (0, _ssrServer.processLambdaResponse)(response, event);
554
+
555
+ // multiValueHeaders should be an empty object when no cookies are present
556
+ expect(result.multiValueHeaders).toEqual({});
557
+ expect(result.headers['accept-language']).toBe('en-US');
558
+ });
559
+ test('handles cookies with correlation ID', () => {
560
+ const response = {
561
+ multiValueHeaders: {
562
+ 'set-cookie': ['test-cookie=test-value; Path=/']
563
+ }
564
+ };
565
+ const event = {
566
+ headers: {
567
+ 'x-correlation-id': 'e46cd109-39b7-4173-963e-2c5de78ba087'
568
+ }
569
+ };
570
+ const result = (0, _ssrServer.processLambdaResponse)(response, event);
571
+ expect(result.headers['x-correlation-id']).toBe('e46cd109-39b7-4173-963e-2c5de78ba087');
572
+ expect(result.multiValueHeaders['set-cookie']).toEqual(['test-cookie=test-value; Path=/']);
573
+ expect(result.headers['set-cookie']).toBeUndefined();
574
+ });
505
575
  });
506
576
  describe('processExpressResponse', () => {
507
577
  const testCases = [{