@mswjs/interceptors 0.41.9 → 0.42.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 (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-DlEd4GOA.js +184 -0
  5. package/lib/browser/create-request-id-DlEd4GOA.js.map +1 -0
  6. package/lib/browser/{getRawRequest-B1BqgWG6.mjs → fetch-utils-zxA_SD66.js} +123 -52
  7. package/lib/browser/fetch-utils-zxA_SD66.js.map +1 -0
  8. package/lib/browser/handle-request-CIOa9O-N.js +167 -0
  9. package/lib/browser/handle-request-CIOa9O-N.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/web-BjVDkiX0.js +248 -0
  30. package/lib/browser/web-BjVDkiX0.js.map +1 -0
  31. package/lib/browser/{XMLHttpRequest-DrZAf3w6.mjs → web-C2oKsT3Q.js} +327 -255
  32. package/lib/browser/web-C2oKsT3Q.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,52 +0,0 @@
1
- /**
2
- * @vitest-environment node
3
- */
4
- import { it, expect } from 'vitest'
5
- import { normalizeSocketWriteArgs } from './normalizeSocketWriteArgs'
6
-
7
- it('normalizes .write()', () => {
8
- expect(normalizeSocketWriteArgs([undefined])).toEqual([
9
- undefined,
10
- undefined,
11
- undefined,
12
- ])
13
- expect(normalizeSocketWriteArgs([null])).toEqual([null, undefined, undefined])
14
- })
15
-
16
- it('normalizes .write(chunk)', () => {
17
- expect(normalizeSocketWriteArgs([Buffer.from('hello')])).toEqual([
18
- Buffer.from('hello'),
19
- undefined,
20
- undefined,
21
- ])
22
- expect(normalizeSocketWriteArgs(['hello'])).toEqual([
23
- 'hello',
24
- undefined,
25
- undefined,
26
- ])
27
- expect(normalizeSocketWriteArgs([null])).toEqual([null, undefined, undefined])
28
- })
29
-
30
- it('normalizes .write(chunk, encoding)', () => {
31
- expect(normalizeSocketWriteArgs([Buffer.from('hello'), 'utf8'])).toEqual([
32
- Buffer.from('hello'),
33
- 'utf8',
34
- undefined,
35
- ])
36
- })
37
-
38
- it('normalizes .write(chunk, callback)', () => {
39
- const callback = () => {}
40
- expect(normalizeSocketWriteArgs([Buffer.from('hello'), callback])).toEqual([
41
- Buffer.from('hello'),
42
- undefined,
43
- callback,
44
- ])
45
- })
46
-
47
- it('normalizes .write(chunk, encoding, callback)', () => {
48
- const callback = () => {}
49
- expect(
50
- normalizeSocketWriteArgs([Buffer.from('hello'), 'utf8', callback])
51
- ).toEqual([Buffer.from('hello'), 'utf8', callback])
52
- })
@@ -1,33 +0,0 @@
1
- export type WriteCallback = (error?: Error | null) => void
2
-
3
- export type WriteArgs =
4
- | [chunk: unknown, callback?: WriteCallback]
5
- | [chunk: unknown, encoding: BufferEncoding, callback?: WriteCallback]
6
-
7
- export type NormalizedSocketWriteArgs = [
8
- chunk: any,
9
- encoding?: BufferEncoding,
10
- callback?: WriteCallback,
11
- ]
12
-
13
- /**
14
- * Normalizes the arguments provided to the `Writable.prototype.write()`
15
- * and `Writable.prototype.end()`.
16
- */
17
- export function normalizeSocketWriteArgs(
18
- args: WriteArgs
19
- ): NormalizedSocketWriteArgs {
20
- const normalized: NormalizedSocketWriteArgs = [args[0], undefined, undefined]
21
-
22
- if (typeof args[1] === 'string') {
23
- normalized[1] = args[1]
24
- } else if (typeof args[1] === 'function') {
25
- normalized[2] = args[1]
26
- }
27
-
28
- if (typeof args[2] === 'function') {
29
- normalized[2] = args[2]
30
- }
31
-
32
- return normalized
33
- }
@@ -1,40 +0,0 @@
1
- import { Emitter } from 'strict-event-emitter'
2
- import { HttpRequestEventMap } from '../../glossary'
3
- import { Interceptor } from '../../Interceptor'
4
- import { createXMLHttpRequestProxy } from './XMLHttpRequestProxy'
5
- import { hasConfigurableGlobal } from '../../utils/hasConfigurableGlobal'
6
- import { patchesRegistry } from '../../utils/patchesRegistry'
7
-
8
- export type XMLHttpRequestEmitter = Emitter<HttpRequestEventMap>
9
-
10
- export class XMLHttpRequestInterceptor extends Interceptor<HttpRequestEventMap> {
11
- static symbol = Symbol.for('xhr-interceptor')
12
-
13
- constructor() {
14
- super(XMLHttpRequestInterceptor.symbol)
15
- }
16
-
17
- protected checkEnvironment() {
18
- return hasConfigurableGlobal('XMLHttpRequest')
19
- }
20
-
21
- protected setup() {
22
- const logger = this.logger.extend('setup')
23
-
24
- logger.info('patching global XMLHttpRequest...')
25
-
26
- this.subscriptions.push(
27
- patchesRegistry.applyPatch(globalThis, 'XMLHttpRequest', () => {
28
- return createXMLHttpRequestProxy({
29
- emitter: this.emitter,
30
- logger: this.logger,
31
- })
32
- })
33
- )
34
-
35
- logger.info(
36
- 'global XMLHttpRequest patched!',
37
- globalThis.XMLHttpRequest.name
38
- )
39
- }
40
- }
@@ -1,203 +0,0 @@
1
- import { until } from '@open-draft/until'
2
- import { DeferredPromise } from '@open-draft/deferred-promise'
3
- import { HttpRequestEventMap } from '../../glossary'
4
- import { Interceptor } from '../../Interceptor'
5
- import { RequestController } from '../../RequestController'
6
- import { emitAsync } from '../../utils/emitAsync'
7
- import { handleRequest } from '../../utils/handleRequest'
8
- import { canParseUrl } from '../../utils/canParseUrl'
9
- import { createRequestId } from '../../createRequestId'
10
- import { createNetworkError } from './utils/createNetworkError'
11
- import { followFetchRedirect } from './utils/followRedirect'
12
- import { decompressResponse } from './utils/decompression'
13
- import { hasConfigurableGlobal } from '../../utils/hasConfigurableGlobal'
14
- import { FetchRequest, FetchResponse } from '../../utils/fetchUtils'
15
- import { setRawRequest } from '../../getRawRequest'
16
- import { isResponseError } from '../../utils/responseUtils'
17
- import { patchesRegistry } from '../../utils/patchesRegistry'
18
-
19
- export class FetchInterceptor extends Interceptor<HttpRequestEventMap> {
20
- static symbol = Symbol.for('fetch-interceptor')
21
-
22
- constructor() {
23
- super(FetchInterceptor.symbol)
24
- }
25
-
26
- protected checkEnvironment() {
27
- return hasConfigurableGlobal('fetch')
28
- }
29
-
30
- protected async setup() {
31
- const logger = this.logger.extend('setup')
32
-
33
- const pureFetch = globalThis.fetch
34
-
35
- const fetchProxy: typeof fetch = async (input, init) => {
36
- const requestId = createRequestId()
37
-
38
- /**
39
- * @note Resolve potentially relative request URL
40
- * against the present `location`. This is mainly
41
- * for native `fetch` in JSDOM.
42
- * @see https://github.com/mswjs/msw/issues/1625
43
- */
44
- const resolvedInput =
45
- typeof input === 'string' &&
46
- typeof location !== 'undefined' &&
47
- !canParseUrl(input)
48
- ? new URL(input, location.href)
49
- : input
50
-
51
- const request = new FetchRequest(resolvedInput, init)
52
-
53
- /**
54
- * @note Set the raw request only if a Request instance was provided to fetch.
55
- */
56
- if (input instanceof Request) {
57
- setRawRequest(request, input)
58
- }
59
-
60
- const responsePromise = new DeferredPromise<Response>()
61
-
62
- const controller = new RequestController(request, {
63
- passthrough: async () => {
64
- this.logger.info('request has not been handled, passthrough...')
65
-
66
- /**
67
- * @note Clone the request instance right before performing it.
68
- * This preserves any modifications made to the intercepted request
69
- * in the "request" listener. This also allows the user to read the
70
- * request body in the "response" listener (otherwise "unusable").
71
- */
72
- const requestCloneForResponseEvent = request.clone()
73
-
74
- // Perform the intercepted request as-is.
75
- const { error: responseError, data: originalResponse } = await until(
76
- () => pureFetch(request)
77
- )
78
-
79
- if (responseError) {
80
- return responsePromise.reject(responseError)
81
- }
82
-
83
- this.logger.info('original fetch performed', originalResponse)
84
-
85
- if (this.emitter.listenerCount('response') > 0) {
86
- this.logger.info('emitting the "response" event...')
87
-
88
- const responseClone = FetchResponse.clone(originalResponse)
89
- await emitAsync(this.emitter, 'response', {
90
- response: responseClone,
91
- isMockedResponse: false,
92
- request: requestCloneForResponseEvent,
93
- requestId,
94
- })
95
- }
96
-
97
- // Resolve the response promise with the original response
98
- // since the `fetch()` return this internal promise.
99
- responsePromise.resolve(originalResponse)
100
- },
101
- respondWith: async (rawResponse) => {
102
- // Handle mocked `Response.error()` (i.e. request errors).
103
- if (isResponseError(rawResponse)) {
104
- this.logger.info('request has errored!', { response: rawResponse })
105
- responsePromise.reject(createNetworkError(rawResponse))
106
- return
107
- }
108
-
109
- this.logger.info('received mocked response!', {
110
- rawResponse,
111
- })
112
-
113
- // Decompress the mocked response body, if applicable.
114
- const decompressedStream = decompressResponse(rawResponse)
115
- const response = new FetchResponse(
116
- decompressedStream || rawResponse.body,
117
- {
118
- url: request.url,
119
- status: rawResponse.status,
120
- statusText: rawResponse.statusText,
121
- headers: rawResponse.headers,
122
- }
123
- )
124
-
125
- /**
126
- * Undici's handling of following redirect responses.
127
- * Treat the "manual" redirect mode as a regular mocked response.
128
- * This way, the client can manually follow the redirect it receives.
129
- * @see https://github.com/nodejs/undici/blob/a6dac3149c505b58d2e6d068b97f4dc993da55f0/lib/web/fetch/index.js#L1173
130
- */
131
- if (FetchResponse.isRedirectResponse(response.status)) {
132
- // Reject the request promise if its `redirect` is set to `error`
133
- // and it receives a mocked redirect response.
134
- if (request.redirect === 'error') {
135
- responsePromise.reject(createNetworkError('unexpected redirect'))
136
- return
137
- }
138
-
139
- if (request.redirect === 'follow') {
140
- followFetchRedirect(request, response).then(
141
- (response) => {
142
- responsePromise.resolve(response)
143
- },
144
- (reason) => {
145
- responsePromise.reject(reason)
146
- }
147
- )
148
- return
149
- }
150
- }
151
-
152
- if (this.emitter.listenerCount('response') > 0) {
153
- this.logger.info('emitting the "response" event...')
154
-
155
- // Await the response listeners to finish before resolving
156
- // the response promise. This ensures all your logic finishes
157
- // before the interceptor resolves the pending response.
158
- await emitAsync(this.emitter, 'response', {
159
- // Clone the mocked response for the "response" event listener.
160
- // This way, the listener can read the response and not lock its body
161
- // for the actual fetch consumer.
162
- response: FetchResponse.clone(response),
163
- isMockedResponse: true,
164
- request,
165
- requestId,
166
- })
167
- }
168
-
169
- responsePromise.resolve(response)
170
- },
171
- errorWith: (reason) => {
172
- this.logger.info('request has been aborted!', { reason })
173
- responsePromise.reject(reason)
174
- },
175
- })
176
-
177
- this.logger.info('[%s] %s', request.method, request.url)
178
- this.logger.info('awaiting for the mocked response...')
179
-
180
- this.logger.info(
181
- 'emitting the "request" event for %s listener(s)...',
182
- this.emitter.listenerCount('request')
183
- )
184
-
185
- await handleRequest({
186
- request,
187
- requestId,
188
- emitter: this.emitter,
189
- controller,
190
- })
191
-
192
- return responsePromise
193
- }
194
-
195
- logger.info('patching global fetch...')
196
-
197
- this.subscriptions.push(
198
- patchesRegistry.applyPatch(globalThis, 'fetch', () => fetchProxy)
199
- )
200
-
201
- logger.info('global fetch patched!', globalThis.fetch.name)
202
- }
203
- }
@@ -1,22 +0,0 @@
1
- const encoder = new TextEncoder()
2
-
3
- export function encodeBuffer(text: string): Uint8Array {
4
- return encoder.encode(text)
5
- }
6
-
7
- export function decodeBuffer(buffer: ArrayBuffer, encoding?: string): string {
8
- const decoder = new TextDecoder(encoding)
9
- return decoder.decode(buffer)
10
- }
11
-
12
- /**
13
- * Create an `ArrayBuffer` from the given `Uint8Array`.
14
- * Takes the byte offset into account to produce the right buffer
15
- * in the case when the buffer is bigger than the data view.
16
- */
17
- export function toArrayBuffer(array: Uint8Array): ArrayBuffer {
18
- return array.buffer.slice(
19
- array.byteOffset,
20
- array.byteOffset + array.byteLength
21
- )
22
- }
@@ -1,13 +0,0 @@
1
- /**
2
- * Returns a boolean indicating whether the given URL string
3
- * can be parsed into a `URL` instance.
4
- * A substitute for `URL.canParse()` for Node.js 18.
5
- */
6
- export function canParseUrl(url: string): boolean {
7
- try {
8
- new URL(url)
9
- return true
10
- } catch (_error) {
11
- return false
12
- }
13
- }
@@ -1,25 +0,0 @@
1
- import { Emitter, EventMap } from 'strict-event-emitter'
2
-
3
- /**
4
- * Emits an event on the given emitter but executes
5
- * the listeners sequentially. This accounts for asynchronous
6
- * listeners (e.g. those having "sleep" and handling the request).
7
- */
8
- export async function emitAsync<
9
- Events extends EventMap,
10
- EventName extends keyof Events
11
- >(
12
- emitter: Emitter<Events>,
13
- eventName: EventName,
14
- ...data: Events[EventName]
15
- ): Promise<void> {
16
- const listeners = emitter.listeners(eventName)
17
-
18
- if (listeners.length === 0) {
19
- return
20
- }
21
-
22
- for (const listener of listeners) {
23
- await listener.apply(emitter, data)
24
- }
25
- }
@@ -1,11 +0,0 @@
1
- export function nextTick(callback: () => void) {
2
- setTimeout(callback, 0)
3
- }
4
-
5
- export function nextTickAsync(callback: () => void) {
6
- return new Promise((resolve) => {
7
- setTimeout(() => {
8
- resolve(callback())
9
- }, 0)
10
- })
11
- }
@@ -1,39 +0,0 @@
1
- import { ClientRequest } from 'node:http'
2
- import { Readable } from 'node:stream'
3
- import { invariant } from 'outvariant'
4
- import { getRawRequest } from '../../getRawRequest'
5
-
6
- const kRawRequestBodyStream = Symbol('kRawRequestBodyStream')
7
-
8
- /**
9
- * Returns the request body stream of the given request.
10
- * @note This is only relevant in the context of `http.ClientRequest`.
11
- * This function will throw if the given `request` wasn't created based on
12
- * the `http.ClientRequest` instance.
13
- * You must rely on the web stream consumers for other request clients.
14
- */
15
- export function getClientRequestBodyStream(request: Request): Readable {
16
- const rawRequest = getRawRequest(request)
17
-
18
- invariant(
19
- rawRequest instanceof ClientRequest,
20
- `Failed to retrieve raw request body stream: request is not an instance of "http.ClientRequest". Note that you can only use the "getClientRequestBodyStream" function with the requests issued by "http.clientRequest".`
21
- )
22
-
23
- const requestBodyStream = Reflect.get(request, kRawRequestBodyStream)
24
-
25
- invariant(
26
- requestBodyStream instanceof Readable,
27
- 'Failed to retrieve raw request body stream: corrupted stream (%s)',
28
- typeof requestBodyStream
29
- )
30
-
31
- return requestBodyStream
32
- }
33
-
34
- export function setRawRequestBodyStream(
35
- request: Request,
36
- stream: Readable
37
- ): void {
38
- Reflect.set(request, kRawRequestBodyStream, stream)
39
- }
File without changes
File without changes
File without changes