@mswjs/interceptors 0.39.8 → 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 -75
- 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 -186
- 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 -39
- 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 +34 -59
- package/presets/browser/package.json +2 -3
- package/presets/node/package.json +7 -2
- package/src/RemoteHttpInterceptor.ts +18 -13
- package/src/RequestController.test.ts +78 -31
- package/src/RequestController.ts +63 -39
- package/src/index.ts +4 -0
- package/src/interceptors/ClientRequest/MockHttpSocket.ts +43 -9
- package/src/interceptors/ClientRequest/index.ts +14 -18
- package/src/interceptors/ClientRequest/utils/parserUtils.ts +48 -0
- package/src/interceptors/WebSocket/index.ts +4 -1
- package/src/interceptors/XMLHttpRequest/XMLHttpRequestController.ts +45 -35
- package/src/interceptors/XMLHttpRequest/XMLHttpRequestProxy.ts +24 -21
- package/src/interceptors/XMLHttpRequest/utils/getBodyByteLength.test.ts +2 -2
- package/src/interceptors/fetch/index.ts +61 -50
- package/src/utils/handleRequest.ts +65 -95
- 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-2QICSCCS.js +0 -238
- package/lib/browser/chunk-2QICSCCS.js.map +0 -1
- package/lib/browser/chunk-3RXCRGL2.mjs +0 -117
- package/lib/browser/chunk-3RXCRGL2.mjs.map +0 -1
- package/lib/browser/chunk-6HYIRFX2.mjs +0 -22
- package/lib/browser/chunk-6HYIRFX2.mjs.map +0 -1
- package/lib/browser/chunk-E3CCOBRX.js +0 -846
- package/lib/browser/chunk-E3CCOBRX.js.map +0 -1
- package/lib/browser/chunk-E7UVBHVO.mjs +0 -846
- package/lib/browser/chunk-E7UVBHVO.mjs.map +0 -1
- package/lib/browser/chunk-H74PGQ4Y.js +0 -296
- package/lib/browser/chunk-H74PGQ4Y.js.map +0 -1
- package/lib/browser/chunk-LK6DILFK.js +0 -22
- package/lib/browser/chunk-LK6DILFK.js.map +0 -1
- package/lib/browser/chunk-PTTUYYVR.mjs +0 -238
- package/lib/browser/chunk-PTTUYYVR.mjs.map +0 -1
- package/lib/browser/chunk-Q7K2XAEP.mjs +0 -296
- package/lib/browser/chunk-Q7K2XAEP.mjs.map +0 -1
- package/lib/browser/chunk-QED3Q6Z2.mjs +0 -169
- package/lib/browser/chunk-QED3Q6Z2.mjs.map +0 -1
- package/lib/browser/chunk-T7TBRNJZ.js +0 -117
- package/lib/browser/chunk-T7TBRNJZ.js.map +0 -1
- package/lib/browser/chunk-TIPR373R.js +0 -169
- package/lib/browser/chunk-TIPR373R.js.map +0 -1
- package/lib/browser/chunk-VYSDLBSS.mjs +0 -37
- package/lib/browser/chunk-VYSDLBSS.mjs.map +0 -1
- package/lib/browser/glossary-7152281e.d.ts +0 -69
- package/lib/browser/index.d.ts +0 -83
- package/lib/browser/index.js +0 -81
- 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 -15
- 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 -14
- 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 -15
- package/lib/browser/presets/browser.js +0 -21
- package/lib/browser/presets/browser.js.map +0 -1
- package/lib/node/BatchInterceptor-5b72232f.d.ts +0 -24
- package/lib/node/Interceptor-bc5a9d8e.d.ts +0 -130
- package/lib/node/RemoteHttpInterceptor.d.ts +0 -45
- package/lib/node/RemoteHttpInterceptor.js +0 -193
- package/lib/node/RemoteHttpInterceptor.js.map +0 -1
- package/lib/node/chunk-3CNGDJFB.mjs +0 -313
- package/lib/node/chunk-3CNGDJFB.mjs.map +0 -1
- package/lib/node/chunk-3GJB4JDF.mjs +0 -14
- package/lib/node/chunk-3GJB4JDF.mjs.map +0 -1
- package/lib/node/chunk-4NEYTVWD.mjs +0 -848
- package/lib/node/chunk-4NEYTVWD.mjs.map +0 -1
- package/lib/node/chunk-4YBV77DG.js +0 -32
- package/lib/node/chunk-4YBV77DG.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-72ZIHMEB.js +0 -249
- package/lib/node/chunk-72ZIHMEB.js.map +0 -1
- package/lib/node/chunk-73NOP3T5.js +0 -7
- package/lib/node/chunk-73NOP3T5.js.map +0 -1
- package/lib/node/chunk-A7Q4RTDJ.mjs +0 -249
- package/lib/node/chunk-A7Q4RTDJ.mjs.map +0 -1
- package/lib/node/chunk-A7U44ARP.js +0 -268
- package/lib/node/chunk-A7U44ARP.js.map +0 -1
- package/lib/node/chunk-EKNRB5ZS.mjs +0 -1115
- package/lib/node/chunk-EKNRB5ZS.mjs.map +0 -1
- package/lib/node/chunk-IHJSPMYM.mjs +0 -268
- package/lib/node/chunk-IHJSPMYM.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-N4ZZFE24.js +0 -1115
- package/lib/node/chunk-N4ZZFE24.js.map +0 -1
- package/lib/node/chunk-PFGO5BSM.js +0 -25
- package/lib/node/chunk-PFGO5BSM.js.map +0 -1
- package/lib/node/chunk-R6JVCM7X.js +0 -51
- package/lib/node/chunk-R6JVCM7X.js.map +0 -1
- package/lib/node/chunk-RC2XPCC4.mjs +0 -51
- package/lib/node/chunk-RC2XPCC4.mjs.map +0 -1
- package/lib/node/chunk-SMXZPJEA.js +0 -14
- package/lib/node/chunk-SMXZPJEA.js.map +0 -1
- package/lib/node/chunk-TJDMZZXE.mjs +0 -32
- package/lib/node/chunk-TJDMZZXE.mjs.map +0 -1
- package/lib/node/chunk-TX5GBTFY.mjs +0 -25
- package/lib/node/chunk-TX5GBTFY.mjs.map +0 -1
- package/lib/node/chunk-VV2LUF5K.js +0 -848
- package/lib/node/chunk-VV2LUF5K.js.map +0 -1
- package/lib/node/chunk-Z5LWCBZS.js +0 -313
- package/lib/node/chunk-Z5LWCBZS.js.map +0 -1
- package/lib/node/index.d.ts +0 -62
- package/lib/node/index.js +0 -43
- package/lib/node/index.js.map +0 -1
- package/lib/node/interceptors/ClientRequest/index.d.ts +0 -111
- 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 -14
- 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 -13
- 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 -16
- 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
- package/src/utils/RequestController.ts +0 -21
|
@@ -1,27 +1,22 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
} from "../
|
|
4
|
-
import "../
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
} from "../
|
|
8
|
-
import "../chunk-6HYIRFX2.mjs";
|
|
9
|
-
import {
|
|
10
|
-
FetchInterceptor
|
|
11
|
-
} from "../chunk-3CNGDJFB.mjs";
|
|
12
|
-
import "../chunk-TX5GBTFY.mjs";
|
|
13
|
-
import "../chunk-6YM4PLBI.mjs";
|
|
14
|
-
import "../chunk-A7Q4RTDJ.mjs";
|
|
15
|
-
import "../chunk-IHJSPMYM.mjs";
|
|
16
|
-
import "../chunk-3GJB4JDF.mjs";
|
|
1
|
+
import "../fetchUtils-CoU35g3M.mjs";
|
|
2
|
+
import "../bufferUtils-_8XfKIfX.mjs";
|
|
3
|
+
import { t as ClientRequestInterceptor } from "../ClientRequest-Ca8Qykuv.mjs";
|
|
4
|
+
import "../handleRequest-Y97UwBbF.mjs";
|
|
5
|
+
import "../node-DwCc6iuP.mjs";
|
|
6
|
+
import { t as XMLHttpRequestInterceptor } from "../XMLHttpRequest-C8dIZpds.mjs";
|
|
7
|
+
import { t as FetchInterceptor } from "../fetch-G1DVwDKG.mjs";
|
|
17
8
|
|
|
18
|
-
|
|
9
|
+
//#region src/presets/node.ts
|
|
10
|
+
/**
|
|
11
|
+
* The default preset provisions the interception of requests
|
|
12
|
+
* regardless of their type (http/https/XMLHttpRequest).
|
|
13
|
+
*/
|
|
19
14
|
var node_default = [
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
new ClientRequestInterceptor(),
|
|
16
|
+
new XMLHttpRequestInterceptor(),
|
|
17
|
+
new FetchInterceptor()
|
|
23
18
|
];
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { node_default as default };
|
|
27
22
|
//# sourceMappingURL=node.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presets/node.ts"],"sourcesContent":["import { ClientRequestInterceptor } from '../interceptors/ClientRequest'\nimport { XMLHttpRequestInterceptor } from '../interceptors/XMLHttpRequest'\nimport { FetchInterceptor } from '../interceptors/fetch'\n\n/**\n * The default preset provisions the interception of requests\n * regardless of their type (http/https/XMLHttpRequest).\n */\nexport default [\n new ClientRequestInterceptor(),\n new XMLHttpRequestInterceptor(),\n new FetchInterceptor(),\n] as const\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"node.mjs","names":[],"sources":["../../../src/presets/node.ts"],"sourcesContent":["import { ClientRequestInterceptor } from '../interceptors/ClientRequest'\nimport { XMLHttpRequestInterceptor } from '../interceptors/XMLHttpRequest'\nimport { FetchInterceptor } from '../interceptors/fetch'\n\n/**\n * The default preset provisions the interception of requests\n * regardless of their type (http/https/XMLHttpRequest).\n */\nexport default [\n new ClientRequestInterceptor(),\n new XMLHttpRequestInterceptor(),\n new FetchInterceptor(),\n] as const\n"],"mappings":";;;;;;;;;;;;;AAQA,mBAAe;CACb,IAAI,0BAA0B;CAC9B,IAAI,2BAA2B;CAC/B,IAAI,kBAAkB;CACvB"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { Readable } from
|
|
1
|
+
import { Readable } from "node:stream";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/node/index.d.ts
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* Returns the request body stream of the given request.
|
|
@@ -9,5 +11,6 @@ import { Readable } from 'node:stream';
|
|
|
9
11
|
*/
|
|
10
12
|
declare function getClientRequestBodyStream(request: Request): Readable;
|
|
11
13
|
declare function setRawRequestBodyStream(request: Request, stream: Readable): void;
|
|
12
|
-
|
|
14
|
+
//#endregion
|
|
13
15
|
export { getClientRequestBodyStream, setRawRequestBodyStream };
|
|
16
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Readable } from "node:stream";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/node/index.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Returns the request body stream of the given request.
|
|
7
|
+
* @note This is only relevant in the context of `http.ClientRequest`.
|
|
8
|
+
* This function will throw if the given `request` wasn't created based on
|
|
9
|
+
* the `http.ClientRequest` instance.
|
|
10
|
+
* You must rely on the web stream consumers for other request clients.
|
|
11
|
+
*/
|
|
12
|
+
declare function getClientRequestBodyStream(request: Request): Readable;
|
|
13
|
+
declare function setRawRequestBodyStream(request: Request, stream: Readable): void;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { getClientRequestBodyStream, setRawRequestBodyStream };
|
|
16
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
} from "../../chunk-TJDMZZXE.mjs";
|
|
5
|
-
import "../../chunk-3GJB4JDF.mjs";
|
|
6
|
-
export {
|
|
7
|
-
getClientRequestBodyStream,
|
|
8
|
-
setRawRequestBodyStream
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=index.mjs.map
|
|
1
|
+
import { n as setRawRequestBodyStream, t as getClientRequestBodyStream } from "../../node-DwCc6iuP.mjs";
|
|
2
|
+
|
|
3
|
+
export { getClientRequestBodyStream, setRawRequestBodyStream };
|
package/package.json
CHANGED
|
@@ -1,104 +1,80 @@
|
|
|
1
1
|
{
|
|
2
|
+
"type": "commonjs",
|
|
2
3
|
"name": "@mswjs/interceptors",
|
|
3
4
|
"description": "Low-level HTTP/HTTPS/XHR/fetch request interception library.",
|
|
4
|
-
"version": "0.
|
|
5
|
-
"main": "./lib/node/index.
|
|
5
|
+
"version": "0.41.0",
|
|
6
|
+
"main": "./lib/node/index.cjs",
|
|
6
7
|
"module": "./lib/node/index.mjs",
|
|
7
|
-
"types": "./lib/node/index.d.
|
|
8
|
+
"types": "./lib/node/index.d.cts",
|
|
8
9
|
"exports": {
|
|
9
10
|
".": {
|
|
10
|
-
"types": "./lib/node/index.d.ts",
|
|
11
11
|
"browser": {
|
|
12
|
-
"types": "./lib/browser/index.d.ts",
|
|
13
|
-
"require": "./lib/browser/index.js",
|
|
14
12
|
"import": "./lib/browser/index.mjs",
|
|
15
|
-
"default": "./lib/browser/index.
|
|
13
|
+
"default": "./lib/browser/index.cjs"
|
|
16
14
|
},
|
|
17
|
-
"require": "./lib/node/index.js",
|
|
18
15
|
"import": "./lib/node/index.mjs",
|
|
19
|
-
"default": "./lib/node/index.
|
|
16
|
+
"default": "./lib/node/index.cjs"
|
|
20
17
|
},
|
|
21
18
|
"./ClientRequest": {
|
|
22
|
-
"types": "./lib/node/interceptors/ClientRequest/index.d.ts",
|
|
23
19
|
"node": {
|
|
24
|
-
"require": "./lib/node/interceptors/ClientRequest/index.
|
|
20
|
+
"require": "./lib/node/interceptors/ClientRequest/index.cjs",
|
|
25
21
|
"import": "./lib/node/interceptors/ClientRequest/index.mjs"
|
|
26
22
|
},
|
|
27
23
|
"browser": null,
|
|
28
|
-
"require": "./lib/node/interceptors/ClientRequest/index.
|
|
24
|
+
"require": "./lib/node/interceptors/ClientRequest/index.cjs",
|
|
29
25
|
"import": "./lib/node/interceptors/ClientRequest/index.mjs",
|
|
30
|
-
"default": "./lib/node/interceptors/ClientRequest/index.
|
|
26
|
+
"default": "./lib/node/interceptors/ClientRequest/index.cjs"
|
|
31
27
|
},
|
|
32
28
|
"./XMLHttpRequest": {
|
|
33
|
-
"browser":
|
|
34
|
-
|
|
35
|
-
"require": "./lib/browser/interceptors/XMLHttpRequest/index.js",
|
|
36
|
-
"import": "./lib/browser/interceptors/XMLHttpRequest/index.mjs",
|
|
37
|
-
"default": "./lib/browser/interceptors/XMLHttpRequest/index.js"
|
|
38
|
-
},
|
|
39
|
-
"types": "./lib/node/interceptors/XMLHttpRequest/index.d.ts",
|
|
40
|
-
"require": "./lib/node/interceptors/XMLHttpRequest/index.js",
|
|
29
|
+
"browser": "./lib/browser/interceptors/XMLHttpRequest/index.mjs",
|
|
30
|
+
"require": "./lib/node/interceptors/XMLHttpRequest/index.cjs",
|
|
41
31
|
"import": "./lib/node/interceptors/XMLHttpRequest/index.mjs",
|
|
42
|
-
"default": "./lib/node/interceptors/XMLHttpRequest/index.
|
|
32
|
+
"default": "./lib/node/interceptors/XMLHttpRequest/index.cjs"
|
|
43
33
|
},
|
|
44
34
|
"./fetch": {
|
|
45
|
-
"browser":
|
|
46
|
-
|
|
47
|
-
"require": "./lib/browser/interceptors/fetch/index.js",
|
|
48
|
-
"import": "./lib/browser/interceptors/fetch/index.mjs",
|
|
49
|
-
"default": "./lib/browser/interceptors/fetch/index.js"
|
|
50
|
-
},
|
|
51
|
-
"types": "./lib/node/interceptors/fetch/index.d.ts",
|
|
52
|
-
"require": "./lib/node/interceptors/fetch/index.js",
|
|
35
|
+
"browser": "./lib/browser/interceptors/fetch/index.mjs",
|
|
36
|
+
"require": "./lib/node/interceptors/fetch/index.cjs",
|
|
53
37
|
"import": "./lib/node/interceptors/fetch/index.mjs",
|
|
54
|
-
"default": "./lib/node/interceptors/fetch/index.
|
|
38
|
+
"default": "./lib/node/interceptors/fetch/index.cjs"
|
|
55
39
|
},
|
|
56
40
|
"./WebSocket": {
|
|
57
|
-
"
|
|
58
|
-
"require": "./lib/browser/interceptors/WebSocket/index.js",
|
|
41
|
+
"require": "./lib/browser/interceptors/WebSocket/index.cjs",
|
|
59
42
|
"import": "./lib/browser/interceptors/WebSocket/index.mjs",
|
|
60
|
-
"default": "./lib/browser/interceptors/WebSocket/index.
|
|
43
|
+
"default": "./lib/browser/interceptors/WebSocket/index.cjs"
|
|
61
44
|
},
|
|
62
45
|
"./RemoteHttpInterceptor": {
|
|
63
|
-
"types": "./lib/node/RemoteHttpInterceptor.d.ts",
|
|
64
46
|
"node": {
|
|
65
|
-
"require": "./lib/node/RemoteHttpInterceptor.
|
|
47
|
+
"require": "./lib/node/RemoteHttpInterceptor.cjs",
|
|
66
48
|
"import": "./lib/node/RemoteHttpInterceptor.mjs"
|
|
67
49
|
},
|
|
68
50
|
"browser": null,
|
|
69
|
-
"require": "./lib/node/RemoteHttpInterceptor.
|
|
51
|
+
"require": "./lib/node/RemoteHttpInterceptor.cjs",
|
|
70
52
|
"import": "./lib/node/RemoteHttpInterceptor.mjs",
|
|
71
|
-
"default": "./lib/node/RemoteHttpInterceptor.
|
|
53
|
+
"default": "./lib/node/RemoteHttpInterceptor.cjs"
|
|
72
54
|
},
|
|
73
55
|
"./presets/node": {
|
|
74
|
-
"types": "./lib/node/presets/node.d.ts",
|
|
75
56
|
"node": {
|
|
76
|
-
"require": "./lib/node/presets/node.
|
|
57
|
+
"require": "./lib/node/presets/node.cjs",
|
|
77
58
|
"import": "./lib/node/presets/node.mjs"
|
|
78
59
|
},
|
|
79
60
|
"browser": null,
|
|
80
|
-
"require": "./lib/node/presets/node.
|
|
61
|
+
"require": "./lib/node/presets/node.cjs",
|
|
81
62
|
"import": "./lib/node/presets/node.mjs",
|
|
82
|
-
"default": "./lib/node/presets/node.
|
|
63
|
+
"default": "./lib/node/presets/node.cjs"
|
|
83
64
|
},
|
|
84
65
|
"./presets/browser": {
|
|
85
|
-
"browser":
|
|
86
|
-
|
|
87
|
-
"require": "./lib/browser/presets/browser.js",
|
|
88
|
-
"import": "./lib/browser/presets/browser.mjs",
|
|
89
|
-
"default": "./lib/browser/presets/browser.js"
|
|
90
|
-
}
|
|
66
|
+
"browser": "./lib/browser/presets/browser.mjs",
|
|
67
|
+
"node": null
|
|
91
68
|
},
|
|
92
69
|
"./utils/node": {
|
|
93
|
-
"types": "./lib/node/utils/node/index.d.ts",
|
|
94
70
|
"node": {
|
|
95
|
-
"require": "./lib/node/utils/node/index.
|
|
71
|
+
"require": "./lib/node/utils/node/index.cjs",
|
|
96
72
|
"import": "./lib/node/utils/node/index.mjs"
|
|
97
73
|
},
|
|
98
74
|
"browser": null,
|
|
99
|
-
"require": "./lib/node/utils/node/index.
|
|
75
|
+
"require": "./lib/node/utils/node/index.cjs",
|
|
100
76
|
"import": "./lib/node/utils/node/index.mjs",
|
|
101
|
-
"default": "./lib/node/utils/node/index.
|
|
77
|
+
"default": "./lib/node/utils/node/index.cjs"
|
|
102
78
|
}
|
|
103
79
|
},
|
|
104
80
|
"author": "Artem Zakharchenko",
|
|
@@ -118,14 +94,13 @@
|
|
|
118
94
|
"presets"
|
|
119
95
|
],
|
|
120
96
|
"repository": {
|
|
121
|
-
"type": "git",
|
|
122
97
|
"url": "https://github.com/mswjs/interceptors"
|
|
123
98
|
},
|
|
124
99
|
"devDependencies": {
|
|
125
100
|
"@commitlint/cli": "^19.7.1",
|
|
126
101
|
"@commitlint/config-conventional": "^19.7.1",
|
|
127
102
|
"@open-draft/test-server": "^0.5.1",
|
|
128
|
-
"@ossjs/release": "^0.
|
|
103
|
+
"@ossjs/release": "^0.10.1",
|
|
129
104
|
"@playwright/test": "^1.51.0",
|
|
130
105
|
"@types/cors": "^2.8.12",
|
|
131
106
|
"@types/express": "^5.0.0",
|
|
@@ -151,20 +126,20 @@
|
|
|
151
126
|
"happy-dom": "^17.3.0",
|
|
152
127
|
"jsdom": "^26.1.0",
|
|
153
128
|
"node-fetch": "3.3.2",
|
|
154
|
-
"rimraf": "^6.0.1",
|
|
155
129
|
"simple-git-hooks": "^2.7.0",
|
|
156
130
|
"socket.io": "^4.7.4",
|
|
157
131
|
"socket.io-client": "^4.7.4",
|
|
158
132
|
"socket.io-parser": "^4.2.4",
|
|
159
133
|
"superagent": "^10.1.1",
|
|
160
134
|
"supertest": "^7.0.0",
|
|
161
|
-
"
|
|
135
|
+
"tsdown": "^0.18.1",
|
|
162
136
|
"typescript": "^5.8.2",
|
|
163
137
|
"undici": "^7.4.0",
|
|
164
138
|
"vitest": "^3.0.8",
|
|
165
139
|
"vitest-environment-miniflare": "^2.14.1",
|
|
166
140
|
"wait-for-expect": "^3.0.2",
|
|
167
141
|
"web-encoding": "^1.1.5",
|
|
142
|
+
"webpack": "^5.105.0",
|
|
168
143
|
"webpack-http-server": "^0.5.0",
|
|
169
144
|
"ws": "^8.18.1"
|
|
170
145
|
},
|
|
@@ -198,14 +173,14 @@
|
|
|
198
173
|
}
|
|
199
174
|
},
|
|
200
175
|
"scripts": {
|
|
201
|
-
"start": "
|
|
176
|
+
"start": "tsdown --watch",
|
|
202
177
|
"test": "pnpm test:unit && pnpm test:integration",
|
|
203
178
|
"test:unit": "vitest",
|
|
204
179
|
"test:integration": "pnpm test:node && pnpm test:browser",
|
|
205
180
|
"test:node": "vitest -c test/vitest.config.js",
|
|
206
181
|
"test:browser": "pnpm playwright test -c test/playwright.config.ts",
|
|
207
|
-
"
|
|
208
|
-
"build": "
|
|
182
|
+
"test:nock": "./test/third-party/nock.sh",
|
|
183
|
+
"build": "tsdown",
|
|
209
184
|
"release": "release publish"
|
|
210
185
|
}
|
|
211
186
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"main": "../../lib/browser/presets/browser.
|
|
2
|
+
"main": "../../lib/browser/presets/browser.mjs",
|
|
3
3
|
"module": "../../lib/browser/presets/browser.mjs",
|
|
4
|
-
"browser": "../../lib/browser/presets/browser.
|
|
5
|
-
"types": "../../lib/browser/presets/browser.d.ts"
|
|
4
|
+
"browser": "../../lib/browser/presets/browser.mjs"
|
|
6
5
|
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"main": "../../lib/node/presets/node.
|
|
2
|
+
"main": "../../lib/node/presets/node.cjs",
|
|
3
3
|
"module": "../../lib/node/presets/node.mjs",
|
|
4
4
|
"browser": null,
|
|
5
|
-
"
|
|
5
|
+
"exports": {
|
|
6
|
+
".": {
|
|
7
|
+
"import": "./../lib/node/presets/node.mjs",
|
|
8
|
+
"default": "./../lib/node/presets/node.cjs"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
6
11
|
}
|
|
@@ -8,6 +8,7 @@ import { FetchInterceptor } from './interceptors/fetch'
|
|
|
8
8
|
import { handleRequest } from './utils/handleRequest'
|
|
9
9
|
import { RequestController } from './RequestController'
|
|
10
10
|
import { FetchResponse } from './utils/fetchUtils'
|
|
11
|
+
import { isResponseError } from './utils/responseUtils'
|
|
11
12
|
|
|
12
13
|
export interface SerializedRequest {
|
|
13
14
|
id: string
|
|
@@ -178,13 +179,14 @@ export class RemoteHttpResolver extends Interceptor<HttpRequestEventMap> {
|
|
|
178
179
|
body: requestJson.body,
|
|
179
180
|
})
|
|
180
181
|
|
|
181
|
-
const controller = new RequestController(request
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
182
|
+
const controller = new RequestController(request, {
|
|
183
|
+
passthrough: () => {},
|
|
184
|
+
respondWith: async (response) => {
|
|
185
|
+
if (isResponseError(response)) {
|
|
186
|
+
this.logger.info('received a network error!', { response })
|
|
187
|
+
throw new Error('Not implemented')
|
|
188
|
+
}
|
|
189
|
+
|
|
188
190
|
this.logger.info('received mocked response!', { response })
|
|
189
191
|
|
|
190
192
|
const responseClone = response.clone()
|
|
@@ -221,15 +223,18 @@ export class RemoteHttpResolver extends Interceptor<HttpRequestEventMap> {
|
|
|
221
223
|
serializedResponse
|
|
222
224
|
)
|
|
223
225
|
},
|
|
224
|
-
|
|
225
|
-
this.logger.info('
|
|
226
|
-
throw new Error('Not implemented')
|
|
227
|
-
},
|
|
228
|
-
onError: (error) => {
|
|
229
|
-
this.logger.info('request has errored!', { error })
|
|
226
|
+
errorWith: (reason) => {
|
|
227
|
+
this.logger.info('request has errored!', { error: reason })
|
|
230
228
|
throw new Error('Not implemented')
|
|
231
229
|
},
|
|
232
230
|
})
|
|
231
|
+
|
|
232
|
+
await handleRequest({
|
|
233
|
+
request,
|
|
234
|
+
requestId: requestJson.id,
|
|
235
|
+
controller,
|
|
236
|
+
emitter: this.emitter,
|
|
237
|
+
})
|
|
233
238
|
}
|
|
234
239
|
|
|
235
240
|
this.subscriptions.push(() => {
|
|
@@ -1,57 +1,104 @@
|
|
|
1
|
-
import { it, expect } from 'vitest'
|
|
2
|
-
import {
|
|
1
|
+
import { vi, it, expect } from 'vitest'
|
|
2
|
+
import {
|
|
3
|
+
RequestController,
|
|
4
|
+
type RequestControllerSource,
|
|
5
|
+
} from './RequestController'
|
|
6
|
+
import { InterceptorError } from './InterceptorError'
|
|
3
7
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
const defaultSource = {
|
|
9
|
+
passthrough() {},
|
|
10
|
+
respondWith() {},
|
|
11
|
+
errorWith() {},
|
|
12
|
+
} satisfies RequestControllerSource
|
|
13
|
+
|
|
14
|
+
it('has a pending state upon construction', () => {
|
|
15
|
+
const controller = new RequestController(
|
|
16
|
+
new Request('http://localhost'),
|
|
17
|
+
defaultSource
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
expect(controller.handled).toBeInstanceOf(Promise)
|
|
21
|
+
expect(controller.readyState).toBe(RequestController.PENDING)
|
|
8
22
|
})
|
|
9
23
|
|
|
10
|
-
it('
|
|
11
|
-
const
|
|
12
|
-
controller
|
|
24
|
+
it('handles a request when calling ".respondWith()" with a mocked response', async () => {
|
|
25
|
+
const respondWith = vi.fn<RequestControllerSource['respondWith']>()
|
|
26
|
+
const controller = new RequestController(new Request('http://localhost'), {
|
|
27
|
+
...defaultSource,
|
|
28
|
+
respondWith,
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
await controller.respondWith(new Response('hello world'))
|
|
32
|
+
|
|
33
|
+
expect(controller.readyState).toBe(RequestController.RESPONSE)
|
|
34
|
+
await expect(controller.handled).resolves.toBeUndefined()
|
|
13
35
|
|
|
14
|
-
|
|
36
|
+
expect(respondWith).toHaveBeenCalledOnce()
|
|
37
|
+
const [response] = respondWith.mock.calls[0]
|
|
15
38
|
|
|
16
39
|
expect(response).toBeInstanceOf(Response)
|
|
17
40
|
expect(response.status).toBe(200)
|
|
18
|
-
expect(
|
|
41
|
+
await expect(response.text()).resolves.toBe('hello world')
|
|
19
42
|
})
|
|
20
43
|
|
|
21
|
-
it('
|
|
22
|
-
const
|
|
44
|
+
it('handles the request when calling ".errorWith()" with an error', async () => {
|
|
45
|
+
const errorWith = vi.fn<RequestControllerSource['errorWith']>()
|
|
46
|
+
const controller = new RequestController(new Request('http://localhost'), {
|
|
47
|
+
...defaultSource,
|
|
48
|
+
errorWith,
|
|
49
|
+
})
|
|
50
|
+
|
|
23
51
|
const error = new Error('Oops!')
|
|
24
|
-
controller.errorWith(error)
|
|
52
|
+
await controller.errorWith(error)
|
|
53
|
+
|
|
54
|
+
expect(controller.readyState).toBe(RequestController.ERROR)
|
|
55
|
+
await expect(controller.handled).resolves.toBeUndefined()
|
|
25
56
|
|
|
26
|
-
|
|
57
|
+
expect(errorWith).toHaveBeenCalledOnce()
|
|
58
|
+
expect(errorWith).toHaveBeenCalledWith(error)
|
|
27
59
|
})
|
|
28
60
|
|
|
29
|
-
it('
|
|
30
|
-
const
|
|
61
|
+
it('handles the request when calling ".errorWith()" with an arbitrary object', async () => {
|
|
62
|
+
const errorWith = vi.fn<RequestControllerSource['errorWith']>()
|
|
63
|
+
const controller = new RequestController(new Request('http://localhost'), {
|
|
64
|
+
...defaultSource,
|
|
65
|
+
errorWith,
|
|
66
|
+
})
|
|
67
|
+
|
|
31
68
|
const error = { message: 'Oops!' }
|
|
32
|
-
controller.errorWith(error)
|
|
69
|
+
await controller.errorWith(error)
|
|
33
70
|
|
|
34
|
-
|
|
71
|
+
expect(controller.readyState).toBe(RequestController.ERROR)
|
|
72
|
+
await expect(controller.handled).resolves.toBeUndefined()
|
|
73
|
+
|
|
74
|
+
expect(errorWith).toHaveBeenCalledOnce()
|
|
75
|
+
expect(errorWith).toHaveBeenCalledWith(error)
|
|
35
76
|
})
|
|
36
77
|
|
|
37
|
-
it('throws when calling "respondWith" multiple times', () => {
|
|
38
|
-
const controller = new RequestController(
|
|
78
|
+
it('throws when calling "respondWith" multiple times', async () => {
|
|
79
|
+
const controller = new RequestController(
|
|
80
|
+
new Request('http://localhost'),
|
|
81
|
+
defaultSource
|
|
82
|
+
)
|
|
39
83
|
controller.respondWith(new Response('hello world'))
|
|
40
84
|
|
|
41
|
-
expect(() =>
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
85
|
+
expect(() => controller.respondWith(new Response('second response'))).toThrow(
|
|
86
|
+
new InterceptorError(
|
|
87
|
+
'Failed to respond to the "GET http://localhost/" request with "200 OK": the request has already been handled (2)'
|
|
88
|
+
)
|
|
45
89
|
)
|
|
46
90
|
})
|
|
47
91
|
|
|
48
|
-
it('throws when calling "errorWith" multiple times', () => {
|
|
49
|
-
const controller = new RequestController(
|
|
92
|
+
it('throws when calling "errorWith" multiple times', async () => {
|
|
93
|
+
const controller = new RequestController(
|
|
94
|
+
new Request('http://localhost'),
|
|
95
|
+
defaultSource
|
|
96
|
+
)
|
|
50
97
|
controller.errorWith(new Error('Oops!'))
|
|
51
98
|
|
|
52
|
-
expect(() =>
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
99
|
+
expect(() => controller.errorWith(new Error('second error'))).toThrow(
|
|
100
|
+
new InterceptorError(
|
|
101
|
+
'Failed to error the "GET http://localhost/" request with "Error: second error": the request has already been handled (3)'
|
|
102
|
+
)
|
|
56
103
|
)
|
|
57
104
|
})
|