@depup/mswjs__interceptors 0.41.3-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/ClientRequest/package.json +11 -0
  2. package/LICENSE.md +9 -0
  3. package/README.md +31 -0
  4. package/RemoteHttpInterceptor/package.json +11 -0
  5. package/WebSocket/package.json +12 -0
  6. package/XMLHttpRequest/package.json +12 -0
  7. package/changes.json +10 -0
  8. package/fetch/package.json +12 -0
  9. package/lib/browser/Interceptor-Deczogc8.d.cts +65 -0
  10. package/lib/browser/Interceptor-gqKgs-aF.d.mts +65 -0
  11. package/lib/browser/XMLHttpRequest-BACqefB-.cjs +761 -0
  12. package/lib/browser/XMLHttpRequest-BACqefB-.cjs.map +1 -0
  13. package/lib/browser/XMLHttpRequest-BvxZV0WU.mjs +756 -0
  14. package/lib/browser/XMLHttpRequest-BvxZV0WU.mjs.map +1 -0
  15. package/lib/browser/bufferUtils-BiiO6HZv.mjs +20 -0
  16. package/lib/browser/bufferUtils-BiiO6HZv.mjs.map +1 -0
  17. package/lib/browser/bufferUtils-Uc0eRItL.cjs +38 -0
  18. package/lib/browser/bufferUtils-Uc0eRItL.cjs.map +1 -0
  19. package/lib/browser/createRequestId-Cs4oXfa1.cjs +205 -0
  20. package/lib/browser/createRequestId-Cs4oXfa1.cjs.map +1 -0
  21. package/lib/browser/createRequestId-DQcIlohW.mjs +170 -0
  22. package/lib/browser/createRequestId-DQcIlohW.mjs.map +1 -0
  23. package/lib/browser/fetch-DdKEdDOR.mjs +248 -0
  24. package/lib/browser/fetch-DdKEdDOR.mjs.map +1 -0
  25. package/lib/browser/fetch-U3v3Y4ap.cjs +253 -0
  26. package/lib/browser/fetch-U3v3Y4ap.cjs.map +1 -0
  27. package/lib/browser/getRawRequest-BTaNLFr0.mjs +218 -0
  28. package/lib/browser/getRawRequest-BTaNLFr0.mjs.map +1 -0
  29. package/lib/browser/getRawRequest-zx8rUJL2.cjs +259 -0
  30. package/lib/browser/getRawRequest-zx8rUJL2.cjs.map +1 -0
  31. package/lib/browser/glossary-BdLS4k1H.d.cts +70 -0
  32. package/lib/browser/glossary-DYwOrogs.d.mts +70 -0
  33. package/lib/browser/handleRequest-CvX2G-Lz.cjs +189 -0
  34. package/lib/browser/handleRequest-CvX2G-Lz.cjs.map +1 -0
  35. package/lib/browser/handleRequest-D7kpTI5U.mjs +178 -0
  36. package/lib/browser/handleRequest-D7kpTI5U.mjs.map +1 -0
  37. package/lib/browser/hasConfigurableGlobal-BvCTG97d.cjs +45 -0
  38. package/lib/browser/hasConfigurableGlobal-BvCTG97d.cjs.map +1 -0
  39. package/lib/browser/hasConfigurableGlobal-npXitu1-.mjs +33 -0
  40. package/lib/browser/hasConfigurableGlobal-npXitu1-.mjs.map +1 -0
  41. package/lib/browser/index.cjs +70 -0
  42. package/lib/browser/index.cjs.map +1 -0
  43. package/lib/browser/index.d.cts +96 -0
  44. package/lib/browser/index.d.mts +96 -0
  45. package/lib/browser/index.mjs +56 -0
  46. package/lib/browser/index.mjs.map +1 -0
  47. package/lib/browser/interceptors/WebSocket/index.cjs +622 -0
  48. package/lib/browser/interceptors/WebSocket/index.cjs.map +1 -0
  49. package/lib/browser/interceptors/WebSocket/index.d.cts +277 -0
  50. package/lib/browser/interceptors/WebSocket/index.d.mts +277 -0
  51. package/lib/browser/interceptors/WebSocket/index.mjs +615 -0
  52. package/lib/browser/interceptors/WebSocket/index.mjs.map +1 -0
  53. package/lib/browser/interceptors/XMLHttpRequest/index.cjs +7 -0
  54. package/lib/browser/interceptors/XMLHttpRequest/index.d.cts +15 -0
  55. package/lib/browser/interceptors/XMLHttpRequest/index.d.mts +15 -0
  56. package/lib/browser/interceptors/XMLHttpRequest/index.mjs +7 -0
  57. package/lib/browser/interceptors/fetch/index.cjs +6 -0
  58. package/lib/browser/interceptors/fetch/index.d.cts +13 -0
  59. package/lib/browser/interceptors/fetch/index.d.mts +13 -0
  60. package/lib/browser/interceptors/fetch/index.mjs +6 -0
  61. package/lib/browser/presets/browser.cjs +17 -0
  62. package/lib/browser/presets/browser.cjs.map +1 -0
  63. package/lib/browser/presets/browser.d.cts +12 -0
  64. package/lib/browser/presets/browser.d.mts +14 -0
  65. package/lib/browser/presets/browser.mjs +17 -0
  66. package/lib/browser/presets/browser.mjs.map +1 -0
  67. package/lib/browser/resolveWebSocketUrl-6K6EgqsA.cjs +31 -0
  68. package/lib/browser/resolveWebSocketUrl-6K6EgqsA.cjs.map +1 -0
  69. package/lib/browser/resolveWebSocketUrl-C83-x9iE.mjs +25 -0
  70. package/lib/browser/resolveWebSocketUrl-C83-x9iE.mjs.map +1 -0
  71. package/lib/node/BatchInterceptor-3LnAnLTx.cjs +49 -0
  72. package/lib/node/BatchInterceptor-3LnAnLTx.cjs.map +1 -0
  73. package/lib/node/BatchInterceptor-D7mXzHcQ.d.mts +26 -0
  74. package/lib/node/BatchInterceptor-DFaBPilf.mjs +44 -0
  75. package/lib/node/BatchInterceptor-DFaBPilf.mjs.map +1 -0
  76. package/lib/node/BatchInterceptor-D_YqR8qU.d.cts +26 -0
  77. package/lib/node/ClientRequest-2rDe54Ui.cjs +1043 -0
  78. package/lib/node/ClientRequest-2rDe54Ui.cjs.map +1 -0
  79. package/lib/node/ClientRequest-Ca8Qykuv.mjs +1034 -0
  80. package/lib/node/ClientRequest-Ca8Qykuv.mjs.map +1 -0
  81. package/lib/node/Interceptor-DEazpLJd.d.mts +133 -0
  82. package/lib/node/Interceptor-DJ2akVWI.d.cts +133 -0
  83. package/lib/node/RemoteHttpInterceptor.cjs +154 -0
  84. package/lib/node/RemoteHttpInterceptor.cjs.map +1 -0
  85. package/lib/node/RemoteHttpInterceptor.d.cts +39 -0
  86. package/lib/node/RemoteHttpInterceptor.d.mts +39 -0
  87. package/lib/node/RemoteHttpInterceptor.mjs +152 -0
  88. package/lib/node/RemoteHttpInterceptor.mjs.map +1 -0
  89. package/lib/node/XMLHttpRequest-B7kJdYYI.cjs +763 -0
  90. package/lib/node/XMLHttpRequest-B7kJdYYI.cjs.map +1 -0
  91. package/lib/node/XMLHttpRequest-C8dIZpds.mjs +757 -0
  92. package/lib/node/XMLHttpRequest-C8dIZpds.mjs.map +1 -0
  93. package/lib/node/bufferUtils-DiCTqG-7.cjs +38 -0
  94. package/lib/node/bufferUtils-DiCTqG-7.cjs.map +1 -0
  95. package/lib/node/bufferUtils-_8XfKIfX.mjs +20 -0
  96. package/lib/node/bufferUtils-_8XfKIfX.mjs.map +1 -0
  97. package/lib/node/chunk-CbDLau6x.cjs +34 -0
  98. package/lib/node/fetch-BmXpK10r.cjs +272 -0
  99. package/lib/node/fetch-BmXpK10r.cjs.map +1 -0
  100. package/lib/node/fetch-G1DVwDKG.mjs +265 -0
  101. package/lib/node/fetch-G1DVwDKG.mjs.map +1 -0
  102. package/lib/node/fetchUtils-BaY5iWXw.cjs +419 -0
  103. package/lib/node/fetchUtils-BaY5iWXw.cjs.map +1 -0
  104. package/lib/node/fetchUtils-CoU35g3M.mjs +359 -0
  105. package/lib/node/fetchUtils-CoU35g3M.mjs.map +1 -0
  106. package/lib/node/getRawRequest-BavnMWh_.cjs +36 -0
  107. package/lib/node/getRawRequest-BavnMWh_.cjs.map +1 -0
  108. package/lib/node/getRawRequest-DnwmXyOW.mjs +24 -0
  109. package/lib/node/getRawRequest-DnwmXyOW.mjs.map +1 -0
  110. package/lib/node/glossary-BLKRyLBd.cjs +12 -0
  111. package/lib/node/glossary-BLKRyLBd.cjs.map +1 -0
  112. package/lib/node/glossary-glQBRnVD.mjs +6 -0
  113. package/lib/node/glossary-glQBRnVD.mjs.map +1 -0
  114. package/lib/node/handleRequest-Bb7Y-XLw.cjs +220 -0
  115. package/lib/node/handleRequest-Bb7Y-XLw.cjs.map +1 -0
  116. package/lib/node/handleRequest-Y97UwBbF.mjs +190 -0
  117. package/lib/node/handleRequest-Y97UwBbF.mjs.map +1 -0
  118. package/lib/node/hasConfigurableGlobal-C97fWuaA.cjs +26 -0
  119. package/lib/node/hasConfigurableGlobal-C97fWuaA.cjs.map +1 -0
  120. package/lib/node/hasConfigurableGlobal-DBJA0vjm.mjs +20 -0
  121. package/lib/node/hasConfigurableGlobal-DBJA0vjm.mjs.map +1 -0
  122. package/lib/node/index-BMbJ8FXL.d.cts +113 -0
  123. package/lib/node/index-C0YAQ36w.d.mts +113 -0
  124. package/lib/node/index.cjs +54 -0
  125. package/lib/node/index.cjs.map +1 -0
  126. package/lib/node/index.d.cts +75 -0
  127. package/lib/node/index.d.mts +75 -0
  128. package/lib/node/index.mjs +40 -0
  129. package/lib/node/index.mjs.map +1 -0
  130. package/lib/node/interceptors/ClientRequest/index.cjs +6 -0
  131. package/lib/node/interceptors/ClientRequest/index.d.cts +2 -0
  132. package/lib/node/interceptors/ClientRequest/index.d.mts +3 -0
  133. package/lib/node/interceptors/ClientRequest/index.mjs +6 -0
  134. package/lib/node/interceptors/XMLHttpRequest/index.cjs +6 -0
  135. package/lib/node/interceptors/XMLHttpRequest/index.d.cts +14 -0
  136. package/lib/node/interceptors/XMLHttpRequest/index.d.mts +14 -0
  137. package/lib/node/interceptors/XMLHttpRequest/index.mjs +6 -0
  138. package/lib/node/interceptors/fetch/index.cjs +5 -0
  139. package/lib/node/interceptors/fetch/index.d.cts +12 -0
  140. package/lib/node/interceptors/fetch/index.d.mts +12 -0
  141. package/lib/node/interceptors/fetch/index.mjs +5 -0
  142. package/lib/node/node-DwCc6iuP.mjs +27 -0
  143. package/lib/node/node-DwCc6iuP.mjs.map +1 -0
  144. package/lib/node/node-dKdAf3tC.cjs +39 -0
  145. package/lib/node/node-dKdAf3tC.cjs.map +1 -0
  146. package/lib/node/presets/node.cjs +22 -0
  147. package/lib/node/presets/node.cjs.map +1 -0
  148. package/lib/node/presets/node.d.cts +13 -0
  149. package/lib/node/presets/node.d.mts +15 -0
  150. package/lib/node/presets/node.mjs +22 -0
  151. package/lib/node/presets/node.mjs.map +1 -0
  152. package/lib/node/utils/node/index.cjs +4 -0
  153. package/lib/node/utils/node/index.d.cts +16 -0
  154. package/lib/node/utils/node/index.d.mts +16 -0
  155. package/lib/node/utils/node/index.mjs +3 -0
  156. package/package.json +204 -0
  157. package/presets/browser/package.json +5 -0
  158. package/presets/node/package.json +11 -0
  159. package/src/BatchInterceptor.test.ts +255 -0
  160. package/src/BatchInterceptor.ts +95 -0
  161. package/src/Interceptor.test.ts +205 -0
  162. package/src/Interceptor.ts +249 -0
  163. package/src/InterceptorError.ts +7 -0
  164. package/src/RemoteHttpInterceptor.ts +251 -0
  165. package/src/RequestController.test.ts +104 -0
  166. package/src/RequestController.ts +109 -0
  167. package/src/createRequestId.test.ts +7 -0
  168. package/src/createRequestId.ts +9 -0
  169. package/src/getRawRequest.ts +21 -0
  170. package/src/glossary.ts +37 -0
  171. package/src/index.ts +15 -0
  172. package/src/interceptors/ClientRequest/MockHttpSocket.ts +724 -0
  173. package/src/interceptors/ClientRequest/agents.ts +110 -0
  174. package/src/interceptors/ClientRequest/index.test.ts +75 -0
  175. package/src/interceptors/ClientRequest/index.ts +193 -0
  176. package/src/interceptors/ClientRequest/utils/getIncomingMessageBody.test.ts +54 -0
  177. package/src/interceptors/ClientRequest/utils/getIncomingMessageBody.ts +45 -0
  178. package/src/interceptors/ClientRequest/utils/normalizeClientRequestArgs.test.ts +427 -0
  179. package/src/interceptors/ClientRequest/utils/normalizeClientRequestArgs.ts +268 -0
  180. package/src/interceptors/ClientRequest/utils/parserUtils.ts +48 -0
  181. package/src/interceptors/ClientRequest/utils/recordRawHeaders.test.ts +258 -0
  182. package/src/interceptors/ClientRequest/utils/recordRawHeaders.ts +262 -0
  183. package/src/interceptors/Socket/MockSocket.test.ts +264 -0
  184. package/src/interceptors/Socket/MockSocket.ts +58 -0
  185. package/src/interceptors/Socket/utils/baseUrlFromConnectionOptions.ts +26 -0
  186. package/src/interceptors/Socket/utils/normalizeSocketWriteArgs.test.ts +52 -0
  187. package/src/interceptors/Socket/utils/normalizeSocketWriteArgs.ts +33 -0
  188. package/src/interceptors/WebSocket/WebSocketClassTransport.ts +116 -0
  189. package/src/interceptors/WebSocket/WebSocketClientConnection.ts +152 -0
  190. package/src/interceptors/WebSocket/WebSocketOverride.ts +252 -0
  191. package/src/interceptors/WebSocket/WebSocketServerConnection.ts +420 -0
  192. package/src/interceptors/WebSocket/WebSocketTransport.ts +39 -0
  193. package/src/interceptors/WebSocket/index.ts +191 -0
  194. package/src/interceptors/WebSocket/utils/bindEvent.test.ts +27 -0
  195. package/src/interceptors/WebSocket/utils/bindEvent.ts +21 -0
  196. package/src/interceptors/WebSocket/utils/events.test.ts +101 -0
  197. package/src/interceptors/WebSocket/utils/events.ts +94 -0
  198. package/src/interceptors/XMLHttpRequest/XMLHttpRequestController.ts +746 -0
  199. package/src/interceptors/XMLHttpRequest/XMLHttpRequestProxy.ts +121 -0
  200. package/src/interceptors/XMLHttpRequest/index.ts +61 -0
  201. package/src/interceptors/XMLHttpRequest/polyfills/EventPolyfill.ts +51 -0
  202. package/src/interceptors/XMLHttpRequest/polyfills/ProgressEventPolyfill.ts +17 -0
  203. package/src/interceptors/XMLHttpRequest/utils/concatArrayBuffer.ts +12 -0
  204. package/src/interceptors/XMLHttpRequest/utils/concateArrayBuffer.test.ts +12 -0
  205. package/src/interceptors/XMLHttpRequest/utils/createEvent.test.ts +26 -0
  206. package/src/interceptors/XMLHttpRequest/utils/createEvent.ts +41 -0
  207. package/src/interceptors/XMLHttpRequest/utils/createResponse.ts +49 -0
  208. package/src/interceptors/XMLHttpRequest/utils/getBodyByteLength.test.ts +164 -0
  209. package/src/interceptors/XMLHttpRequest/utils/getBodyByteLength.ts +16 -0
  210. package/src/interceptors/XMLHttpRequest/utils/isDomParserSupportedType.ts +14 -0
  211. package/src/interceptors/fetch/index.ts +214 -0
  212. package/src/interceptors/fetch/utils/brotli-decompress.browser.ts +14 -0
  213. package/src/interceptors/fetch/utils/brotli-decompress.ts +31 -0
  214. package/src/interceptors/fetch/utils/createNetworkError.ts +5 -0
  215. package/src/interceptors/fetch/utils/decompression.ts +85 -0
  216. package/src/interceptors/fetch/utils/followRedirect.ts +114 -0
  217. package/src/presets/browser.ts +11 -0
  218. package/src/presets/node.ts +13 -0
  219. package/src/utils/bufferUtils.test.ts +21 -0
  220. package/src/utils/bufferUtils.ts +22 -0
  221. package/src/utils/canParseUrl.ts +13 -0
  222. package/src/utils/cloneObject.test.ts +94 -0
  223. package/src/utils/cloneObject.ts +36 -0
  224. package/src/utils/createProxy.test.ts +164 -0
  225. package/src/utils/createProxy.ts +104 -0
  226. package/src/utils/emitAsync.ts +25 -0
  227. package/src/utils/fetchUtils.ts +119 -0
  228. package/src/utils/findPropertySource.test.ts +27 -0
  229. package/src/utils/findPropertySource.ts +20 -0
  230. package/src/utils/getCleanUrl.test.ts +32 -0
  231. package/src/utils/getCleanUrl.ts +6 -0
  232. package/src/utils/getUrlByRequestOptions.test.ts +163 -0
  233. package/src/utils/getUrlByRequestOptions.ts +152 -0
  234. package/src/utils/getValueBySymbol.test.ts +14 -0
  235. package/src/utils/getValueBySymbol.ts +19 -0
  236. package/src/utils/handleRequest.ts +205 -0
  237. package/src/utils/hasConfigurableGlobal.test.ts +83 -0
  238. package/src/utils/hasConfigurableGlobal.ts +34 -0
  239. package/src/utils/isNodeLikeError.ts +13 -0
  240. package/src/utils/isObject.test.ts +21 -0
  241. package/src/utils/isObject.ts +8 -0
  242. package/src/utils/isPropertyAccessible.ts +19 -0
  243. package/src/utils/nextTick.ts +11 -0
  244. package/src/utils/node/index.ts +39 -0
  245. package/src/utils/parseJson.test.ts +10 -0
  246. package/src/utils/parseJson.ts +12 -0
  247. package/src/utils/resolveWebSocketUrl.ts +45 -0
  248. package/src/utils/responseUtils.ts +59 -0
