msw 0.39.1 → 0.39.2
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/lib/esm/index.js +28 -16
- package/lib/esm/mockServiceWorker.js +1 -1
- package/lib/iife/index.js +2 -2
- package/lib/iife/mockServiceWorker.js +1 -1
- package/lib/types/utils/request/setRequestCookies.d.ts +7 -0
- package/lib/umd/index.js +28 -16
- package/lib/umd/mockServiceWorker.js +1 -1
- package/native/lib/index.js +229 -217
- package/node/lib/index.js +229 -217
- package/package.json +8 -5
package/lib/esm/index.js
CHANGED
|
@@ -745,13 +745,36 @@ function getRequestCookies(request) {
|
|
|
745
745
|
}
|
|
746
746
|
}
|
|
747
747
|
|
|
748
|
+
/**
|
|
749
|
+
* Sets relevant cookies on the request.
|
|
750
|
+
* Request cookies are taken from the following sources:
|
|
751
|
+
* - Immediate (own) request cookies (those in the "Cookie" request header);
|
|
752
|
+
* - From the `document.cookie` based on the request's `credentials` value;
|
|
753
|
+
* - From the internal cookie store that persists/hydrates cookies in Node.js
|
|
754
|
+
*/
|
|
748
755
|
function setRequestCookies(request) {
|
|
749
756
|
var _a;
|
|
757
|
+
// Set mocked request cookies from the `cookie` header of the original request.
|
|
758
|
+
// No need to take `credentials` into account, because in Node.js requests are intercepted
|
|
759
|
+
// _after_ they happen. Request issuer should have already taken care of sending relevant cookies.
|
|
760
|
+
// Unlike browser, where interception is on the worker level, _before_ the request happens.
|
|
761
|
+
const requestCookiesString = request.headers.get('cookie');
|
|
750
762
|
store.hydrate();
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
763
|
+
const cookiesFromStore = Array.from((_a = store.get(Object.assign(Object.assign({}, request), { url: request.url.toString() }))) === null || _a === void 0 ? void 0 : _a.entries()).reduce((cookies, [name, { value }]) => {
|
|
764
|
+
return Object.assign(cookies, { [name.trim()]: value });
|
|
765
|
+
}, {});
|
|
766
|
+
const cookiesFromDocument = getRequestCookies(request);
|
|
767
|
+
const forwardedCookies = Object.assign(Object.assign({}, cookiesFromDocument), cookiesFromStore);
|
|
768
|
+
// Ensure the persisted (document) cookies are propagated to the request.
|
|
769
|
+
// Propagated the cookies persisted in the Cookuie Store to the request headers.
|
|
770
|
+
// This forwards relevant request cookies based on the request's credentials.
|
|
771
|
+
for (const [name, value] of Object.entries(forwardedCookies)) {
|
|
772
|
+
request.headers.append('cookie', `${name}=${value}`);
|
|
773
|
+
}
|
|
774
|
+
const ownCookies = requestCookiesString
|
|
775
|
+
? parse_1(requestCookiesString)
|
|
776
|
+
: {};
|
|
777
|
+
request.cookies = Object.assign(Object.assign(Object.assign({}, request.cookies), forwardedCookies), ownCookies);
|
|
755
778
|
}
|
|
756
779
|
|
|
757
780
|
/**
|
|
@@ -1437,6 +1460,7 @@ function parseIsomorphicRequest(request) {
|
|
|
1437
1460
|
url: request.url,
|
|
1438
1461
|
method: request.method,
|
|
1439
1462
|
body: parseBody(request.body, request.headers),
|
|
1463
|
+
credentials: request.credentials || 'same-origin',
|
|
1440
1464
|
headers: request.headers,
|
|
1441
1465
|
cookies: {},
|
|
1442
1466
|
redirect: 'manual',
|
|
@@ -1448,21 +1472,9 @@ function parseIsomorphicRequest(request) {
|
|
|
1448
1472
|
integrity: '',
|
|
1449
1473
|
destination: 'document',
|
|
1450
1474
|
bodyUsed: false,
|
|
1451
|
-
credentials: 'same-origin',
|
|
1452
1475
|
};
|
|
1453
|
-
// Set mocked request cookies from the `cookie` header of the original request.
|
|
1454
|
-
// No need to take `credentials` into account, because in Node.js requests are intercepted
|
|
1455
|
-
// _after_ they happen. Request issuer should have already taken care of sending relevant cookies.
|
|
1456
|
-
// Unlike browser, where interception is on the worker level, _before_ the request happens.
|
|
1457
|
-
const requestCookiesString = request.headers.get('cookie');
|
|
1458
1476
|
// Attach all the cookies from the virtual cookie store.
|
|
1459
1477
|
setRequestCookies(mockedRequest);
|
|
1460
|
-
const requestCookies = requestCookiesString
|
|
1461
|
-
? parse_1(requestCookiesString)
|
|
1462
|
-
: {};
|
|
1463
|
-
// Merge both direct request cookies and the cookies inherited
|
|
1464
|
-
// from other same-origin requests in the cookie store.
|
|
1465
|
-
mockedRequest.cookies = Object.assign(Object.assign({}, mockedRequest.cookies), requestCookies);
|
|
1466
1478
|
return mockedRequest;
|
|
1467
1479
|
}
|
|
1468
1480
|
|