@mswjs/interceptors 0.41.9 → 0.42.1

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 (335) hide show
  1. package/README.md +274 -228
  2. package/lib/browser/{bufferUtils-BiiO6HZv.mjs → buffer-utils-DJj7YzLG.js} +3 -3
  3. package/lib/browser/buffer-utils-DJj7YzLG.js.map +1 -0
  4. package/lib/browser/create-request-id-Bk5YX1AM.js +720 -0
  5. package/lib/browser/create-request-id-Bk5YX1AM.js.map +1 -0
  6. package/lib/browser/{getRawRequest-B1BqgWG6.mjs → fetch-utils-CUOrwEQf.js} +123 -52
  7. package/lib/browser/fetch-utils-CUOrwEQf.js.map +1 -0
  8. package/lib/browser/handle-request-CqVvBhcw.js +167 -0
  9. package/lib/browser/handle-request-CqVvBhcw.js.map +1 -0
  10. package/lib/{node/hasConfigurableGlobal-BiTmog1u.mjs → browser/has-configurable-global-Cew-dYqk.js} +5 -7
  11. package/lib/browser/has-configurable-global-Cew-dYqk.js.map +1 -0
  12. package/lib/browser/http-CB9rQ7i_.d.ts +105 -0
  13. package/lib/browser/{index.d.cts → index.d.ts} +33 -38
  14. package/lib/browser/index.js +130 -0
  15. package/lib/browser/index.js.map +1 -0
  16. package/lib/browser/interceptor-dtJZ_9QT.d.ts +50 -0
  17. package/lib/browser/interceptors/WebSocket/index.d.ts +2 -0
  18. package/lib/browser/interceptors/WebSocket/{index.mjs → index.js} +39 -30
  19. package/lib/browser/interceptors/WebSocket/index.js.map +1 -0
  20. package/lib/browser/interceptors/XMLHttpRequest/web.d.ts +11 -0
  21. package/lib/browser/interceptors/XMLHttpRequest/web.js +2 -0
  22. package/lib/browser/interceptors/fetch/web.d.ts +14 -0
  23. package/lib/browser/interceptors/fetch/web.js +2 -0
  24. package/lib/browser/presets/browser.d.ts +11 -0
  25. package/lib/browser/presets/browser.js +12 -0
  26. package/lib/browser/presets/browser.js.map +1 -0
  27. package/lib/browser/{resolveWebSocketUrl-C83-x9iE.mjs → resolve-web-socket-url-CSvNPLGi.js} +3 -3
  28. package/lib/browser/resolve-web-socket-url-CSvNPLGi.js.map +1 -0
  29. package/lib/browser/{XMLHttpRequest-DrZAf3w6.mjs → web-BcKSQghf.js} +327 -255
  30. package/lib/browser/web-BcKSQghf.js.map +1 -0
  31. package/lib/browser/web-CdcYFjgm.js +248 -0
  32. package/lib/browser/web-CdcYFjgm.js.map +1 -0
  33. package/lib/browser/{interceptors/WebSocket/index.d.cts → websocket-CC0nB0md.d.ts} +41 -33
  34. package/lib/node/batch-interceptor-ByEZVih3.js +119 -0
  35. package/lib/node/batch-interceptor-ByEZVih3.js.map +1 -0
  36. package/lib/node/batch-interceptor-CPjFK2td.d.ts +28 -0
  37. package/lib/node/buffer-utils-BvPY1Tc-.js +187 -0
  38. package/lib/node/buffer-utils-BvPY1Tc-.js.map +1 -0
  39. package/lib/node/fetch-utils-Dw1PsmtX.js +568 -0
  40. package/lib/node/fetch-utils-Dw1PsmtX.js.map +1 -0
  41. package/lib/node/has-configurable-global-CJCh_g1I.js +22 -0
  42. package/lib/node/has-configurable-global-CJCh_g1I.js.map +1 -0
  43. package/lib/node/http-CB9rQ7i_.d.ts +105 -0
  44. package/lib/{browser/interceptors/WebSocket/index.d.mts → node/index.d.ts} +120 -60
  45. package/lib/node/{index.mjs → index.js} +8 -11
  46. package/lib/node/index.js.map +1 -0
  47. package/lib/node/interceptor-dtJZ_9QT.d.ts +50 -0
  48. package/lib/node/interceptors/ClientRequest/index.d.ts +14 -0
  49. package/lib/node/interceptors/ClientRequest/index.js +67 -0
  50. package/lib/node/interceptors/ClientRequest/index.js.map +1 -0
  51. package/lib/node/interceptors/XMLHttpRequest/node.d.ts +12 -0
  52. package/lib/node/interceptors/XMLHttpRequest/node.js +74 -0
  53. package/lib/node/interceptors/XMLHttpRequest/node.js.map +1 -0
  54. package/lib/node/interceptors/fetch/node.d.ts +18 -0
  55. package/lib/node/interceptors/fetch/node.js +83 -0
  56. package/lib/node/interceptors/fetch/node.js.map +1 -0
  57. package/lib/node/interceptors/http/index.d.ts +14 -0
  58. package/lib/node/interceptors/http/index.js +32 -0
  59. package/lib/node/interceptors/http/index.js.map +1 -0
  60. package/lib/node/interceptors/net/index.d.ts +203 -0
  61. package/lib/node/interceptors/net/index.js +2 -0
  62. package/lib/node/llhttp/constants.cjs +485 -0
  63. package/lib/node/llhttp/constants.d.cts +957 -0
  64. package/lib/node/llhttp/llhttp.wasm +0 -0
  65. package/lib/node/net-DtMnyEeg.js +1388 -0
  66. package/lib/node/net-DtMnyEeg.js.map +1 -0
  67. package/lib/node/presets/node.d.ts +12 -0
  68. package/lib/node/presets/node.js +17 -0
  69. package/lib/node/presets/node.js.map +1 -0
  70. package/lib/node/{RemoteHttpInterceptor.d.cts → remote-http-interceptor.d.ts} +12 -11
  71. package/lib/node/{RemoteHttpInterceptor.mjs → remote-http-interceptor.js} +38 -33
  72. package/lib/node/remote-http-interceptor.js.map +1 -0
  73. package/lib/node/source-lP0yyEtA.js +1990 -0
  74. package/lib/node/source-lP0yyEtA.js.map +1 -0
  75. package/package.json +79 -118
  76. package/src/batch-interceptor.test.ts +475 -0
  77. package/src/batch-interceptor.ts +244 -0
  78. package/src/{createRequestId.test.ts → create-request-id.test.ts} +1 -2
  79. package/src/disposable.ts +13 -0
  80. package/src/events/http.ts +92 -0
  81. package/src/events/websocket.ts +47 -0
  82. package/src/glossary.ts +1 -27
  83. package/src/index.ts +18 -10
  84. package/src/interceptor.test.ts +279 -0
  85. package/src/interceptor.ts +139 -0
  86. package/src/interceptors/ClientRequest/index.test.ts +21 -39
  87. package/src/interceptors/ClientRequest/index.ts +64 -179
  88. package/src/interceptors/ClientRequest/utils/{recordRawHeaders.test.ts → record-raw-headers.test.ts} +1 -2
  89. package/src/interceptors/ClientRequest/utils/{recordRawHeaders.ts → record-raw-headers.ts} +29 -2
  90. package/src/interceptors/WebSocket/index.ts +33 -50
  91. package/src/interceptors/WebSocket/utils/{bindEvent.test.ts → bind-event.test.ts} +1 -2
  92. package/src/interceptors/WebSocket/utils/events.test.ts +0 -1
  93. package/src/interceptors/WebSocket/{WebSocketClassTransport.ts → web-socket-class-transport.ts} +3 -3
  94. package/src/interceptors/WebSocket/{WebSocketClientConnection.ts → web-socket-client-connection.ts} +4 -4
  95. package/src/interceptors/WebSocket/{WebSocketOverride.ts → web-socket-override.ts} +6 -7
  96. package/src/interceptors/WebSocket/{WebSocketServerConnection.ts → web-socket-server-connection.ts} +4 -4
  97. package/src/interceptors/WebSocket/{WebSocketTransport.ts → web-socket-transport.ts} +1 -1
  98. package/src/interceptors/XMLHttpRequest/node.ts +104 -0
  99. package/src/interceptors/XMLHttpRequest/polyfills/{ProgressEventPolyfill.ts → progress-event-polyfill.ts} +1 -1
  100. package/src/interceptors/XMLHttpRequest/utils/{concateArrayBuffer.test.ts → concat-array-buffer.test.ts} +1 -2
  101. package/src/interceptors/XMLHttpRequest/utils/{concatArrayBuffer.ts → concat-array-buffer.ts} +1 -1
  102. package/src/interceptors/XMLHttpRequest/utils/{createEvent.test.ts → create-event.test.ts} +3 -4
  103. package/src/interceptors/XMLHttpRequest/utils/{createEvent.ts → create-event.ts} +2 -2
  104. package/src/interceptors/XMLHttpRequest/utils/{createResponse.ts → create-response.ts} +1 -1
  105. package/src/interceptors/XMLHttpRequest/utils/{getBodyByteLength.test.ts → get-body-byte-length.test.ts} +1 -2
  106. package/src/interceptors/XMLHttpRequest/web.ts +34 -0
  107. package/src/interceptors/XMLHttpRequest/{XMLHttpRequestController.ts → xml-http-request-controller.ts} +363 -204
  108. package/src/interceptors/XMLHttpRequest/{XMLHttpRequestProxy.ts → xml-http-request-proxy.ts} +28 -25
  109. package/src/interceptors/fetch/node.ts +103 -0
  110. package/src/interceptors/fetch/utils/{followRedirect.ts → follow-redirect.ts} +1 -1
  111. package/src/interceptors/fetch/web.ts +217 -0
  112. package/src/interceptors/http/forward-events.test.ts +86 -0
  113. package/src/interceptors/http/forward-events.ts +139 -0
  114. package/src/interceptors/http/http-parser/index.ts +310 -0
  115. package/src/interceptors/http/http-parser/llhttp/constants.cjs +485 -0
  116. package/src/interceptors/http/http-parser/llhttp/constants.d.cts +957 -0
  117. package/src/interceptors/http/http-parser/llhttp/llhttp.wasm +0 -0
  118. package/src/interceptors/http/http-parser.ts +138 -0
  119. package/src/interceptors/http/index.ts +34 -0
  120. package/src/interceptors/http/source.ts +688 -0
  121. package/src/interceptors/net/index.ts +368 -0
  122. package/src/interceptors/net/socket-controller.ts +1476 -0
  123. package/src/interceptors/net/utils/address-info.ts +54 -0
  124. package/src/interceptors/net/utils/connection-options-to-url.ts +56 -0
  125. package/src/interceptors/net/utils/flush-writes.ts +57 -0
  126. package/src/interceptors/net/utils/get-tls-connect-options.ts +23 -0
  127. package/src/interceptors/net/utils/normalize-net-connect-args.test.ts +233 -0
  128. package/src/interceptors/net/utils/normalize-net-connect-args.ts +121 -0
  129. package/src/interceptors/net/utils/normalize-tls-connect-args.ts +50 -0
  130. package/src/presets/browser.ts +4 -4
  131. package/src/presets/node.ts +4 -4
  132. package/src/{RemoteHttpInterceptor.ts → remote-http-interceptor.ts} +55 -42
  133. package/src/request-context.ts +40 -0
  134. package/src/{RequestController.test.ts → request-controller.test.ts} +37 -3
  135. package/src/{RequestController.ts → request-controller.ts} +33 -11
  136. package/src/utils/{bufferUtils.test.ts → buffer-utils.test.ts} +1 -2
  137. package/src/utils/buffer-utils.ts +37 -0
  138. package/src/utils/{cloneObject.test.ts → clone-object.test.ts} +1 -2
  139. package/src/utils/{cloneObject.ts → clone-object.ts} +8 -8
  140. package/src/utils/{createProxy.test.ts → create-proxy.test.ts} +6 -4
  141. package/src/utils/{createProxy.ts → create-proxy.ts} +1 -1
  142. package/src/utils/{fetchUtils.test.ts → fetch-utils.test.ts} +1 -1
  143. package/src/utils/{fetchUtils.ts → fetch-utils.ts} +28 -3
  144. package/src/utils/{findPropertySource.test.ts → find-property-source.test.ts} +1 -2
  145. package/src/utils/{getCleanUrl.test.ts → get-clean-url.test.ts} +1 -2
  146. package/src/utils/{getUrlByRequestOptions.test.ts → get-url-by-request-options.test.ts} +4 -8
  147. package/src/utils/{getUrlByRequestOptions.ts → get-url-by-request-options.ts} +16 -16
  148. package/src/utils/{getValueBySymbol.test.ts → get-value-by-symbol.test.ts} +1 -2
  149. package/src/utils/{handleRequest.ts → handle-request.ts} +61 -41
  150. package/src/utils/{hasConfigurableGlobal.test.ts → has-configurable-global.test.ts} +1 -2
  151. package/src/utils/{hasConfigurableGlobal.ts → has-configurable-global.ts} +2 -4
  152. package/src/utils/{isObject.test.ts → is-object.test.ts} +1 -2
  153. package/src/utils/logger.test.ts +154 -0
  154. package/src/utils/logger.ts +154 -0
  155. package/src/utils/{parseJson.test.ts → parse-json.test.ts} +1 -2
  156. package/src/utils/{patchesRegistry.test.ts → patches-registry.test.ts} +1 -1
  157. package/src/utils/{patchesRegistry.ts → patches-registry.ts} +1 -1
  158. package/src/utils/{responseUtils.ts → response-utils.ts} +25 -2
  159. package/ClientRequest/package.json +0 -11
  160. package/RemoteHttpInterceptor/package.json +0 -11
  161. package/WebSocket/package.json +0 -12
  162. package/XMLHttpRequest/package.json +0 -12
  163. package/fetch/package.json +0 -12
  164. package/lib/browser/Interceptor-Deczogc8.d.cts +0 -65
  165. package/lib/browser/Interceptor-gqKgs-aF.d.mts +0 -65
  166. package/lib/browser/XMLHttpRequest-DrZAf3w6.mjs.map +0 -1
  167. package/lib/browser/XMLHttpRequest-gXuzzX1g.cjs +0 -751
  168. package/lib/browser/XMLHttpRequest-gXuzzX1g.cjs.map +0 -1
  169. package/lib/browser/bufferUtils-BiiO6HZv.mjs.map +0 -1
  170. package/lib/browser/bufferUtils-Uc0eRItL.cjs +0 -38
  171. package/lib/browser/bufferUtils-Uc0eRItL.cjs.map +0 -1
  172. package/lib/browser/createRequestId-DOf8Ktjs.cjs +0 -205
  173. package/lib/browser/createRequestId-DOf8Ktjs.cjs.map +0 -1
  174. package/lib/browser/createRequestId-DYCsFHOi.mjs +0 -170
  175. package/lib/browser/createRequestId-DYCsFHOi.mjs.map +0 -1
  176. package/lib/browser/fetch-5IMPqr9e.mjs +0 -236
  177. package/lib/browser/fetch-5IMPqr9e.mjs.map +0 -1
  178. package/lib/browser/fetch-Bt9rMY9c.cjs +0 -241
  179. package/lib/browser/fetch-Bt9rMY9c.cjs.map +0 -1
  180. package/lib/browser/getRawRequest-B1BqgWG6.mjs.map +0 -1
  181. package/lib/browser/getRawRequest-DdfaiPVH.cjs +0 -376
  182. package/lib/browser/getRawRequest-DdfaiPVH.cjs.map +0 -1
  183. package/lib/browser/glossary-1lhZx6Aw.d.cts +0 -69
  184. package/lib/browser/glossary-nkHWcwvY.d.mts +0 -69
  185. package/lib/browser/handleRequest-CJim54xG.cjs +0 -191
  186. package/lib/browser/handleRequest-CJim54xG.cjs.map +0 -1
  187. package/lib/browser/handleRequest-CPPgsG7s.mjs +0 -180
  188. package/lib/browser/handleRequest-CPPgsG7s.mjs.map +0 -1
  189. package/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs +0 -109
  190. package/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs.map +0 -1
  191. package/lib/browser/hasConfigurableGlobal-CS7adEvV.cjs +0 -126
  192. package/lib/browser/hasConfigurableGlobal-CS7adEvV.cjs.map +0 -1
  193. package/lib/browser/index.cjs +0 -70
  194. package/lib/browser/index.cjs.map +0 -1
  195. package/lib/browser/index.d.mts +0 -125
  196. package/lib/browser/index.mjs +0 -56
  197. package/lib/browser/index.mjs.map +0 -1
  198. package/lib/browser/interceptors/WebSocket/index.cjs +0 -618
  199. package/lib/browser/interceptors/WebSocket/index.cjs.map +0 -1
  200. package/lib/browser/interceptors/WebSocket/index.mjs.map +0 -1
  201. package/lib/browser/interceptors/XMLHttpRequest/index.cjs +0 -8
  202. package/lib/browser/interceptors/XMLHttpRequest/index.d.cts +0 -15
  203. package/lib/browser/interceptors/XMLHttpRequest/index.d.mts +0 -15
  204. package/lib/browser/interceptors/XMLHttpRequest/index.mjs +0 -8
  205. package/lib/browser/interceptors/fetch/index.cjs +0 -7
  206. package/lib/browser/interceptors/fetch/index.d.cts +0 -13
  207. package/lib/browser/interceptors/fetch/index.d.mts +0 -13
  208. package/lib/browser/interceptors/fetch/index.mjs +0 -7
  209. package/lib/browser/presets/browser.cjs +0 -18
  210. package/lib/browser/presets/browser.cjs.map +0 -1
  211. package/lib/browser/presets/browser.d.cts +0 -12
  212. package/lib/browser/presets/browser.d.mts +0 -14
  213. package/lib/browser/presets/browser.mjs +0 -18
  214. package/lib/browser/presets/browser.mjs.map +0 -1
  215. package/lib/browser/resolveWebSocketUrl-6K6EgqsA.cjs +0 -31
  216. package/lib/browser/resolveWebSocketUrl-6K6EgqsA.cjs.map +0 -1
  217. package/lib/browser/resolveWebSocketUrl-C83-x9iE.mjs.map +0 -1
  218. package/lib/node/BatchInterceptor-BGhH8z1z.cjs +0 -49
  219. package/lib/node/BatchInterceptor-BGhH8z1z.cjs.map +0 -1
  220. package/lib/node/BatchInterceptor-C4-RX5rg.mjs +0 -44
  221. package/lib/node/BatchInterceptor-C4-RX5rg.mjs.map +0 -1
  222. package/lib/node/BatchInterceptor-KKF8Q47I.d.cts +0 -26
  223. package/lib/node/BatchInterceptor-rSr-NH_H.d.mts +0 -26
  224. package/lib/node/ClientRequest-2loAH7xM.cjs +0 -1058
  225. package/lib/node/ClientRequest-2loAH7xM.cjs.map +0 -1
  226. package/lib/node/ClientRequest-DGhBX21V.mjs +0 -1049
  227. package/lib/node/ClientRequest-DGhBX21V.mjs.map +0 -1
  228. package/lib/node/Interceptor-BsZ21ue0.d.cts +0 -132
  229. package/lib/node/Interceptor-soD-WpQO.d.mts +0 -132
  230. package/lib/node/RemoteHttpInterceptor.cjs +0 -155
  231. package/lib/node/RemoteHttpInterceptor.cjs.map +0 -1
  232. package/lib/node/RemoteHttpInterceptor.d.mts +0 -39
  233. package/lib/node/RemoteHttpInterceptor.mjs.map +0 -1
  234. package/lib/node/XMLHttpRequest-BtDNZipW.cjs +0 -752
  235. package/lib/node/XMLHttpRequest-BtDNZipW.cjs.map +0 -1
  236. package/lib/node/XMLHttpRequest-Dw6Wm-UU.mjs +0 -746
  237. package/lib/node/XMLHttpRequest-Dw6Wm-UU.mjs.map +0 -1
  238. package/lib/node/bufferUtils-DxPxwff_.mjs +0 -20
  239. package/lib/node/bufferUtils-DxPxwff_.mjs.map +0 -1
  240. package/lib/node/bufferUtils-S5_-2eN4.cjs +0 -38
  241. package/lib/node/bufferUtils-S5_-2eN4.cjs.map +0 -1
  242. package/lib/node/chunk-CbDLau6x.cjs +0 -34
  243. package/lib/node/fetch-CaC3rGEu.mjs +0 -252
  244. package/lib/node/fetch-CaC3rGEu.mjs.map +0 -1
  245. package/lib/node/fetch-D2ClLNN-.cjs +0 -259
  246. package/lib/node/fetch-D2ClLNN-.cjs.map +0 -1
  247. package/lib/node/fetchUtils-BKJ1XmiO.mjs +0 -480
  248. package/lib/node/fetchUtils-BKJ1XmiO.mjs.map +0 -1
  249. package/lib/node/fetchUtils-umV5xXBy.cjs +0 -546
  250. package/lib/node/fetchUtils-umV5xXBy.cjs.map +0 -1
  251. package/lib/node/getRawRequest-B6znU6il.cjs +0 -36
  252. package/lib/node/getRawRequest-B6znU6il.cjs.map +0 -1
  253. package/lib/node/getRawRequest-C2-1urzA.mjs +0 -24
  254. package/lib/node/getRawRequest-C2-1urzA.mjs.map +0 -1
  255. package/lib/node/handleRequest-C-cKYjIh.cjs +0 -222
  256. package/lib/node/handleRequest-C-cKYjIh.cjs.map +0 -1
  257. package/lib/node/handleRequest-FIQv5pwH.mjs +0 -192
  258. package/lib/node/handleRequest-FIQv5pwH.mjs.map +0 -1
  259. package/lib/node/hasConfigurableGlobal-BiTmog1u.mjs.map +0 -1
  260. package/lib/node/hasConfigurableGlobal-MjY06_Ok.cjs +0 -108
  261. package/lib/node/hasConfigurableGlobal-MjY06_Ok.cjs.map +0 -1
  262. package/lib/node/index-BJ5E5aW-.d.cts +0 -113
  263. package/lib/node/index-DfoF45ih.d.mts +0 -113
  264. package/lib/node/index.cjs +0 -53
  265. package/lib/node/index.cjs.map +0 -1
  266. package/lib/node/index.d.cts +0 -104
  267. package/lib/node/index.d.mts +0 -104
  268. package/lib/node/index.mjs.map +0 -1
  269. package/lib/node/interceptors/ClientRequest/index.cjs +0 -6
  270. package/lib/node/interceptors/ClientRequest/index.d.cts +0 -2
  271. package/lib/node/interceptors/ClientRequest/index.d.mts +0 -3
  272. package/lib/node/interceptors/ClientRequest/index.mjs +0 -6
  273. package/lib/node/interceptors/XMLHttpRequest/index.cjs +0 -7
  274. package/lib/node/interceptors/XMLHttpRequest/index.d.cts +0 -14
  275. package/lib/node/interceptors/XMLHttpRequest/index.d.mts +0 -14
  276. package/lib/node/interceptors/XMLHttpRequest/index.mjs +0 -7
  277. package/lib/node/interceptors/fetch/index.cjs +0 -6
  278. package/lib/node/interceptors/fetch/index.d.cts +0 -12
  279. package/lib/node/interceptors/fetch/index.d.mts +0 -12
  280. package/lib/node/interceptors/fetch/index.mjs +0 -6
  281. package/lib/node/node-DIKcnzhK.cjs +0 -39
  282. package/lib/node/node-DIKcnzhK.cjs.map +0 -1
  283. package/lib/node/node-lsdNwZEW.mjs +0 -27
  284. package/lib/node/node-lsdNwZEW.mjs.map +0 -1
  285. package/lib/node/presets/node.cjs +0 -23
  286. package/lib/node/presets/node.cjs.map +0 -1
  287. package/lib/node/presets/node.d.cts +0 -13
  288. package/lib/node/presets/node.d.mts +0 -15
  289. package/lib/node/presets/node.mjs +0 -23
  290. package/lib/node/presets/node.mjs.map +0 -1
  291. package/lib/node/utils/node/index.cjs +0 -4
  292. package/lib/node/utils/node/index.d.cts +0 -16
  293. package/lib/node/utils/node/index.d.mts +0 -16
  294. package/lib/node/utils/node/index.mjs +0 -3
  295. package/presets/browser/package.json +0 -5
  296. package/presets/node/package.json +0 -11
  297. package/src/BatchInterceptor.test.ts +0 -255
  298. package/src/BatchInterceptor.ts +0 -96
  299. package/src/Interceptor.test.ts +0 -205
  300. package/src/Interceptor.ts +0 -249
  301. package/src/getRawRequest.ts +0 -21
  302. package/src/interceptors/ClientRequest/MockHttpSocket.ts +0 -724
  303. package/src/interceptors/ClientRequest/agents.ts +0 -110
  304. package/src/interceptors/ClientRequest/utils/getIncomingMessageBody.test.ts +0 -54
  305. package/src/interceptors/ClientRequest/utils/getIncomingMessageBody.ts +0 -45
  306. package/src/interceptors/ClientRequest/utils/normalizeClientRequestArgs.test.ts +0 -427
  307. package/src/interceptors/ClientRequest/utils/normalizeClientRequestArgs.ts +0 -268
  308. package/src/interceptors/ClientRequest/utils/parserUtils.ts +0 -48
  309. package/src/interceptors/Socket/MockSocket.test.ts +0 -264
  310. package/src/interceptors/Socket/MockSocket.ts +0 -58
  311. package/src/interceptors/Socket/utils/baseUrlFromConnectionOptions.ts +0 -26
  312. package/src/interceptors/Socket/utils/normalizeSocketWriteArgs.test.ts +0 -52
  313. package/src/interceptors/Socket/utils/normalizeSocketWriteArgs.ts +0 -33
  314. package/src/interceptors/XMLHttpRequest/index.ts +0 -40
  315. package/src/interceptors/fetch/index.ts +0 -203
  316. package/src/utils/bufferUtils.ts +0 -22
  317. package/src/utils/canParseUrl.ts +0 -13
  318. package/src/utils/emitAsync.ts +0 -25
  319. package/src/utils/nextTick.ts +0 -11
  320. package/src/utils/node/index.ts +0 -39
  321. /package/src/{createRequestId.ts → create-request-id.ts} +0 -0
  322. /package/src/{InterceptorError.ts → interceptor-error.ts} +0 -0
  323. /package/src/interceptors/WebSocket/utils/{bindEvent.ts → bind-event.ts} +0 -0
  324. /package/src/interceptors/XMLHttpRequest/polyfills/{EventPolyfill.ts → event-polyfill.ts} +0 -0
  325. /package/src/interceptors/XMLHttpRequest/utils/{getBodyByteLength.ts → get-body-byte-length.ts} +0 -0
  326. /package/src/interceptors/XMLHttpRequest/utils/{isDomParserSupportedType.ts → is-dom-parser-supported-type.ts} +0 -0
  327. /package/src/interceptors/fetch/utils/{createNetworkError.ts → create-network-error.ts} +0 -0
  328. /package/src/utils/{findPropertySource.ts → find-property-source.ts} +0 -0
  329. /package/src/utils/{getCleanUrl.ts → get-clean-url.ts} +0 -0
  330. /package/src/utils/{getValueBySymbol.ts → get-value-by-symbol.ts} +0 -0
  331. /package/src/utils/{isNodeLikeError.ts → is-node-like-error.ts} +0 -0
  332. /package/src/utils/{isObject.ts → is-object.ts} +0 -0
  333. /package/src/utils/{isPropertyAccessible.ts → is-property-accessible.ts} +0 -0
  334. /package/src/utils/{parseJson.ts → parse-json.ts} +0 -0
  335. /package/src/utils/{resolveWebSocketUrl.ts → resolve-web-socket-url.ts} +0 -0