@@ -0,0 +1,22 @@
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";
8
+
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
+ */
14
+ var node_default = [
15
+ new ClientRequestInterceptor(),
16
+ new XMLHttpRequestInterceptor(),
17
+ new FetchInterceptor()
18
+ ];
19
+
20
+ //#endregion
21
+ export { node_default as default };
22
+ //# sourceMappingURL=node.mjs.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,4 @@
1
+ const require_node = require('../../node-dKdAf3tC.cjs');
2
+
3
+ exports.getClientRequestBodyStream = require_node.getClientRequestBodyStream;
4
+ exports.setRawRequestBodyStream = require_node.setRawRequestBodyStream;
@@ -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.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
@@ -0,0 +1,3 @@
1
+ import { n as setRawRequestBodyStream, t as getClientRequestBodyStream } from "../../node-DwCc6iuP.mjs";
2
+
3
+ export { getClientRequestBodyStream, setRawRequestBodyStream };
package/package.json ADDED
@@ -0,0 +1,204 @@
1
+ {
2
+ "type": "commonjs",
3
+ "name": "@depup/mswjs__interceptors",
4
+ "description": "[DepUp] Low-level HTTP/HTTPS/XHR/fetch request interception library.",
5
+ "version": "0.41.3-depup.0",
6
+ "main": "./lib/node/index.cjs",
7
+ "module": "./lib/node/index.mjs",
8
+ "types": "./lib/node/index.d.cts",
9
+ "exports": {
10
+ ".": {
11
+ "browser": {
12
+ "import": "./lib/browser/index.mjs",
13
+ "default": "./lib/browser/index.cjs"
14
+ },
15
+ "import": "./lib/node/index.mjs",
16
+ "default": "./lib/node/index.cjs"
17
+ },
18
+ "./ClientRequest": {
19
+ "node": {
20
+ "require": "./lib/node/interceptors/ClientRequest/index.cjs",
21
+ "import": "./lib/node/interceptors/ClientRequest/index.mjs"
22
+ },
23
+ "browser": null,
24
+ "require": "./lib/node/interceptors/ClientRequest/index.cjs",
25
+ "import": "./lib/node/interceptors/ClientRequest/index.mjs",
26
+ "default": "./lib/node/interceptors/ClientRequest/index.cjs"
27
+ },
28
+ "./XMLHttpRequest": {
29
+ "browser": "./lib/browser/interceptors/XMLHttpRequest/index.mjs",
30
+ "require": "./lib/node/interceptors/XMLHttpRequest/index.cjs",
31
+ "import": "./lib/node/interceptors/XMLHttpRequest/index.mjs",
32
+ "default": "./lib/node/interceptors/XMLHttpRequest/index.cjs"
33
+ },
34
+ "./fetch": {
35
+ "browser": "./lib/browser/interceptors/fetch/index.mjs",
36
+ "require": "./lib/node/interceptors/fetch/index.cjs",
37
+ "import": "./lib/node/interceptors/fetch/index.mjs",
38
+ "default": "./lib/node/interceptors/fetch/index.cjs"
39
+ },
40
+ "./WebSocket": {
41
+ "require": "./lib/browser/interceptors/WebSocket/index.cjs",
42
+ "import": "./lib/browser/interceptors/WebSocket/index.mjs",
43
+ "default": "./lib/browser/interceptors/WebSocket/index.cjs"
44
+ },
45
+ "./RemoteHttpInterceptor": {
46
+ "node": {
47
+ "require": "./lib/node/RemoteHttpInterceptor.cjs",
48
+ "import": "./lib/node/RemoteHttpInterceptor.mjs"
49
+ },
50
+ "browser": null,
51
+ "require": "./lib/node/RemoteHttpInterceptor.cjs",
52
+ "import": "./lib/node/RemoteHttpInterceptor.mjs",
53
+ "default": "./lib/node/RemoteHttpInterceptor.cjs"
54
+ },
55
+ "./presets/node": {
56
+ "node": {
57
+ "require": "./lib/node/presets/node.cjs",
58
+ "import": "./lib/node/presets/node.mjs"
59
+ },
60
+ "browser": null,
61
+ "require": "./lib/node/presets/node.cjs",
62
+ "import": "./lib/node/presets/node.mjs",
63
+ "default": "./lib/node/presets/node.cjs"
64
+ },
65
+ "./presets/browser": {
66
+ "browser": "./lib/browser/presets/browser.mjs",
67
+ "node": null
68
+ },
69
+ "./utils/node": {
70
+ "node": {
71
+ "require": "./lib/node/utils/node/index.cjs",
72
+ "import": "./lib/node/utils/node/index.mjs"
73
+ },
74
+ "browser": null,
75
+ "require": "./lib/node/utils/node/index.cjs",
76
+ "import": "./lib/node/utils/node/index.mjs",
77
+ "default": "./lib/node/utils/node/index.cjs"
78
+ }
79
+ },
80
+ "author": "Artem Zakharchenko",
81
+ "license": "MIT",
82
+ "engines": {
83
+ "node": ">=18"
84
+ },
85
+ "files": [
86
+ "lib",
87
+ "README.md",
88
+ "src",
89
+ "ClientRequest",
90
+ "fetch",
91
+ "RemoteHttpInterceptor",
92
+ "XMLHttpRequest",
93
+ "WebSocket",
94
+ "presets",
95
+ "changes.json"
96
+ ],
97
+ "repository": {
98
+ "url": "https://github.com/mswjs/interceptors"
99
+ },
100
+ "devDependencies": {
101
+ "@commitlint/cli": "^19.7.1",
102
+ "@commitlint/config-conventional": "^19.7.1",
103
+ "@open-draft/test-server": "^0.5.1",
104
+ "@ossjs/release": "^0.10.1",
105
+ "@playwright/test": "^1.51.0",
106
+ "@types/cors": "^2.8.12",
107
+ "@types/express": "^5.0.0",
108
+ "@types/express-fileupload": "^1.5.0",
109
+ "@types/follow-redirects": "^1.14.1",
110
+ "@types/node": "^22.13.9",
111
+ "@types/node-fetch": "2.6.12",
112
+ "@types/superagent": "^8.1.9",
113
+ "@types/supertest": "^6.0.2",
114
+ "@types/ws": "^8.18.0",
115
+ "axios": "^1.8.2",
116
+ "body-parser": "^1.19.0",
117
+ "commitizen": "^4.2.4",
118
+ "cors": "^2.8.5",
119
+ "cross-env": "^7.0.3",
120
+ "cz-conventional-changelog": "3.3.0",
121
+ "engine.io-parser": "^5.2.1",
122
+ "express": "^4.21.2",
123
+ "express-fileupload": "^1.5.1",
124
+ "express-rate-limit": "^7.5.0",
125
+ "follow-redirects": "^1.15.1",
126
+ "got": "^14.4.6",
127
+ "happy-dom": "^17.3.0",
128
+ "jsdom": "^26.1.0",
129
+ "node-fetch": "3.3.2",
130
+ "simple-git-hooks": "^2.7.0",
131
+ "socket.io": "^4.7.4",
132
+ "socket.io-client": "^4.7.4",
133
+ "socket.io-parser": "^4.2.4",
134
+ "superagent": "^10.1.1",
135
+ "supertest": "^7.0.0",
136
+ "tsdown": "^0.18.1",
137
+ "typescript": "^5.8.2",
138
+ "undici": "^7.4.0",
139
+ "vitest": "^3.0.8",
140
+ "vitest-environment-miniflare": "^2.14.1",
141
+ "wait-for-expect": "^3.0.2",
142
+ "web-encoding": "^1.1.5",
143
+ "webpack": "^5.105.0",
144
+ "webpack-http-server": "^0.5.0",
145
+ "ws": "^8.18.1"
146
+ },
147
+ "dependencies": {
148
+ "@open-draft/deferred-promise": "^2.2.0",
149
+ "@open-draft/logger": "^0.3.0",
150
+ "@open-draft/until": "^3.0.1",
151
+ "is-node-process": "^1.2.0",
152
+ "outvariant": "^1.4.3",
153
+ "strict-event-emitter": "^0.5.1"
154
+ },
155
+ "resolutions": {
156
+ "memfs": "^3.4.13"
157
+ },
158
+ "keywords": [
159
+ "depup",
160
+ "dependency-bumped",
161
+ "updated-deps",
162
+ "@mswjs/interceptors",
163
+ "request",
164
+ "intercept",
165
+ "http",
166
+ "https",
167
+ "xmlhttprequest",
168
+ "xhr",
169
+ "fetch",
170
+ "low-level",
171
+ "mock",
172
+ "spy",
173
+ "testing"
174
+ ],
175
+ "config": {
176
+ "commitizen": {
177
+ "path": "./node_modules/cz-conventional-changelog"
178
+ }
179
+ },
180
+ "scripts": {
181
+ "start": "tsdown --watch",
182
+ "test": "pnpm test:unit && pnpm test:integration",
183
+ "test:unit": "vitest",
184
+ "test:integration": "pnpm test:node && pnpm test:browser",
185
+ "test:node": "vitest -c test/vitest.config.js",
186
+ "test:browser": "pnpm playwright test -c test/playwright.config.ts",
187
+ "test:nock": "./test/third-party/nock.sh",
188
+ "build": "tsdown",
189
+ "release": "release publish"
190
+ },
191
+ "depup": {
192
+ "changes": {
193
+ "@open-draft/until": {
194
+ "from": "^2.0.0",
195
+ "to": "^3.0.1"
196
+ }
197
+ },
198
+ "depsUpdated": 1,
199
+ "originalPackage": "@mswjs/interceptors",
200
+ "originalVersion": "0.41.3",
201
+ "processedAt": "2026-03-17T16:32:18.416Z",
202
+ "smokeTest": "passed"
203
+ }
204
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "main": "../../lib/browser/presets/browser.mjs",
3
+ "module": "../../lib/browser/presets/browser.mjs",
4
+ "browser": "../../lib/browser/presets/browser.mjs"
5
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "main": "../../lib/node/presets/node.cjs",
3
+ "module": "../../lib/node/presets/node.mjs",
4
+ "browser": null,
5
+ "exports": {
6
+ ".": {
7
+ "import": "./../lib/node/presets/node.mjs",
8
+ "default": "./../lib/node/presets/node.cjs"
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,255 @@
1
+ import { vi, it, expect, afterEach } from 'vitest'
2
+ import { Interceptor } from './Interceptor'
3
+ import { BatchInterceptor } from './BatchInterceptor'
4
+
5
+ afterEach(() => {
6
+ vi.resetAllMocks()
7
+ })
8
+
9
+ it('applies child interceptors', () => {
10
+ class PrimaryInterceptor extends Interceptor<any> {
11
+ constructor() {
12
+ super(Symbol('primary'))
13
+ }
14
+ }
15
+
16
+ class SecondaryInterceptor extends Interceptor<any> {
17
+ constructor() {
18
+ super(Symbol('secondary'))
19
+ }
20
+ }
21
+
22
+ const instances = {
23
+ primary: new PrimaryInterceptor(),
24
+ secondary: new SecondaryInterceptor(),
25
+ }
26
+
27
+ const interceptor = new BatchInterceptor({
28
+ name: 'batch-apply',
29
+ interceptors: [instances.primary, instances.secondary],
30
+ })
31
+
32
+ const primaryApplySpy = vi.spyOn(instances.primary, 'apply')
33
+ const secondaryApplySpy = vi.spyOn(instances.secondary, 'apply')
34
+
35
+ interceptor.apply()
36
+
37
+ expect(primaryApplySpy).toHaveBeenCalledTimes(1)
38
+ expect(secondaryApplySpy).toHaveBeenCalledTimes(1)
39
+ })
40
+
41
+ it('proxies event listeners to the interceptors', () => {
42
+ class PrimaryInterceptor extends Interceptor<{ hello: [string] }> {
43
+ constructor() {
44
+ super(Symbol('primary'))
45
+ }
46
+ }
47
+
48
+ class SecondaryInterceptor extends Interceptor<{
49
+ goodbye: [string]
50
+ }> {
51
+ constructor() {
52
+ super(Symbol('secondary'))
53
+ }
54
+ }
55
+
56
+ const instances = {
57
+ primary: new PrimaryInterceptor(),
58
+ secondary: new SecondaryInterceptor(),
59
+ }
60
+
61
+ const interceptor = new BatchInterceptor({
62
+ name: 'batch-proxy',
63
+ interceptors: [instances.primary, instances.secondary],
64
+ })
65
+
66
+ const helloListener = vi.fn()
67
+ interceptor.on('hello', helloListener)
68
+
69
+ const goodbyeListener = vi.fn()
70
+ interceptor.on('goodbye', goodbyeListener)
71
+
72
+ // Emulate the child interceptor emitting events.
73
+ instances.primary['emitter'].emit('hello', 'John')
74
+ instances.secondary['emitter'].emit('goodbye', 'Kate')
75
+
76
+ // Must call the batch interceptor listener.
77
+ expect(helloListener).toHaveBeenCalledTimes(1)
78
+ expect(helloListener).toHaveBeenCalledWith('John')
79
+ expect(goodbyeListener).toHaveBeenCalledTimes(1)
80
+ expect(goodbyeListener).toHaveBeenCalledWith('Kate')
81
+ })
82
+
83
+ it('disposes of child interceptors', async () => {
84
+ class PrimaryInterceptor extends Interceptor<any> {
85
+ constructor() {
86
+ super(Symbol('primary'))
87
+ }
88
+ }
89
+
90
+ class SecondaryInterceptor extends Interceptor<any> {
91
+ constructor() {
92
+ super(Symbol('secondary'))
93
+ }
94
+ }
95
+
96
+ const instances = {
97
+ primary: new PrimaryInterceptor(),
98
+ secondary: new SecondaryInterceptor(),
99
+ }
100
+
101
+ const interceptor = new BatchInterceptor({
102
+ name: 'batch-dispose',
103
+ interceptors: [instances.primary, instances.secondary],
104
+ })
105
+
106
+ const primaryDisposeSpy = vi.spyOn(instances.primary, 'dispose')
107
+ const secondaryDisposeSpy = vi.spyOn(instances.secondary, 'dispose')
108
+
109
+ interceptor.apply()
110
+ interceptor.dispose()
111
+
112
+ expect(primaryDisposeSpy).toHaveBeenCalledTimes(1)
113
+ expect(secondaryDisposeSpy).toHaveBeenCalledTimes(1)
114
+ })
115
+
116
+ it('forwards listeners added via "on()"', () => {
117
+ class FirstInterceptor extends Interceptor<any> {
118
+ constructor() {
119
+ super(Symbol('first'))
120
+ }
121
+ }
122
+ class SecondaryInterceptor extends Interceptor<any> {
123
+ constructor() {
124
+ super(Symbol('second'))
125
+ }
126
+ }
127
+
128
+ const firstInterceptor = new FirstInterceptor()
129
+ const secondInterceptor = new SecondaryInterceptor()
130
+
131
+ const interceptor = new BatchInterceptor({
132
+ name: 'batch',
133
+ interceptors: [firstInterceptor, secondInterceptor],
134
+ })
135
+
136
+ const listener = vi.fn()
137
+ interceptor.on('foo', listener)
138
+
139
+ expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(1)
140
+ expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(1)
141
+ expect(interceptor['emitter'].listenerCount('foo')).toBe(0)
142
+ })
143
+
144
+ it('forwards listeners removal via "off()"', () => {
145
+ type Events = {
146
+ foo: []
147
+ }
148
+
149
+ class FirstInterceptor extends Interceptor<Events> {
150
+ constructor() {
151
+ super(Symbol('first'))
152
+ }
153
+ }
154
+ class SecondaryInterceptor extends Interceptor<Events> {
155
+ constructor() {
156
+ super(Symbol('second'))
157
+ }
158
+ }
159
+
160
+ const firstInterceptor = new FirstInterceptor()
161
+ const secondInterceptor = new SecondaryInterceptor()
162
+
163
+ const interceptor = new BatchInterceptor({
164
+ name: 'batch',
165
+ interceptors: [firstInterceptor, secondInterceptor],
166
+ })
167
+
168
+ const listener = vi.fn()
169
+ interceptor.on('foo', listener)
170
+ interceptor.off('foo', listener)
171
+
172
+ expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(0)
173
+ expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(0)
174
+ })
175
+
176
+ it('forwards removal of all listeners by name via ".removeAllListeners()"', () => {
177
+ type Events = {
178
+ foo: []
179
+ bar: []
180
+ }
181
+
182
+ class FirstInterceptor extends Interceptor<Events> {
183
+ constructor() {
184
+ super(Symbol('first'))
185
+ }
186
+ }
187
+ class SecondaryInterceptor extends Interceptor<Events> {
188
+ constructor() {
189
+ super(Symbol('second'))
190
+ }
191
+ }
192
+
193
+ const firstInterceptor = new FirstInterceptor()
194
+ const secondInterceptor = new SecondaryInterceptor()
195
+
196
+ const interceptor = new BatchInterceptor({
197
+ name: 'batch',
198
+ interceptors: [firstInterceptor, secondInterceptor],
199
+ })
200
+
201
+ const listener = vi.fn()
202
+ interceptor.on('foo', listener)
203
+ interceptor.on('foo', listener)
204
+ interceptor.on('bar', listener)
205
+
206
+ expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(2)
207
+ expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(2)
208
+ expect(firstInterceptor['emitter'].listenerCount('bar')).toBe(1)
209
+ expect(secondInterceptor['emitter'].listenerCount('bar')).toBe(1)
210
+
211
+ interceptor.removeAllListeners('foo')
212
+
213
+ expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(0)
214
+ expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(0)
215
+ expect(firstInterceptor['emitter'].listenerCount('bar')).toBe(1)
216
+ expect(secondInterceptor['emitter'].listenerCount('bar')).toBe(1)
217
+ })
218
+
219
+ it('forwards removal of all listeners via ".removeAllListeners()"', () => {
220
+ class FirstInterceptor extends Interceptor<any> {
221
+ constructor() {
222
+ super(Symbol('first'))
223
+ }
224
+ }
225
+ class SecondaryInterceptor extends Interceptor<any> {
226
+ constructor() {
227
+ super(Symbol('second'))
228
+ }
229
+ }
230
+
231
+ const firstInterceptor = new FirstInterceptor()
232
+ const secondInterceptor = new SecondaryInterceptor()
233
+
234
+ const interceptor = new BatchInterceptor({
235
+ name: 'batch',
236
+ interceptors: [firstInterceptor, secondInterceptor],
237
+ })
238
+
239
+ const listener = vi.fn()
240
+ interceptor.on('foo', listener)
241
+ interceptor.on('foo', listener)
242
+ interceptor.on('bar', listener)
243
+
244
+ expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(2)
245
+ expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(2)
246
+ expect(firstInterceptor['emitter'].listenerCount('bar')).toBe(1)
247
+ expect(secondInterceptor['emitter'].listenerCount('bar')).toBe(1)
248
+
249
+ interceptor.removeAllListeners()
250
+
251
+ expect(firstInterceptor['emitter'].listenerCount('foo')).toBe(0)
252
+ expect(secondInterceptor['emitter'].listenerCount('foo')).toBe(0)
253
+ expect(firstInterceptor['emitter'].listenerCount('bar')).toBe(0)
254
+ expect(secondInterceptor['emitter'].listenerCount('bar')).toBe(0)
255
+ })
@@ -0,0 +1,95 @@
1
+ import { EventMap, Listener } from 'strict-event-emitter'
2
+ import { Interceptor, ExtractEventNames } from './Interceptor'
3
+
4
+ export interface BatchInterceptorOptions<
5
+ InterceptorList extends ReadonlyArray<Interceptor<any>>
6
+ > {
7
+ name: string
8
+ interceptors: InterceptorList
9
+ }
10
+
11
+ export type ExtractEventMapType<
12
+ InterceptorList extends ReadonlyArray<Interceptor<any>>
13
+ > = InterceptorList extends ReadonlyArray<infer InterceptorType>
14
+ ? InterceptorType extends Interceptor<infer EventMap>
15
+ ? EventMap
16
+ : never
17
+ : never
18
+
19
+ /**
20
+ * A batch interceptor that exposes a single interface
21
+ * to apply and operate with multiple interceptors at once.
22
+ */
23
+ export class BatchInterceptor<
24
+ InterceptorList extends ReadonlyArray<Interceptor<any>>,
25
+ Events extends EventMap = ExtractEventMapType<InterceptorList>
26
+ > extends Interceptor<Events> {
27
+ static symbol: symbol
28
+
29
+ private interceptors: InterceptorList
30
+
31
+ constructor(options: BatchInterceptorOptions<InterceptorList>) {
32
+ BatchInterceptor.symbol = Symbol(options.name)
33
+ super(BatchInterceptor.symbol)
34
+ this.interceptors = options.interceptors
35
+ }
36
+
37
+ protected setup() {
38
+ const logger = this.logger.extend('setup')
39
+
40
+ logger.info('applying all %d interceptors...', this.interceptors.length)
41
+
42
+ for (const interceptor of this.interceptors) {
43
+ logger.info('applying "%s" interceptor...', interceptor.constructor.name)
44
+ interceptor.apply()
45
+
46
+ logger.info('adding interceptor dispose subscription')
47
+ this.subscriptions.push(() => interceptor.dispose())
48
+ }
49
+ }
50
+
51
+ public on<EventName extends ExtractEventNames<Events>>(
52
+ event: EventName,
53
+ listener: Listener<Events[EventName]>
54
+ ): this {
55
+ // Instead of adding a listener to the batch interceptor,
56
+ // propagate the listener to each of the individual interceptors.
57
+ for (const interceptor of this.interceptors) {
58
+ interceptor.on(event, listener)
59
+ }
60
+
61
+ return this
62
+ }
63
+
64
+ public once<EventName extends ExtractEventNames<Events>>(
65
+ event: EventName,
66
+ listener: Listener<Events[EventName]>
67
+ ): this {
68
+ for (const interceptor of this.interceptors) {
69
+ interceptor.once(event, listener)
70
+ }
71
+
72
+ return this
73
+ }
74
+
75
+ public off<EventName extends ExtractEventNames<Events>>(
76
+ event: EventName,
77
+ listener: Listener<Events[EventName]>
78
+ ): this {
79
+ for (const interceptor of this.interceptors) {
80
+ interceptor.off(event, listener)
81
+ }
82
+
83
+ return this
84
+ }
85
+
86
+ public removeAllListeners<EventName extends ExtractEventNames<Events>>(
87
+ event?: EventName | undefined
88
+ ): this {
89
+ for (const interceptors of this.interceptors) {
90
+ interceptors.removeAllListeners(event)
91
+ }
92
+
93
+ return this
94
+ }
95
+ }