@mswjs/interceptors 0.40.0 → 0.41.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/ClientRequest/package.json +7 -2
- package/RemoteHttpInterceptor/package.json +7 -2
- package/WebSocket/package.json +9 -2
- package/XMLHttpRequest/package.json +9 -3
- package/fetch/package.json +9 -3
- package/lib/browser/Interceptor-2mUoKZL1.d.mts +65 -0
- package/lib/browser/Interceptor-Deczogc8.d.cts +65 -0
- package/lib/browser/XMLHttpRequest-BUfglQD1.cjs +761 -0
- package/lib/browser/XMLHttpRequest-BUfglQD1.cjs.map +1 -0
- package/lib/browser/XMLHttpRequest-DS5fc8Qs.mjs +756 -0
- package/lib/browser/XMLHttpRequest-DS5fc8Qs.mjs.map +1 -0
- package/lib/browser/bufferUtils-BiiO6HZv.mjs +20 -0
- package/lib/browser/bufferUtils-BiiO6HZv.mjs.map +1 -0
- package/lib/browser/bufferUtils-Uc0eRItL.cjs +38 -0
- package/lib/browser/bufferUtils-Uc0eRItL.cjs.map +1 -0
- package/lib/browser/createRequestId-Cs4oXfa1.cjs +205 -0
- package/lib/browser/createRequestId-Cs4oXfa1.cjs.map +1 -0
- package/lib/browser/createRequestId-DQcIlohW.mjs +170 -0
- package/lib/browser/createRequestId-DQcIlohW.mjs.map +1 -0
- package/lib/browser/fetch-BHcqM3z7.cjs +253 -0
- package/lib/browser/fetch-BHcqM3z7.cjs.map +1 -0
- package/lib/browser/fetch-DSJoynSF.mjs +248 -0
- package/lib/browser/fetch-DSJoynSF.mjs.map +1 -0
- package/lib/browser/getRawRequest-BTaNLFr0.mjs +218 -0
- package/lib/browser/getRawRequest-BTaNLFr0.mjs.map +1 -0
- package/lib/browser/getRawRequest-zx8rUJL2.cjs +259 -0
- package/lib/browser/getRawRequest-zx8rUJL2.cjs.map +1 -0
- package/lib/browser/glossary-BdLS4k1H.d.cts +70 -0
- package/lib/browser/glossary-gEEJhK4S.d.mts +70 -0
- package/lib/browser/handleRequest-DI6a7Dty.cjs +189 -0
- package/lib/browser/handleRequest-DI6a7Dty.cjs.map +1 -0
- package/lib/browser/handleRequest-DxGbCTbb.mjs +178 -0
- package/lib/browser/handleRequest-DxGbCTbb.mjs.map +1 -0
- package/lib/browser/hasConfigurableGlobal-C8kXFDic.mjs +33 -0
- package/lib/browser/hasConfigurableGlobal-C8kXFDic.mjs.map +1 -0
- package/lib/browser/hasConfigurableGlobal-D7S3l5h6.cjs +45 -0
- package/lib/browser/hasConfigurableGlobal-D7S3l5h6.cjs.map +1 -0
- package/lib/browser/index.cjs +68 -0
- package/lib/browser/index.cjs.map +1 -0
- package/lib/browser/index.d.cts +87 -0
- package/lib/browser/index.d.mts +87 -0
- package/lib/browser/index.mjs +49 -77
- package/lib/browser/index.mjs.map +1 -1
- package/lib/browser/interceptors/WebSocket/index.cjs +621 -0
- package/lib/browser/interceptors/WebSocket/index.cjs.map +1 -0
- package/lib/browser/interceptors/WebSocket/index.d.cts +277 -0
- package/lib/browser/interceptors/WebSocket/index.d.mts +277 -0
- package/lib/browser/interceptors/WebSocket/index.mjs +587 -694
- package/lib/browser/interceptors/WebSocket/index.mjs.map +1 -1
- package/lib/browser/interceptors/XMLHttpRequest/index.cjs +7 -0
- package/lib/browser/interceptors/XMLHttpRequest/index.d.cts +15 -0
- package/lib/browser/interceptors/XMLHttpRequest/index.d.mts +15 -0
- package/lib/browser/interceptors/XMLHttpRequest/index.mjs +7 -12
- package/lib/browser/interceptors/fetch/index.cjs +6 -0
- package/lib/browser/interceptors/fetch/index.d.cts +13 -0
- package/lib/browser/interceptors/fetch/index.d.mts +13 -0
- package/lib/browser/interceptors/fetch/index.mjs +6 -11
- package/lib/browser/presets/browser.cjs +17 -0
- package/lib/browser/presets/browser.cjs.map +1 -0
- package/lib/browser/presets/browser.d.cts +12 -0
- package/lib/browser/presets/browser.d.mts +14 -0
- package/lib/browser/presets/browser.mjs +15 -19
- package/lib/browser/presets/browser.mjs.map +1 -1
- package/lib/node/BatchInterceptor-3LnAnLTx.cjs +49 -0
- package/lib/node/BatchInterceptor-3LnAnLTx.cjs.map +1 -0
- package/lib/node/BatchInterceptor-D7mXzHcQ.d.mts +26 -0
- package/lib/node/BatchInterceptor-DFaBPilf.mjs +44 -0
- package/lib/node/BatchInterceptor-DFaBPilf.mjs.map +1 -0
- package/lib/node/BatchInterceptor-D_YqR8qU.d.cts +26 -0
- package/lib/node/ClientRequest-2rDe54Ui.cjs +1043 -0
- package/lib/node/ClientRequest-2rDe54Ui.cjs.map +1 -0
- package/lib/node/ClientRequest-Ca8Qykuv.mjs +1034 -0
- package/lib/node/ClientRequest-Ca8Qykuv.mjs.map +1 -0
- package/lib/node/Interceptor-DEazpLJd.d.mts +133 -0
- package/lib/node/Interceptor-DJ2akVWI.d.cts +133 -0
- package/lib/node/RemoteHttpInterceptor.cjs +154 -0
- package/lib/node/RemoteHttpInterceptor.cjs.map +1 -0
- package/lib/node/RemoteHttpInterceptor.d.cts +39 -0
- package/lib/node/RemoteHttpInterceptor.d.mts +39 -0
- package/lib/node/RemoteHttpInterceptor.mjs +145 -190
- package/lib/node/RemoteHttpInterceptor.mjs.map +1 -1
- package/lib/node/XMLHttpRequest-B7kJdYYI.cjs +763 -0
- package/lib/node/XMLHttpRequest-B7kJdYYI.cjs.map +1 -0
- package/lib/node/XMLHttpRequest-C8dIZpds.mjs +757 -0
- package/lib/node/XMLHttpRequest-C8dIZpds.mjs.map +1 -0
- package/lib/node/bufferUtils-DiCTqG-7.cjs +38 -0
- package/lib/node/bufferUtils-DiCTqG-7.cjs.map +1 -0
- package/lib/node/bufferUtils-_8XfKIfX.mjs +20 -0
- package/lib/node/bufferUtils-_8XfKIfX.mjs.map +1 -0
- package/lib/node/chunk-CbDLau6x.cjs +34 -0
- package/lib/node/fetch-BmXpK10r.cjs +272 -0
- package/lib/node/fetch-BmXpK10r.cjs.map +1 -0
- package/lib/node/fetch-G1DVwDKG.mjs +265 -0
- package/lib/node/fetch-G1DVwDKG.mjs.map +1 -0
- package/lib/node/fetchUtils-BaY5iWXw.cjs +419 -0
- package/lib/node/fetchUtils-BaY5iWXw.cjs.map +1 -0
- package/lib/node/fetchUtils-CoU35g3M.mjs +359 -0
- package/lib/node/fetchUtils-CoU35g3M.mjs.map +1 -0
- package/lib/node/getRawRequest-BavnMWh_.cjs +36 -0
- package/lib/node/getRawRequest-BavnMWh_.cjs.map +1 -0
- package/lib/node/getRawRequest-DnwmXyOW.mjs +24 -0
- package/lib/node/getRawRequest-DnwmXyOW.mjs.map +1 -0
- package/lib/node/glossary-BLKRyLBd.cjs +12 -0
- package/lib/node/glossary-BLKRyLBd.cjs.map +1 -0
- package/lib/node/glossary-glQBRnVD.mjs +6 -0
- package/lib/node/glossary-glQBRnVD.mjs.map +1 -0
- package/lib/node/handleRequest-Bb7Y-XLw.cjs +220 -0
- package/lib/node/handleRequest-Bb7Y-XLw.cjs.map +1 -0
- package/lib/node/handleRequest-Y97UwBbF.mjs +190 -0
- package/lib/node/handleRequest-Y97UwBbF.mjs.map +1 -0
- package/lib/node/hasConfigurableGlobal-C97fWuaA.cjs +26 -0
- package/lib/node/hasConfigurableGlobal-C97fWuaA.cjs.map +1 -0
- package/lib/node/hasConfigurableGlobal-DBJA0vjm.mjs +20 -0
- package/lib/node/hasConfigurableGlobal-DBJA0vjm.mjs.map +1 -0
- package/lib/node/index-BMbJ8FXL.d.cts +113 -0
- package/lib/node/index-C0YAQ36w.d.mts +113 -0
- package/lib/node/index.cjs +30 -0
- package/lib/node/index.cjs.map +1 -0
- package/lib/node/index.d.cts +66 -0
- package/lib/node/index.d.mts +66 -0
- package/lib/node/index.mjs +13 -41
- package/lib/node/index.mjs.map +1 -1
- package/lib/node/interceptors/ClientRequest/index.cjs +6 -0
- package/lib/node/interceptors/ClientRequest/index.d.cts +2 -0
- package/lib/node/interceptors/ClientRequest/index.d.mts +3 -0
- package/lib/node/interceptors/ClientRequest/index.mjs +6 -11
- package/lib/node/interceptors/XMLHttpRequest/index.cjs +6 -0
- package/lib/node/interceptors/XMLHttpRequest/index.d.cts +14 -0
- package/lib/node/interceptors/XMLHttpRequest/index.d.mts +14 -0
- package/lib/node/interceptors/XMLHttpRequest/index.mjs +6 -13
- package/lib/node/interceptors/fetch/index.cjs +5 -0
- package/lib/node/interceptors/fetch/index.d.cts +12 -0
- package/lib/node/interceptors/fetch/index.d.mts +12 -0
- package/lib/node/interceptors/fetch/index.mjs +5 -12
- package/lib/node/node-DwCc6iuP.mjs +27 -0
- package/lib/node/node-DwCc6iuP.mjs.map +1 -0
- package/lib/node/node-dKdAf3tC.cjs +39 -0
- package/lib/node/node-dKdAf3tC.cjs.map +1 -0
- package/lib/node/presets/node.cjs +22 -0
- package/lib/node/presets/node.cjs.map +1 -0
- package/lib/node/presets/node.d.cts +13 -0
- package/lib/node/presets/node.d.mts +15 -0
- package/lib/node/presets/node.mjs +18 -23
- package/lib/node/presets/node.mjs.map +1 -1
- package/lib/node/utils/node/index.cjs +4 -0
- package/lib/node/utils/node/{index.d.ts → index.d.cts} +5 -2
- package/lib/node/utils/node/index.d.mts +16 -0
- package/lib/node/utils/node/index.mjs +3 -10
- package/package.json +33 -59
- package/presets/browser/package.json +2 -3
- package/presets/node/package.json +7 -2
- package/src/interceptors/ClientRequest/MockHttpSocket.ts +21 -8
- package/src/interceptors/ClientRequest/utils/parserUtils.ts +48 -0
- package/src/interceptors/WebSocket/index.ts +4 -1
- package/src/interceptors/XMLHttpRequest/utils/getBodyByteLength.test.ts +2 -2
- package/lib/browser/Interceptor-af98b768.d.ts +0 -63
- package/lib/browser/chunk-2HUMWGRD.js +0 -37
- package/lib/browser/chunk-2HUMWGRD.js.map +0 -1
- package/lib/browser/chunk-2MCNQOY3.js +0 -851
- package/lib/browser/chunk-2MCNQOY3.js.map +0 -1
- package/lib/browser/chunk-57RIRQUY.js +0 -218
- package/lib/browser/chunk-57RIRQUY.js.map +0 -1
- package/lib/browser/chunk-6HYIRFX2.mjs +0 -22
- package/lib/browser/chunk-6HYIRFX2.mjs.map +0 -1
- package/lib/browser/chunk-FW45TRCB.js +0 -178
- package/lib/browser/chunk-FW45TRCB.js.map +0 -1
- package/lib/browser/chunk-JQ2S7G56.js +0 -185
- package/lib/browser/chunk-JQ2S7G56.js.map +0 -1
- package/lib/browser/chunk-LIKZF2VU.mjs +0 -218
- package/lib/browser/chunk-LIKZF2VU.mjs.map +0 -1
- package/lib/browser/chunk-LK6DILFK.js +0 -22
- package/lib/browser/chunk-LK6DILFK.js.map +0 -1
- package/lib/browser/chunk-MNT2FUCH.js +0 -301
- package/lib/browser/chunk-MNT2FUCH.js.map +0 -1
- package/lib/browser/chunk-VOUOVDAW.mjs +0 -178
- package/lib/browser/chunk-VOUOVDAW.mjs.map +0 -1
- package/lib/browser/chunk-VYSDLBSS.mjs +0 -37
- package/lib/browser/chunk-VYSDLBSS.mjs.map +0 -1
- package/lib/browser/chunk-WADP6VHN.mjs +0 -851
- package/lib/browser/chunk-WADP6VHN.mjs.map +0 -1
- package/lib/browser/chunk-WOWPV4GR.mjs +0 -301
- package/lib/browser/chunk-WOWPV4GR.mjs.map +0 -1
- package/lib/browser/chunk-Z5TSB3T6.mjs +0 -185
- package/lib/browser/chunk-Z5TSB3T6.mjs.map +0 -1
- package/lib/browser/glossary-f7ee1c9d.d.ts +0 -74
- package/lib/browser/index.d.ts +0 -82
- package/lib/browser/index.js +0 -83
- package/lib/browser/index.js.map +0 -1
- package/lib/browser/interceptors/WebSocket/index.d.ts +0 -271
- package/lib/browser/interceptors/WebSocket/index.js +0 -721
- package/lib/browser/interceptors/WebSocket/index.js.map +0 -1
- package/lib/browser/interceptors/XMLHttpRequest/index.d.ts +0 -14
- package/lib/browser/interceptors/XMLHttpRequest/index.js +0 -12
- package/lib/browser/interceptors/XMLHttpRequest/index.js.map +0 -1
- package/lib/browser/interceptors/XMLHttpRequest/index.mjs.map +0 -1
- package/lib/browser/interceptors/fetch/index.d.ts +0 -13
- package/lib/browser/interceptors/fetch/index.js +0 -11
- package/lib/browser/interceptors/fetch/index.js.map +0 -1
- package/lib/browser/interceptors/fetch/index.mjs.map +0 -1
- package/lib/browser/presets/browser.d.ts +0 -14
- package/lib/browser/presets/browser.js +0 -21
- package/lib/browser/presets/browser.js.map +0 -1
- package/lib/node/BatchInterceptor-cb9a2eee.d.ts +0 -24
- package/lib/node/Interceptor-dc0a39b5.d.ts +0 -136
- package/lib/node/RemoteHttpInterceptor.d.ts +0 -44
- package/lib/node/RemoteHttpInterceptor.js +0 -197
- package/lib/node/RemoteHttpInterceptor.js.map +0 -1
- package/lib/node/chunk-5UGIB6OX.mjs +0 -1126
- package/lib/node/chunk-5UGIB6OX.mjs.map +0 -1
- package/lib/node/chunk-5V3SIIW2.mjs +0 -853
- package/lib/node/chunk-5V3SIIW2.mjs.map +0 -1
- package/lib/node/chunk-6B3ZQOO2.js +0 -853
- package/lib/node/chunk-6B3ZQOO2.js.map +0 -1
- package/lib/node/chunk-6HYIRFX2.mjs +0 -22
- package/lib/node/chunk-6HYIRFX2.mjs.map +0 -1
- package/lib/node/chunk-6YM4PLBI.mjs +0 -7
- package/lib/node/chunk-6YM4PLBI.mjs.map +0 -1
- package/lib/node/chunk-73NOP3T5.js +0 -7
- package/lib/node/chunk-73NOP3T5.js.map +0 -1
- package/lib/node/chunk-7Q53NNPV.js +0 -189
- package/lib/node/chunk-7Q53NNPV.js.map +0 -1
- package/lib/node/chunk-DOWWQYXZ.js +0 -369
- package/lib/node/chunk-DOWWQYXZ.js.map +0 -1
- package/lib/node/chunk-FRZQJNBO.js +0 -318
- package/lib/node/chunk-FRZQJNBO.js.map +0 -1
- package/lib/node/chunk-GKN5RBVR.mjs +0 -32
- package/lib/node/chunk-GKN5RBVR.mjs.map +0 -1
- package/lib/node/chunk-J5MULIHT.js +0 -51
- package/lib/node/chunk-J5MULIHT.js.map +0 -1
- package/lib/node/chunk-JXGB54LE.mjs +0 -369
- package/lib/node/chunk-JXGB54LE.mjs.map +0 -1
- package/lib/node/chunk-LK6DILFK.js +0 -22
- package/lib/node/chunk-LK6DILFK.js.map +0 -1
- package/lib/node/chunk-OFW5L5ET.mjs +0 -318
- package/lib/node/chunk-OFW5L5ET.mjs.map +0 -1
- package/lib/node/chunk-PFGO5BSM.js +0 -25
- package/lib/node/chunk-PFGO5BSM.js.map +0 -1
- package/lib/node/chunk-R6T7CL5E.mjs +0 -189
- package/lib/node/chunk-R6T7CL5E.mjs.map +0 -1
- package/lib/node/chunk-SQ6RHTJR.mjs +0 -51
- package/lib/node/chunk-SQ6RHTJR.mjs.map +0 -1
- package/lib/node/chunk-SRMAQGPM.js +0 -30
- package/lib/node/chunk-SRMAQGPM.js.map +0 -1
- package/lib/node/chunk-T3TW4P64.js +0 -32
- package/lib/node/chunk-T3TW4P64.js.map +0 -1
- package/lib/node/chunk-TX5GBTFY.mjs +0 -25
- package/lib/node/chunk-TX5GBTFY.mjs.map +0 -1
- package/lib/node/chunk-VYO5XDY2.js +0 -1126
- package/lib/node/chunk-VYO5XDY2.js.map +0 -1
- package/lib/node/chunk-YWNGXXUQ.mjs +0 -30
- package/lib/node/chunk-YWNGXXUQ.mjs.map +0 -1
- package/lib/node/index.d.ts +0 -61
- package/lib/node/index.js +0 -45
- package/lib/node/index.js.map +0 -1
- package/lib/node/interceptors/ClientRequest/index.d.ts +0 -110
- package/lib/node/interceptors/ClientRequest/index.js +0 -11
- package/lib/node/interceptors/ClientRequest/index.js.map +0 -1
- package/lib/node/interceptors/ClientRequest/index.mjs.map +0 -1
- package/lib/node/interceptors/XMLHttpRequest/index.d.ts +0 -13
- package/lib/node/interceptors/XMLHttpRequest/index.js +0 -13
- package/lib/node/interceptors/XMLHttpRequest/index.js.map +0 -1
- package/lib/node/interceptors/XMLHttpRequest/index.mjs.map +0 -1
- package/lib/node/interceptors/fetch/index.d.ts +0 -12
- package/lib/node/interceptors/fetch/index.js +0 -12
- package/lib/node/interceptors/fetch/index.js.map +0 -1
- package/lib/node/interceptors/fetch/index.mjs.map +0 -1
- package/lib/node/presets/node.d.ts +0 -15
- package/lib/node/presets/node.js +0 -27
- package/lib/node/presets/node.js.map +0 -1
- package/lib/node/utils/node/index.js +0 -10
- package/lib/node/utils/node/index.js.map +0 -1
- package/lib/node/utils/node/index.mjs.map +0 -1
|
@@ -1,318 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
-
|
|
3
|
-
var _chunkPFGO5BSMjs = require('./chunk-PFGO5BSM.js');
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var _chunk73NOP3T5js = require('./chunk-73NOP3T5.js');
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var _chunk7Q53NNPVjs = require('./chunk-7Q53NNPV.js');
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
var _chunkDOWWQYXZjs = require('./chunk-DOWWQYXZ.js');
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
var _chunkSRMAQGPMjs = require('./chunk-SRMAQGPM.js');
|
|
22
|
-
|
|
23
|
-
// src/interceptors/fetch/index.ts
|
|
24
|
-
var _outvariant = require('outvariant');
|
|
25
|
-
var _until = require('@open-draft/until');
|
|
26
|
-
var _deferredpromise = require('@open-draft/deferred-promise');
|
|
27
|
-
|
|
28
|
-
// src/interceptors/fetch/utils/createNetworkError.ts
|
|
29
|
-
function createNetworkError(cause) {
|
|
30
|
-
return Object.assign(new TypeError("Failed to fetch"), {
|
|
31
|
-
cause
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// src/interceptors/fetch/utils/followRedirect.ts
|
|
36
|
-
var REQUEST_BODY_HEADERS = [
|
|
37
|
-
"content-encoding",
|
|
38
|
-
"content-language",
|
|
39
|
-
"content-location",
|
|
40
|
-
"content-type",
|
|
41
|
-
"content-length"
|
|
42
|
-
];
|
|
43
|
-
var kRedirectCount = Symbol("kRedirectCount");
|
|
44
|
-
async function followFetchRedirect(request, response) {
|
|
45
|
-
if (response.status !== 303 && request.body != null) {
|
|
46
|
-
return Promise.reject(createNetworkError());
|
|
47
|
-
}
|
|
48
|
-
const requestUrl = new URL(request.url);
|
|
49
|
-
let locationUrl;
|
|
50
|
-
try {
|
|
51
|
-
locationUrl = new URL(response.headers.get("location"), request.url);
|
|
52
|
-
} catch (error) {
|
|
53
|
-
return Promise.reject(createNetworkError(error));
|
|
54
|
-
}
|
|
55
|
-
if (!(locationUrl.protocol === "http:" || locationUrl.protocol === "https:")) {
|
|
56
|
-
return Promise.reject(
|
|
57
|
-
createNetworkError("URL scheme must be a HTTP(S) scheme")
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
if (Reflect.get(request, kRedirectCount) > 20) {
|
|
61
|
-
return Promise.reject(createNetworkError("redirect count exceeded"));
|
|
62
|
-
}
|
|
63
|
-
Object.defineProperty(request, kRedirectCount, {
|
|
64
|
-
value: (Reflect.get(request, kRedirectCount) || 0) + 1
|
|
65
|
-
});
|
|
66
|
-
if (request.mode === "cors" && (locationUrl.username || locationUrl.password) && !sameOrigin(requestUrl, locationUrl)) {
|
|
67
|
-
return Promise.reject(
|
|
68
|
-
createNetworkError('cross origin not allowed for request mode "cors"')
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
const requestInit = {};
|
|
72
|
-
if ([301, 302].includes(response.status) && request.method === "POST" || response.status === 303 && !["HEAD", "GET"].includes(request.method)) {
|
|
73
|
-
requestInit.method = "GET";
|
|
74
|
-
requestInit.body = null;
|
|
75
|
-
REQUEST_BODY_HEADERS.forEach((headerName) => {
|
|
76
|
-
request.headers.delete(headerName);
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
if (!sameOrigin(requestUrl, locationUrl)) {
|
|
80
|
-
request.headers.delete("authorization");
|
|
81
|
-
request.headers.delete("proxy-authorization");
|
|
82
|
-
request.headers.delete("cookie");
|
|
83
|
-
request.headers.delete("host");
|
|
84
|
-
}
|
|
85
|
-
requestInit.headers = request.headers;
|
|
86
|
-
const finalResponse = await fetch(new Request(locationUrl, requestInit));
|
|
87
|
-
Object.defineProperty(finalResponse, "redirected", {
|
|
88
|
-
value: true,
|
|
89
|
-
configurable: true
|
|
90
|
-
});
|
|
91
|
-
return finalResponse;
|
|
92
|
-
}
|
|
93
|
-
function sameOrigin(left, right) {
|
|
94
|
-
if (left.origin === right.origin && left.origin === "null") {
|
|
95
|
-
return true;
|
|
96
|
-
}
|
|
97
|
-
if (left.protocol === right.protocol && left.hostname === right.hostname && left.port === right.port) {
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// src/interceptors/fetch/utils/brotli-decompress.ts
|
|
104
|
-
var _zlib = require('zlib'); var _zlib2 = _interopRequireDefault(_zlib);
|
|
105
|
-
var BrotliDecompressionStream = class extends TransformStream {
|
|
106
|
-
constructor() {
|
|
107
|
-
const decompress = _zlib2.default.createBrotliDecompress({
|
|
108
|
-
flush: _zlib2.default.constants.BROTLI_OPERATION_FLUSH,
|
|
109
|
-
finishFlush: _zlib2.default.constants.BROTLI_OPERATION_FLUSH
|
|
110
|
-
});
|
|
111
|
-
super({
|
|
112
|
-
async transform(chunk, controller) {
|
|
113
|
-
const buffer = Buffer.from(chunk);
|
|
114
|
-
const decompressed = await new Promise((resolve, reject) => {
|
|
115
|
-
decompress.write(buffer, (error) => {
|
|
116
|
-
if (error)
|
|
117
|
-
reject(error);
|
|
118
|
-
});
|
|
119
|
-
decompress.flush();
|
|
120
|
-
decompress.once("data", (data) => resolve(data));
|
|
121
|
-
decompress.once("error", (error) => reject(error));
|
|
122
|
-
decompress.once("end", () => controller.terminate());
|
|
123
|
-
}).catch((error) => {
|
|
124
|
-
controller.error(error);
|
|
125
|
-
});
|
|
126
|
-
controller.enqueue(decompressed);
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
// src/interceptors/fetch/utils/decompression.ts
|
|
133
|
-
var PipelineStream = class extends TransformStream {
|
|
134
|
-
constructor(transformStreams, ...strategies) {
|
|
135
|
-
super({}, ...strategies);
|
|
136
|
-
const readable = [super.readable, ...transformStreams].reduce(
|
|
137
|
-
(readable2, transform) => readable2.pipeThrough(transform)
|
|
138
|
-
);
|
|
139
|
-
Object.defineProperty(this, "readable", {
|
|
140
|
-
get() {
|
|
141
|
-
return readable;
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
function parseContentEncoding(contentEncoding) {
|
|
147
|
-
return contentEncoding.toLowerCase().split(",").map((coding) => coding.trim());
|
|
148
|
-
}
|
|
149
|
-
function createDecompressionStream(contentEncoding) {
|
|
150
|
-
if (contentEncoding === "") {
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
const codings = parseContentEncoding(contentEncoding);
|
|
154
|
-
if (codings.length === 0) {
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
|
-
const transformers = codings.reduceRight(
|
|
158
|
-
(transformers2, coding) => {
|
|
159
|
-
if (coding === "gzip" || coding === "x-gzip") {
|
|
160
|
-
return transformers2.concat(new DecompressionStream("gzip"));
|
|
161
|
-
} else if (coding === "deflate") {
|
|
162
|
-
return transformers2.concat(new DecompressionStream("deflate"));
|
|
163
|
-
} else if (coding === "br") {
|
|
164
|
-
return transformers2.concat(new BrotliDecompressionStream());
|
|
165
|
-
} else {
|
|
166
|
-
transformers2.length = 0;
|
|
167
|
-
}
|
|
168
|
-
return transformers2;
|
|
169
|
-
},
|
|
170
|
-
[]
|
|
171
|
-
);
|
|
172
|
-
return new PipelineStream(transformers);
|
|
173
|
-
}
|
|
174
|
-
function decompressResponse(response) {
|
|
175
|
-
if (response.body === null) {
|
|
176
|
-
return null;
|
|
177
|
-
}
|
|
178
|
-
const decompressionStream = createDecompressionStream(
|
|
179
|
-
response.headers.get("content-encoding") || ""
|
|
180
|
-
);
|
|
181
|
-
if (!decompressionStream) {
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
|
-
response.body.pipeTo(decompressionStream.writable);
|
|
185
|
-
return decompressionStream.readable;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// src/interceptors/fetch/index.ts
|
|
189
|
-
var _FetchInterceptor = class extends _chunkDOWWQYXZjs.Interceptor {
|
|
190
|
-
constructor() {
|
|
191
|
-
super(_FetchInterceptor.symbol);
|
|
192
|
-
}
|
|
193
|
-
checkEnvironment() {
|
|
194
|
-
return _chunkPFGO5BSMjs.hasConfigurableGlobal.call(void 0, "fetch");
|
|
195
|
-
}
|
|
196
|
-
async setup() {
|
|
197
|
-
const pureFetch = globalThis.fetch;
|
|
198
|
-
_outvariant.invariant.call(void 0,
|
|
199
|
-
!pureFetch[_chunk73NOP3T5js.IS_PATCHED_MODULE],
|
|
200
|
-
'Failed to patch the "fetch" module: already patched.'
|
|
201
|
-
);
|
|
202
|
-
globalThis.fetch = async (input, init) => {
|
|
203
|
-
const requestId = _chunkDOWWQYXZjs.createRequestId.call(void 0, );
|
|
204
|
-
const resolvedInput = typeof input === "string" && typeof location !== "undefined" && !_chunkDOWWQYXZjs.canParseUrl.call(void 0, input) ? new URL(input, location.href) : input;
|
|
205
|
-
const request = new Request(resolvedInput, init);
|
|
206
|
-
if (input instanceof Request) {
|
|
207
|
-
_chunkSRMAQGPMjs.setRawRequest.call(void 0, request, input);
|
|
208
|
-
}
|
|
209
|
-
const responsePromise = new (0, _deferredpromise.DeferredPromise)();
|
|
210
|
-
const controller = new (0, _chunkDOWWQYXZjs.RequestController)(request, {
|
|
211
|
-
passthrough: async () => {
|
|
212
|
-
this.logger.info("request has not been handled, passthrough...");
|
|
213
|
-
const requestCloneForResponseEvent = request.clone();
|
|
214
|
-
const { error: responseError, data: originalResponse } = await _until.until.call(void 0,
|
|
215
|
-
() => pureFetch(request)
|
|
216
|
-
);
|
|
217
|
-
if (responseError) {
|
|
218
|
-
return responsePromise.reject(responseError);
|
|
219
|
-
}
|
|
220
|
-
this.logger.info("original fetch performed", originalResponse);
|
|
221
|
-
if (this.emitter.listenerCount("response") > 0) {
|
|
222
|
-
this.logger.info('emitting the "response" event...');
|
|
223
|
-
const responseClone = originalResponse.clone();
|
|
224
|
-
await _chunk7Q53NNPVjs.emitAsync.call(void 0, this.emitter, "response", {
|
|
225
|
-
response: responseClone,
|
|
226
|
-
isMockedResponse: false,
|
|
227
|
-
request: requestCloneForResponseEvent,
|
|
228
|
-
requestId
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
responsePromise.resolve(originalResponse);
|
|
232
|
-
},
|
|
233
|
-
respondWith: async (rawResponse) => {
|
|
234
|
-
if (_chunk7Q53NNPVjs.isResponseError.call(void 0, rawResponse)) {
|
|
235
|
-
this.logger.info("request has errored!", { response: rawResponse });
|
|
236
|
-
responsePromise.reject(createNetworkError(rawResponse));
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
this.logger.info("received mocked response!", {
|
|
240
|
-
rawResponse
|
|
241
|
-
});
|
|
242
|
-
const decompressedStream = decompressResponse(rawResponse);
|
|
243
|
-
const response = decompressedStream === null ? rawResponse : new (0, _chunkDOWWQYXZjs.FetchResponse)(decompressedStream, rawResponse);
|
|
244
|
-
_chunkDOWWQYXZjs.FetchResponse.setUrl(request.url, response);
|
|
245
|
-
if (_chunkDOWWQYXZjs.FetchResponse.isRedirectResponse(response.status)) {
|
|
246
|
-
if (request.redirect === "error") {
|
|
247
|
-
responsePromise.reject(createNetworkError("unexpected redirect"));
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
if (request.redirect === "follow") {
|
|
251
|
-
followFetchRedirect(request, response).then(
|
|
252
|
-
(response2) => {
|
|
253
|
-
responsePromise.resolve(response2);
|
|
254
|
-
},
|
|
255
|
-
(reason) => {
|
|
256
|
-
responsePromise.reject(reason);
|
|
257
|
-
}
|
|
258
|
-
);
|
|
259
|
-
return;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
if (this.emitter.listenerCount("response") > 0) {
|
|
263
|
-
this.logger.info('emitting the "response" event...');
|
|
264
|
-
await _chunk7Q53NNPVjs.emitAsync.call(void 0, this.emitter, "response", {
|
|
265
|
-
// Clone the mocked response for the "response" event listener.
|
|
266
|
-
// This way, the listener can read the response and not lock its body
|
|
267
|
-
// for the actual fetch consumer.
|
|
268
|
-
response: response.clone(),
|
|
269
|
-
isMockedResponse: true,
|
|
270
|
-
request,
|
|
271
|
-
requestId
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
responsePromise.resolve(response);
|
|
275
|
-
},
|
|
276
|
-
errorWith: (reason) => {
|
|
277
|
-
this.logger.info("request has been aborted!", { reason });
|
|
278
|
-
responsePromise.reject(reason);
|
|
279
|
-
}
|
|
280
|
-
});
|
|
281
|
-
this.logger.info("[%s] %s", request.method, request.url);
|
|
282
|
-
this.logger.info("awaiting for the mocked response...");
|
|
283
|
-
this.logger.info(
|
|
284
|
-
'emitting the "request" event for %s listener(s)...',
|
|
285
|
-
this.emitter.listenerCount("request")
|
|
286
|
-
);
|
|
287
|
-
await _chunk7Q53NNPVjs.handleRequest.call(void 0, {
|
|
288
|
-
request,
|
|
289
|
-
requestId,
|
|
290
|
-
emitter: this.emitter,
|
|
291
|
-
controller
|
|
292
|
-
});
|
|
293
|
-
return responsePromise;
|
|
294
|
-
};
|
|
295
|
-
Object.defineProperty(globalThis.fetch, _chunk73NOP3T5js.IS_PATCHED_MODULE, {
|
|
296
|
-
enumerable: true,
|
|
297
|
-
configurable: true,
|
|
298
|
-
value: true
|
|
299
|
-
});
|
|
300
|
-
this.subscriptions.push(() => {
|
|
301
|
-
Object.defineProperty(globalThis.fetch, _chunk73NOP3T5js.IS_PATCHED_MODULE, {
|
|
302
|
-
value: void 0
|
|
303
|
-
});
|
|
304
|
-
globalThis.fetch = pureFetch;
|
|
305
|
-
this.logger.info(
|
|
306
|
-
'restored native "globalThis.fetch"!',
|
|
307
|
-
globalThis.fetch.name
|
|
308
|
-
);
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
};
|
|
312
|
-
var FetchInterceptor = _FetchInterceptor;
|
|
313
|
-
FetchInterceptor.symbol = Symbol("fetch");
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
exports.FetchInterceptor = FetchInterceptor;
|
|
318
|
-
//# sourceMappingURL=chunk-FRZQJNBO.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/interceptors/fetch/index.ts","../../src/interceptors/fetch/utils/createNetworkError.ts","../../src/interceptors/fetch/utils/followRedirect.ts","../../src/interceptors/fetch/utils/brotli-decompress.ts","../../src/interceptors/fetch/utils/decompression.ts"],"names":["readable","transformers","response"],"mappings":"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","sourcesContent":["import { invariant } from 'outvariant'\nimport { until } from '@open-draft/until'\nimport { DeferredPromise } from '@open-draft/deferred-promise'\nimport { HttpRequestEventMap, IS_PATCHED_MODULE } from '../../glossary'\nimport { Interceptor } from '../../Interceptor'\nimport { RequestController } from '../../RequestController'\nimport { emitAsync } from '../../utils/emitAsync'\nimport { handleRequest } from '../../utils/handleRequest'\nimport { canParseUrl } from '../../utils/canParseUrl'\nimport { createRequestId } from '../../createRequestId'\nimport { createNetworkError } from './utils/createNetworkError'\nimport { followFetchRedirect } from './utils/followRedirect'\nimport { decompressResponse } from './utils/decompression'\nimport { hasConfigurableGlobal } from '../../utils/hasConfigurableGlobal'\nimport { FetchResponse } from '../../utils/fetchUtils'\nimport { setRawRequest } from '../../getRawRequest'\nimport { isResponseError } from '../../utils/responseUtils'\n\nexport class FetchInterceptor extends Interceptor<HttpRequestEventMap> {\n static symbol = Symbol('fetch')\n\n constructor() {\n super(FetchInterceptor.symbol)\n }\n\n protected checkEnvironment() {\n return hasConfigurableGlobal('fetch')\n }\n\n protected async setup() {\n const pureFetch = globalThis.fetch\n\n invariant(\n !(pureFetch as any)[IS_PATCHED_MODULE],\n 'Failed to patch the \"fetch\" module: already patched.'\n )\n\n globalThis.fetch = async (input, init) => {\n const requestId = createRequestId()\n\n /**\n * @note Resolve potentially relative request URL\n * against the present `location`. This is mainly\n * for native `fetch` in JSDOM.\n * @see https://github.com/mswjs/msw/issues/1625\n */\n const resolvedInput =\n typeof input === 'string' &&\n typeof location !== 'undefined' &&\n !canParseUrl(input)\n ? new URL(input, location.href)\n : input\n\n const request = new Request(resolvedInput, init)\n\n /**\n * @note Set the raw request only if a Request instance was provided to fetch.\n */\n if (input instanceof Request) {\n setRawRequest(request, input)\n }\n\n const responsePromise = new DeferredPromise<Response>()\n\n const controller = new RequestController(request, {\n passthrough: async () => {\n this.logger.info('request has not been handled, passthrough...')\n\n /**\n * @note Clone the request instance right before performing it.\n * This preserves any modifications made to the intercepted request\n * in the \"request\" listener. This also allows the user to read the\n * request body in the \"response\" listener (otherwise \"unusable\").\n */\n const requestCloneForResponseEvent = request.clone()\n\n // Perform the intercepted request as-is.\n const { error: responseError, data: originalResponse } = await until(\n () => pureFetch(request)\n )\n\n if (responseError) {\n return responsePromise.reject(responseError)\n }\n\n this.logger.info('original fetch performed', originalResponse)\n\n if (this.emitter.listenerCount('response') > 0) {\n this.logger.info('emitting the \"response\" event...')\n\n const responseClone = originalResponse.clone()\n await emitAsync(this.emitter, 'response', {\n response: responseClone,\n isMockedResponse: false,\n request: requestCloneForResponseEvent,\n requestId,\n })\n }\n\n // Resolve the response promise with the original response\n // since the `fetch()` return this internal promise.\n responsePromise.resolve(originalResponse)\n },\n respondWith: async (rawResponse) => {\n // Handle mocked `Response.error()` (i.e. request errors).\n if (isResponseError(rawResponse)) {\n this.logger.info('request has errored!', { response: rawResponse })\n responsePromise.reject(createNetworkError(rawResponse))\n return\n }\n\n this.logger.info('received mocked response!', {\n rawResponse,\n })\n\n // Decompress the mocked response body, if applicable.\n const decompressedStream = decompressResponse(rawResponse)\n const response =\n decompressedStream === null\n ? rawResponse\n : new FetchResponse(decompressedStream, rawResponse)\n\n FetchResponse.setUrl(request.url, response)\n\n /**\n * Undici's handling of following redirect responses.\n * Treat the \"manual\" redirect mode as a regular mocked response.\n * This way, the client can manually follow the redirect it receives.\n * @see https://github.com/nodejs/undici/blob/a6dac3149c505b58d2e6d068b97f4dc993da55f0/lib/web/fetch/index.js#L1173\n */\n if (FetchResponse.isRedirectResponse(response.status)) {\n // Reject the request promise if its `redirect` is set to `error`\n // and it receives a mocked redirect response.\n if (request.redirect === 'error') {\n responsePromise.reject(createNetworkError('unexpected redirect'))\n return\n }\n\n if (request.redirect === 'follow') {\n followFetchRedirect(request, response).then(\n (response) => {\n responsePromise.resolve(response)\n },\n (reason) => {\n responsePromise.reject(reason)\n }\n )\n return\n }\n }\n\n if (this.emitter.listenerCount('response') > 0) {\n this.logger.info('emitting the \"response\" event...')\n\n // Await the response listeners to finish before resolving\n // the response promise. This ensures all your logic finishes\n // before the interceptor resolves the pending response.\n await emitAsync(this.emitter, 'response', {\n // Clone the mocked response for the \"response\" event listener.\n // This way, the listener can read the response and not lock its body\n // for the actual fetch consumer.\n response: response.clone(),\n isMockedResponse: true,\n request,\n requestId,\n })\n }\n\n responsePromise.resolve(response)\n },\n errorWith: (reason) => {\n this.logger.info('request has been aborted!', { reason })\n responsePromise.reject(reason)\n },\n })\n\n this.logger.info('[%s] %s', request.method, request.url)\n this.logger.info('awaiting for the mocked response...')\n\n this.logger.info(\n 'emitting the \"request\" event for %s listener(s)...',\n this.emitter.listenerCount('request')\n )\n\n await handleRequest({\n request,\n requestId,\n emitter: this.emitter,\n controller,\n })\n\n return responsePromise\n }\n\n Object.defineProperty(globalThis.fetch, IS_PATCHED_MODULE, {\n enumerable: true,\n configurable: true,\n value: true,\n })\n\n this.subscriptions.push(() => {\n Object.defineProperty(globalThis.fetch, IS_PATCHED_MODULE, {\n value: undefined,\n })\n\n globalThis.fetch = pureFetch\n\n this.logger.info(\n 'restored native \"globalThis.fetch\"!',\n globalThis.fetch.name\n )\n })\n }\n}\n","export function createNetworkError(cause?: unknown) {\n return Object.assign(new TypeError('Failed to fetch'), {\n cause,\n })\n}\n","import { createNetworkError } from './createNetworkError'\n\nconst REQUEST_BODY_HEADERS = [\n 'content-encoding',\n 'content-language',\n 'content-location',\n 'content-type',\n 'content-length',\n]\n\nconst kRedirectCount = Symbol('kRedirectCount')\n\n/**\n * @see https://github.com/nodejs/undici/blob/a6dac3149c505b58d2e6d068b97f4dc993da55f0/lib/web/fetch/index.js#L1210\n */\nexport async function followFetchRedirect(\n request: Request,\n response: Response\n): Promise<Response> {\n if (response.status !== 303 && request.body != null) {\n return Promise.reject(createNetworkError())\n }\n\n const requestUrl = new URL(request.url)\n\n let locationUrl: URL\n try {\n // If the location is a relative URL, use the request URL as the base URL.\n locationUrl = new URL(response.headers.get('location')!, request.url) \n } catch (error) {\n return Promise.reject(createNetworkError(error))\n }\n\n if (\n !(locationUrl.protocol === 'http:' || locationUrl.protocol === 'https:')\n ) {\n return Promise.reject(\n createNetworkError('URL scheme must be a HTTP(S) scheme')\n )\n }\n\n if (Reflect.get(request, kRedirectCount) > 20) {\n return Promise.reject(createNetworkError('redirect count exceeded'))\n }\n\n Object.defineProperty(request, kRedirectCount, {\n value: (Reflect.get(request, kRedirectCount) || 0) + 1,\n })\n\n if (\n request.mode === 'cors' &&\n (locationUrl.username || locationUrl.password) &&\n !sameOrigin(requestUrl, locationUrl)\n ) {\n return Promise.reject(\n createNetworkError('cross origin not allowed for request mode \"cors\"')\n )\n }\n\n const requestInit: RequestInit = {}\n\n if (\n ([301, 302].includes(response.status) && request.method === 'POST') ||\n (response.status === 303 && !['HEAD', 'GET'].includes(request.method))\n ) {\n requestInit.method = 'GET'\n requestInit.body = null\n\n REQUEST_BODY_HEADERS.forEach((headerName) => {\n request.headers.delete(headerName)\n })\n }\n\n if (!sameOrigin(requestUrl, locationUrl)) {\n request.headers.delete('authorization')\n request.headers.delete('proxy-authorization')\n request.headers.delete('cookie')\n request.headers.delete('host')\n }\n\n /**\n * @note Undici \"safely\" extracts the request body.\n * I suspect we cannot dispatch this request again\n * since its body has been read and the stream is locked.\n */\n\n requestInit.headers = request.headers\n const finalResponse = await fetch(new Request(locationUrl, requestInit))\n Object.defineProperty(finalResponse, 'redirected', {\n value: true,\n configurable: true,\n })\n\n return finalResponse\n}\n\n/**\n * @see https://github.com/nodejs/undici/blob/a6dac3149c505b58d2e6d068b97f4dc993da55f0/lib/web/fetch/util.js#L761\n */\nfunction sameOrigin(left: URL, right: URL): boolean {\n if (left.origin === right.origin && left.origin === 'null') {\n return true\n }\n\n if (\n left.protocol === right.protocol &&\n left.hostname === right.hostname &&\n left.port === right.port\n ) {\n return true\n }\n\n return false\n}\n","import zlib from 'node:zlib'\n\nexport class BrotliDecompressionStream extends TransformStream {\n constructor() {\n const decompress = zlib.createBrotliDecompress({\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH,\n })\n\n super({\n async transform(chunk, controller) {\n const buffer = Buffer.from(chunk)\n\n const decompressed = await new Promise<Buffer>((resolve, reject) => {\n decompress.write(buffer, (error) => {\n if (error) reject(error)\n })\n\n decompress.flush()\n decompress.once('data', (data) => resolve(data))\n decompress.once('error', (error) => reject(error))\n decompress.once('end', () => controller.terminate())\n }).catch((error) => {\n controller.error(error)\n })\n\n controller.enqueue(decompressed)\n },\n })\n }\n}\n","// Import from an internal alias that resolves to different modules\n// depending on the environment. This way, we can keep the fetch interceptor\n// intact while using different strategies for Brotli decompression.\nimport { BrotliDecompressionStream } from 'internal:brotli-decompress'\n\nclass PipelineStream extends TransformStream {\n constructor(\n transformStreams: Array<TransformStream>,\n ...strategies: Array<QueuingStrategy>\n ) {\n super({}, ...strategies)\n\n const readable = [super.readable as any, ...transformStreams].reduce(\n (readable, transform) => readable.pipeThrough(transform)\n )\n\n Object.defineProperty(this, 'readable', {\n get() {\n return readable\n },\n })\n }\n}\n\nexport function parseContentEncoding(contentEncoding: string): Array<string> {\n return contentEncoding\n .toLowerCase()\n .split(',')\n .map((coding) => coding.trim())\n}\n\nfunction createDecompressionStream(\n contentEncoding: string\n): TransformStream | null {\n if (contentEncoding === '') {\n return null\n }\n\n const codings = parseContentEncoding(contentEncoding)\n\n if (codings.length === 0) {\n return null\n }\n\n const transformers = codings.reduceRight<Array<TransformStream>>(\n (transformers, coding) => {\n if (coding === 'gzip' || coding === 'x-gzip') {\n return transformers.concat(new DecompressionStream('gzip'))\n } else if (coding === 'deflate') {\n return transformers.concat(new DecompressionStream('deflate'))\n } else if (coding === 'br') {\n return transformers.concat(new BrotliDecompressionStream())\n } else {\n transformers.length = 0\n }\n\n return transformers\n },\n []\n )\n\n return new PipelineStream(transformers)\n}\n\nexport function decompressResponse(\n response: Response\n): ReadableStream<any> | null {\n if (response.body === null) {\n return null\n }\n\n const decompressionStream = createDecompressionStream(\n response.headers.get('content-encoding') || ''\n )\n\n if (!decompressionStream) {\n return null\n }\n\n // Use `pipeTo` and return the decompression stream's readable\n // instead of `pipeThrough` because that will lock the original\n // response stream, making it unusable as the input to Response.\n response.body.pipeTo(decompressionStream.writable)\n return decompressionStream.readable\n}\n"]}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getRawRequest
|
|
3
|
-
} from "./chunk-YWNGXXUQ.mjs";
|
|
4
|
-
|
|
5
|
-
// src/utils/node/index.ts
|
|
6
|
-
import { ClientRequest } from "http";
|
|
7
|
-
import { Readable } from "stream";
|
|
8
|
-
import { invariant } from "outvariant";
|
|
9
|
-
var kRawRequestBodyStream = Symbol("kRawRequestBodyStream");
|
|
10
|
-
function getClientRequestBodyStream(request) {
|
|
11
|
-
const rawRequest = getRawRequest(request);
|
|
12
|
-
invariant(
|
|
13
|
-
rawRequest instanceof ClientRequest,
|
|
14
|
-
`Failed to retrieve raw request body stream: request is not an instance of "http.ClientRequest". Note that you can only use the "getClientRequestBodyStream" function with the requests issued by "http.clientRequest".`
|
|
15
|
-
);
|
|
16
|
-
const requestBodyStream = Reflect.get(request, kRawRequestBodyStream);
|
|
17
|
-
invariant(
|
|
18
|
-
requestBodyStream instanceof Readable,
|
|
19
|
-
"Failed to retrieve raw request body stream: corrupted stream (%s)",
|
|
20
|
-
typeof requestBodyStream
|
|
21
|
-
);
|
|
22
|
-
return requestBodyStream;
|
|
23
|
-
}
|
|
24
|
-
function setRawRequestBodyStream(request, stream) {
|
|
25
|
-
Reflect.set(request, kRawRequestBodyStream, stream);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export {
|
|
29
|
-
getClientRequestBodyStream,
|
|
30
|
-
setRawRequestBodyStream
|
|
31
|
-
};
|
|
32
|
-
//# sourceMappingURL=chunk-GKN5RBVR.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/node/index.ts"],"sourcesContent":["import { ClientRequest } from 'node:http'\nimport { Readable } from 'node:stream'\nimport { invariant } from 'outvariant'\nimport { getRawRequest } from '../../getRawRequest'\n\nconst kRawRequestBodyStream = Symbol('kRawRequestBodyStream')\n\n/**\n * Returns the request body stream of the given request.\n * @note This is only relevant in the context of `http.ClientRequest`.\n * This function will throw if the given `request` wasn't created based on\n * the `http.ClientRequest` instance.\n * You must rely on the web stream consumers for other request clients.\n */\nexport function getClientRequestBodyStream(request: Request): Readable {\n const rawRequest = getRawRequest(request)\n\n invariant(\n rawRequest instanceof ClientRequest,\n `Failed to retrieve raw request body stream: request is not an instance of \"http.ClientRequest\". Note that you can only use the \"getClientRequestBodyStream\" function with the requests issued by \"http.clientRequest\".`\n )\n\n const requestBodyStream = Reflect.get(request, kRawRequestBodyStream)\n\n invariant(\n requestBodyStream instanceof Readable,\n 'Failed to retrieve raw request body stream: corrupted stream (%s)',\n typeof requestBodyStream\n )\n\n return requestBodyStream\n}\n\nexport function setRawRequestBodyStream(\n request: Request,\n stream: Readable\n): void {\n Reflect.set(request, kRawRequestBodyStream, stream)\n}\n"],"mappings":";;;;;AAAA,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAG1B,IAAM,wBAAwB,OAAO,uBAAuB;AASrD,SAAS,2BAA2B,SAA4B;AACrE,QAAM,aAAa,cAAc,OAAO;AAExC;AAAA,IACE,sBAAsB;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,oBAAoB,QAAQ,IAAI,SAAS,qBAAqB;AAEpE;AAAA,IACE,6BAA6B;AAAA,IAC7B;AAAA,IACA,OAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,wBACd,SACA,QACM;AACN,UAAQ,IAAI,SAAS,uBAAuB,MAAM;AACpD;","names":[]}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
-
|
|
3
|
-
var _chunkDOWWQYXZjs = require('./chunk-DOWWQYXZ.js');
|
|
4
|
-
|
|
5
|
-
// src/BatchInterceptor.ts
|
|
6
|
-
var BatchInterceptor = class extends _chunkDOWWQYXZjs.Interceptor {
|
|
7
|
-
constructor(options) {
|
|
8
|
-
BatchInterceptor.symbol = Symbol(options.name);
|
|
9
|
-
super(BatchInterceptor.symbol);
|
|
10
|
-
this.interceptors = options.interceptors;
|
|
11
|
-
}
|
|
12
|
-
setup() {
|
|
13
|
-
const logger = this.logger.extend("setup");
|
|
14
|
-
logger.info("applying all %d interceptors...", this.interceptors.length);
|
|
15
|
-
for (const interceptor of this.interceptors) {
|
|
16
|
-
logger.info('applying "%s" interceptor...', interceptor.constructor.name);
|
|
17
|
-
interceptor.apply();
|
|
18
|
-
logger.info("adding interceptor dispose subscription");
|
|
19
|
-
this.subscriptions.push(() => interceptor.dispose());
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
on(event, listener) {
|
|
23
|
-
for (const interceptor of this.interceptors) {
|
|
24
|
-
interceptor.on(event, listener);
|
|
25
|
-
}
|
|
26
|
-
return this;
|
|
27
|
-
}
|
|
28
|
-
once(event, listener) {
|
|
29
|
-
for (const interceptor of this.interceptors) {
|
|
30
|
-
interceptor.once(event, listener);
|
|
31
|
-
}
|
|
32
|
-
return this;
|
|
33
|
-
}
|
|
34
|
-
off(event, listener) {
|
|
35
|
-
for (const interceptor of this.interceptors) {
|
|
36
|
-
interceptor.off(event, listener);
|
|
37
|
-
}
|
|
38
|
-
return this;
|
|
39
|
-
}
|
|
40
|
-
removeAllListeners(event) {
|
|
41
|
-
for (const interceptors of this.interceptors) {
|
|
42
|
-
interceptors.removeAllListeners(event);
|
|
43
|
-
}
|
|
44
|
-
return this;
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
exports.BatchInterceptor = BatchInterceptor;
|
|
51
|
-
//# sourceMappingURL=chunk-J5MULIHT.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/BatchInterceptor.ts"],"names":[],"mappings":";;;;;AAsBO,IAAM,mBAAN,cAGG,YAAoB;AAAA,EAK5B,YAAY,SAAmD;AAC7D,qBAAiB,SAAS,OAAO,QAAQ,IAAI;AAC7C,UAAM,iBAAiB,MAAM;AAC7B,SAAK,eAAe,QAAQ;AAAA,EAC9B;AAAA,EAEU,QAAQ;AAChB,UAAM,SAAS,KAAK,OAAO,OAAO,OAAO;AAEzC,WAAO,KAAK,mCAAmC,KAAK,aAAa,MAAM;AAEvE,eAAW,eAAe,KAAK,cAAc;AAC3C,aAAO,KAAK,gCAAgC,YAAY,YAAY,IAAI;AACxE,kBAAY,MAAM;AAElB,aAAO,KAAK,yCAAyC;AACrD,WAAK,cAAc,KAAK,MAAM,YAAY,QAAQ,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EAEO,GACL,OACA,UACM;AAGN,eAAW,eAAe,KAAK,cAAc;AAC3C,kBAAY,GAAG,OAAO,QAAQ;AAAA,IAChC;AAEA,WAAO;AAAA,EACT;AAAA,EAEO,KACL,OACA,UACM;AACN,eAAW,eAAe,KAAK,cAAc;AAC3C,kBAAY,KAAK,OAAO,QAAQ;AAAA,IAClC;AAEA,WAAO;AAAA,EACT;AAAA,EAEO,IACL,OACA,UACM;AACN,eAAW,eAAe,KAAK,cAAc;AAC3C,kBAAY,IAAI,OAAO,QAAQ;AAAA,IACjC;AAEA,WAAO;AAAA,EACT;AAAA,EAEO,mBACL,OACM;AACN,eAAW,gBAAgB,KAAK,cAAc;AAC5C,mBAAa,mBAAmB,KAAK;AAAA,IACvC;AAEA,WAAO;AAAA,EACT;AACF","sourcesContent":["import { EventMap, Listener } from 'strict-event-emitter'\nimport { Interceptor, ExtractEventNames } from './Interceptor'\n\nexport interface BatchInterceptorOptions<\n InterceptorList extends ReadonlyArray<Interceptor<any>>\n> {\n name: string\n interceptors: InterceptorList\n}\n\nexport type ExtractEventMapType<\n InterceptorList extends ReadonlyArray<Interceptor<any>>\n> = InterceptorList extends ReadonlyArray<infer InterceptorType>\n ? InterceptorType extends Interceptor<infer EventMap>\n ? EventMap\n : never\n : never\n\n/**\n * A batch interceptor that exposes a single interface\n * to apply and operate with multiple interceptors at once.\n */\nexport class BatchInterceptor<\n InterceptorList extends ReadonlyArray<Interceptor<any>>,\n Events extends EventMap = ExtractEventMapType<InterceptorList>\n> extends Interceptor<Events> {\n static symbol: symbol\n\n private interceptors: InterceptorList\n\n constructor(options: BatchInterceptorOptions<InterceptorList>) {\n BatchInterceptor.symbol = Symbol(options.name)\n super(BatchInterceptor.symbol)\n this.interceptors = options.interceptors\n }\n\n protected setup() {\n const logger = this.logger.extend('setup')\n\n logger.info('applying all %d interceptors...', this.interceptors.length)\n\n for (const interceptor of this.interceptors) {\n logger.info('applying \"%s\" interceptor...', interceptor.constructor.name)\n interceptor.apply()\n\n logger.info('adding interceptor dispose subscription')\n this.subscriptions.push(() => interceptor.dispose())\n }\n }\n\n public on<EventName extends ExtractEventNames<Events>>(\n event: EventName,\n listener: Listener<Events[EventName]>\n ): this {\n // Instead of adding a listener to the batch interceptor,\n // propagate the listener to each of the individual interceptors.\n for (const interceptor of this.interceptors) {\n interceptor.on(event, listener)\n }\n\n return this\n }\n\n public once<EventName extends ExtractEventNames<Events>>(\n event: EventName,\n listener: Listener<Events[EventName]>\n ): this {\n for (const interceptor of this.interceptors) {\n interceptor.once(event, listener)\n }\n\n return this\n }\n\n public off<EventName extends ExtractEventNames<Events>>(\n event: EventName,\n listener: Listener<Events[EventName]>\n ): this {\n for (const interceptor of this.interceptors) {\n interceptor.off(event, listener)\n }\n\n return this\n }\n\n public removeAllListeners<EventName extends ExtractEventNames<Events>>(\n event?: EventName | undefined\n ): this {\n for (const interceptors of this.interceptors) {\n interceptors.removeAllListeners(event)\n }\n\n return this\n }\n}\n"]}
|