@@ -1,205 +0,0 @@
1
- import { describe, vi, it, expect, afterEach } from 'vitest'
2
- import {
3
- Interceptor,
4
- getGlobalSymbol,
5
- deleteGlobalSymbol,
6
- InterceptorReadyState,
7
- } from './Interceptor'
8
- import { nextTickAsync } from './utils/nextTick'
9
-
10
- const symbol = Symbol('test')
11
-
12
- afterEach(() => {
13
- deleteGlobalSymbol(symbol)
14
- })
15
-
16
- it('does not set a maximum listeners limit', () => {
17
- const interceptor = new Interceptor(symbol)
18
- expect(interceptor['emitter'].getMaxListeners()).toBe(0)
19
- })
20
-
21
- describe('on()', () => {
22
- it('adds a new listener using "on()"', () => {
23
- const interceptor = new Interceptor(symbol)
24
- expect(interceptor['emitter'].listenerCount('event')).toBe(0)
25
-
26
- const listener = vi.fn()
27
- interceptor.on('event', listener)
28
- expect(interceptor['emitter'].listenerCount('event')).toBe(1)
29
- })
30
- })
31
-
32
- describe('once()', () => {
33
- it('calls the listener only once', () => {
34
- const interceptor = new Interceptor(symbol)
35
- const listener = vi.fn()
36
-
37
- interceptor.once('foo', listener)
38
- expect(listener).not.toHaveBeenCalled()
39
-
40
- interceptor['emitter'].emit('foo', 'bar')
41
-
42
- expect(listener).toHaveBeenCalledTimes(1)
43
- expect(listener).toHaveBeenCalledWith('bar')
44
-
45
- listener.mockReset()
46
-
47
- interceptor['emitter'].emit('foo', 'baz')
48
- interceptor['emitter'].emit('foo', 'xyz')
49
- expect(listener).toHaveBeenCalledTimes(0)
50
- })
51
- })
52
-
53
- describe('off()', () => {
54
- it('removes a listener using "off()"', () => {
55
- const interceptor = new Interceptor(symbol)
56
- expect(interceptor['emitter'].listenerCount('event')).toBe(0)
57
-
58
- const listener = vi.fn()
59
- interceptor.on('event', listener)
60
- expect(interceptor['emitter'].listenerCount('event')).toBe(1)
61
-
62
- interceptor.off('event', listener)
63
- expect(interceptor['emitter'].listenerCount('event')).toBe(0)
64
- })
65
- })
66
-
67
- describe('persistence', () => {
68
- it('stores global reference to the applied interceptor', () => {
69
- const interceptor = new Interceptor(symbol)
70
- interceptor.apply()
71
-
72
- expect(getGlobalSymbol(symbol)).toEqual(interceptor)
73
- })
74
-
75
- it('deletes global reference when the interceptor is disposed', () => {
76
- const interceptor = new Interceptor(symbol)
77
-
78
- interceptor.apply()
79
- interceptor.dispose()
80
-
81
- expect(getGlobalSymbol(symbol)).toBeUndefined()
82
- })
83
- })
84
-
85
- describe('readyState', () => {
86
- it('sets the state to "INACTIVE" when the interceptor is created', () => {
87
- const interceptor = new Interceptor(symbol)
88
- expect(interceptor.readyState).toBe(InterceptorReadyState.INACTIVE)
89
- })
90
-
91
- it('leaves state as "INACTIVE" if the interceptor failed the environment check', async () => {
92
- class MyInterceptor extends Interceptor<any> {
93
- protected checkEnvironment(): boolean {
94
- return false
95
- }
96
- }
97
- const interceptor = new MyInterceptor(symbol)
98
- interceptor.apply()
99
-
100
- expect(interceptor.readyState).toBe(InterceptorReadyState.INACTIVE)
101
- })
102
-
103
- it('performs state transition when the interceptor is applying', async () => {
104
- const interceptor = new Interceptor(symbol)
105
- interceptor.apply()
106
-
107
- // The interceptor's state transitions to APPLIED immediately.
108
- // The only exception is if something throws during the setup.
109
- expect(interceptor.readyState).toBe(InterceptorReadyState.APPLIED)
110
- })
111
-
112
- it('performs state transition when disposing of the interceptor', async () => {
113
- const interceptor = new Interceptor(symbol)
114
- interceptor.apply()
115
- interceptor.dispose()
116
-
117
- // The interceptor's state transitions to DISPOSED immediately.
118
- // The only exception is if something throws during the teardown.
119
- expect(interceptor.readyState).toBe(InterceptorReadyState.DISPOSED)
120
- })
121
- })
122
-
123
- describe('apply', () => {
124
- it('does not apply the same interceptor multiple times', () => {
125
- const interceptor = new Interceptor(symbol)
126
- const setupSpy = vi.spyOn(
127
- interceptor,
128
- // @ts-expect-error Protected property spy.
129
- 'setup'
130
- )
131
-
132
- // Intentionally apply the same interceptor multiple times.
133
- interceptor.apply()
134
- interceptor.apply()
135
- interceptor.apply()
136
-
137
- // The "setup" must not be called repeatedly.
138
- expect(setupSpy).toHaveBeenCalledTimes(1)
139
-
140
- expect(getGlobalSymbol(symbol)).toEqual(interceptor)
141
- })
142
-
143
- it('does not call "apply" if the interceptor fails environment check', () => {
144
- class MyInterceptor extends Interceptor<{}> {
145
- checkEnvironment() {
146
- return false
147
- }
148
- }
149
-
150
- const interceptor = new MyInterceptor(Symbol('test'))
151
- const setupSpy = vi.spyOn(
152
- interceptor,
153
- // @ts-expect-error Protected property spy.
154
- 'setup'
155
- )
156
- interceptor.apply()
157
-
158
- expect(setupSpy).not.toHaveBeenCalled()
159
- })
160
-
161
- it('proxies listeners from new interceptor to already running interceptor', () => {
162
- const firstInterceptor = new Interceptor(symbol)
163
- const secondInterceptor = new Interceptor(symbol)
164
-
165
- firstInterceptor.apply()
166
- const firstListener = vi.fn()
167
- firstInterceptor.on('test', firstListener)
168
-
169
- secondInterceptor.apply()
170
- const secondListener = vi.fn()
171
- secondInterceptor.on('test', secondListener)
172
-
173
- // Emitting event in the first interceptor will bubble to the second one.
174
- firstInterceptor['emitter'].emit('test', 'hello world')
175
-
176
- expect(firstListener).toHaveBeenCalledTimes(1)
177
- expect(firstListener).toHaveBeenCalledWith('hello world')
178
-
179
- expect(secondListener).toHaveBeenCalledTimes(1)
180
- expect(secondListener).toHaveBeenCalledWith('hello world')
181
-
182
- expect(secondInterceptor['emitter'].listenerCount('test')).toBe(0)
183
- })
184
- })
185
-
186
- describe('dispose', () => {
187
- it('removes all listeners when the interceptor is disposed', async () => {
188
- const interceptor = new Interceptor(symbol)
189
-
190
- interceptor.apply()
191
- const listener = vi.fn()
192
- interceptor.on('test', listener)
193
- interceptor.dispose()
194
-
195
- // Even after emitting an event, the listener must not get called.
196
- interceptor['emitter'].emit('test')
197
- expect(listener).not.toHaveBeenCalled()
198
-
199
- // The listener must not be called on the next tick either.
200
- await nextTickAsync(() => {
201
- interceptor['emitter'].emit('test')
202
- expect(listener).not.toHaveBeenCalled()
203
- })
204
- })
205
- })
@@ -1,249 +0,0 @@
1
- import { Logger } from '@open-draft/logger'
2
- import { Emitter, Listener } from 'strict-event-emitter'
3
-
4
- export type InterceptorEventMap = Record<string, any>
5
- export type InterceptorSubscription = () => void
6
-
7
- /**
8
- * Request header name to detect when a single request
9
- * is being handled by nested interceptors (XHR -> ClientRequest).
10
- * Obscure by design to prevent collisions with user-defined headers.
11
- * Ideally, come up with the Interceptor-level mechanism for this.
12
- * @see https://github.com/mswjs/interceptors/issues/378
13
- */
14
- export const INTERNAL_REQUEST_ID_HEADER_NAME =
15
- 'x-interceptors-internal-request-id'
16
-
17
- export function getGlobalSymbol<V>(symbol: Symbol): V | undefined {
18
- return (
19
- // @ts-ignore https://github.com/Microsoft/TypeScript/issues/24587
20
- globalThis[symbol] || undefined
21
- )
22
- }
23
-
24
- function setGlobalSymbol(symbol: Symbol, value: any): void {
25
- // @ts-ignore
26
- globalThis[symbol] = value
27
- }
28
-
29
- export function deleteGlobalSymbol(symbol: Symbol): void {
30
- // @ts-ignore
31
- delete globalThis[symbol]
32
- }
33
-
34
- export enum InterceptorReadyState {
35
- INACTIVE = 'INACTIVE',
36
- APPLYING = 'APPLYING',
37
- APPLIED = 'APPLIED',
38
- DISPOSING = 'DISPOSING',
39
- DISPOSED = 'DISPOSED',
40
- }
41
-
42
- export type ExtractEventNames<Events extends Record<string, any>> =
43
- Events extends Record<infer EventName, any> ? EventName : never
44
-
45
- export class Interceptor<Events extends InterceptorEventMap> {
46
- protected emitter: Emitter<Events>
47
- protected subscriptions: Array<InterceptorSubscription>
48
- protected logger: Logger
49
-
50
- public readyState: InterceptorReadyState
51
-
52
- constructor(private readonly symbol: symbol) {
53
- this.readyState = InterceptorReadyState.INACTIVE
54
-
55
- this.emitter = new Emitter()
56
- this.subscriptions = []
57
- this.logger = new Logger(symbol.description!)
58
-
59
- // Do not limit the maximum number of listeners
60
- // so not to limit the maximum amount of parallel events emitted.
61
- this.emitter.setMaxListeners(0)
62
-
63
- this.logger.info('constructing the interceptor...')
64
- }
65
-
66
- /**
67
- * Determine if this interceptor can be applied
68
- * in the current environment.
69
- */
70
- protected checkEnvironment(): boolean {
71
- return true
72
- }
73
-
74
- /**
75
- * Apply this interceptor to the current process.
76
- * Returns an already running interceptor instance if it's present.
77
- */
78
- public apply(): void {
79
- const logger = this.logger.extend('apply')
80
- logger.info('applying the interceptor...')
81
-
82
- if (this.readyState === InterceptorReadyState.APPLIED) {
83
- logger.info('intercepted already applied!')
84
- return
85
- }
86
-
87
- const shouldApply = this.checkEnvironment()
88
-
89
- if (!shouldApply) {
90
- logger.info('the interceptor cannot be applied in this environment!')
91
- return
92
- }
93
-
94
- this.readyState = InterceptorReadyState.APPLYING
95
-
96
- // Whenever applying a new interceptor, check if it hasn't been applied already.
97
- // This enables to apply the same interceptor multiple times, for example from a different
98
- // interceptor, only proxying events but keeping the stubs in a single place.
99
- const runningInstance = this.getInstance()
100
-
101
- if (runningInstance) {
102
- logger.info('found a running instance, reusing...')
103
-
104
- // Proxy any listeners you set on this instance to the running instance.
105
- this.on = (event, listener) => {
106
- logger.info('proxying the "%s" listener', event)
107
-
108
- // Add listeners to the running instance so they appear
109
- // at the top of the event listeners list and are executed first.
110
- runningInstance.emitter.addListener(event, listener)
111
-
112
- // Ensure that once this interceptor instance is disposed,
113
- // it removes all listeners it has appended to the running interceptor instance.
114
- this.subscriptions.push(() => {
115
- runningInstance.emitter.removeListener(event, listener)
116
- logger.info('removed proxied "%s" listener!', event)
117
- })
118
-
119
- return this
120
- }
121
-
122
- this.readyState = InterceptorReadyState.APPLIED
123
-
124
- return
125
- }
126
-
127
- logger.info('no running instance found, setting up a new instance...')
128
-
129
- // Setup the interceptor.
130
- this.setup()
131
-
132
- // Store the newly applied interceptor instance globally.
133
- this.setInstance()
134
-
135
- this.readyState = InterceptorReadyState.APPLIED
136
- }
137
-
138
- /**
139
- * Setup the module augments and stubs necessary for this interceptor.
140
- * This method is not run if there's a running interceptor instance
141
- * to prevent instantiating an interceptor multiple times.
142
- */
143
- protected setup(): void {}
144
-
145
- /**
146
- * Listen to the interceptor's public events.
147
- */
148
- public on<EventName extends ExtractEventNames<Events>>(
149
- event: EventName,
150
- listener: Listener<Events[EventName]>
151
- ): this {
152
- const logger = this.logger.extend('on')
153
-
154
- if (
155
- this.readyState === InterceptorReadyState.DISPOSING ||
156
- this.readyState === InterceptorReadyState.DISPOSED
157
- ) {
158
- logger.info('cannot listen to events, already disposed!')
159
- return this
160
- }
161
-
162
- logger.info('adding "%s" event listener:', event, listener)
163
-
164
- this.emitter.on(event, listener)
165
- return this
166
- }
167
-
168
- public once<EventName extends ExtractEventNames<Events>>(
169
- event: EventName,
170
- listener: Listener<Events[EventName]>
171
- ): this {
172
- this.emitter.once(event, listener)
173
- return this
174
- }
175
-
176
- public off<EventName extends ExtractEventNames<Events>>(
177
- event: EventName,
178
- listener: Listener<Events[EventName]>
179
- ): this {
180
- this.emitter.off(event, listener)
181
- return this
182
- }
183
-
184
- public removeAllListeners<EventName extends ExtractEventNames<Events>>(
185
- event?: EventName
186
- ): this {
187
- this.emitter.removeAllListeners(event)
188
- return this
189
- }
190
-
191
- /**
192
- * Disposes of any side-effects this interceptor has introduced.
193
- */
194
- public dispose(): void {
195
- const logger = this.logger.extend('dispose')
196
-
197
- if (this.readyState === InterceptorReadyState.DISPOSED) {
198
- logger.info('cannot dispose, already disposed!')
199
- return
200
- }
201
-
202
- logger.info('disposing the interceptor...')
203
- this.readyState = InterceptorReadyState.DISPOSING
204
-
205
- if (!this.getInstance()) {
206
- logger.info('no interceptors running, skipping dispose...')
207
- return
208
- }
209
-
210
- // Delete the global symbol as soon as possible,
211
- // indicating that the interceptor is no longer running.
212
- this.clearInstance()
213
-
214
- logger.info('global symbol deleted:', getGlobalSymbol(this.symbol))
215
-
216
- if (this.subscriptions.length > 0) {
217
- logger.info('disposing of %d subscriptions...', this.subscriptions.length)
218
-
219
- for (const dispose of this.subscriptions) {
220
- dispose()
221
- }
222
-
223
- this.subscriptions = []
224
-
225
- logger.info('disposed of all subscriptions!', this.subscriptions.length)
226
- }
227
-
228
- this.emitter.removeAllListeners()
229
- logger.info('destroyed the listener!')
230
-
231
- this.readyState = InterceptorReadyState.DISPOSED
232
- }
233
-
234
- private getInstance(): this | undefined {
235
- const instance = getGlobalSymbol<this>(this.symbol)
236
- this.logger.info('retrieved global instance:', instance?.constructor?.name)
237
- return instance
238
- }
239
-
240
- private setInstance(): void {
241
- setGlobalSymbol(this.symbol, this)
242
- this.logger.info('set global instance!', this.symbol.description)
243
- }
244
-
245
- private clearInstance(): void {
246
- deleteGlobalSymbol(this.symbol)
247
- this.logger.info('cleared global instance!', this.symbol.description)
248
- }
249
- }
@@ -1,21 +0,0 @@
1
- const kRawRequest = Symbol('kRawRequest')
2
-
3
- /**
4
- * Returns a raw request instance associated with this request.
5
- *
6
- * @example
7
- * interceptor.on('request', ({ request }) => {
8
- * const rawRequest = getRawRequest(request)
9
- *
10
- * if (rawRequest instanceof http.ClientRequest) {
11
- * console.log(rawRequest.rawHeaders)
12
- * }
13
- * })
14
- */
15
- export function getRawRequest(request: Request): unknown | undefined {
16
- return Reflect.get(request, kRawRequest)
17
- }
18
-
19
- export function setRawRequest(request: Request, rawRequest: unknown): void {
20
- Reflect.set(request, kRawRequest, rawRequest)
21
- }