@mswjs/interceptors 0.41.8 → 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} +40 -31
  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/{node/XMLHttpRequest-DhupxLHX.mjs → browser/web-C2oKsT3Q.js} +328 -256
  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 +65 -180
  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 +34 -51
  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} +66 -47
  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-B11I9TBx.cjs +0 -751
  167. package/lib/browser/XMLHttpRequest-B11I9TBx.cjs.map +0 -1
  168. package/lib/browser/XMLHttpRequest-DHEkSoRN.mjs +0 -746
  169. package/lib/browser/XMLHttpRequest-DHEkSoRN.mjs.map +0 -1
  170. package/lib/browser/bufferUtils-BiiO6HZv.mjs.map +0 -1
  171. package/lib/browser/bufferUtils-Uc0eRItL.cjs +0 -38
  172. package/lib/browser/bufferUtils-Uc0eRItL.cjs.map +0 -1
  173. package/lib/browser/createRequestId-DOf8Ktjs.cjs +0 -205
  174. package/lib/browser/createRequestId-DOf8Ktjs.cjs.map +0 -1
  175. package/lib/browser/createRequestId-DYCsFHOi.mjs +0 -170
  176. package/lib/browser/createRequestId-DYCsFHOi.mjs.map +0 -1
  177. package/lib/browser/fetch-BJwfdses.mjs +0 -236
  178. package/lib/browser/fetch-BJwfdses.mjs.map +0 -1
  179. package/lib/browser/fetch-M8iXkZ3L.cjs +0 -241
  180. package/lib/browser/fetch-M8iXkZ3L.cjs.map +0 -1
  181. package/lib/browser/getRawRequest-B1BqgWG6.mjs.map +0 -1
  182. package/lib/browser/getRawRequest-DdfaiPVH.cjs +0 -376
  183. package/lib/browser/getRawRequest-DdfaiPVH.cjs.map +0 -1
  184. package/lib/browser/glossary-1lhZx6Aw.d.cts +0 -69
  185. package/lib/browser/glossary-nkHWcwvY.d.mts +0 -69
  186. package/lib/browser/handleRequest-1Yqu_ho_.mjs +0 -178
  187. package/lib/browser/handleRequest-1Yqu_ho_.mjs.map +0 -1
  188. package/lib/browser/handleRequest-Cz4_wmQ9.cjs +0 -189
  189. package/lib/browser/handleRequest-Cz4_wmQ9.cjs.map +0 -1
  190. package/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs +0 -109
  191. package/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs.map +0 -1
  192. package/lib/browser/hasConfigurableGlobal-CS7adEvV.cjs +0 -126
  193. package/lib/browser/hasConfigurableGlobal-CS7adEvV.cjs.map +0 -1
  194. package/lib/browser/index.cjs +0 -70
  195. package/lib/browser/index.cjs.map +0 -1
  196. package/lib/browser/index.d.mts +0 -125
  197. package/lib/browser/index.mjs +0 -56
  198. package/lib/browser/index.mjs.map +0 -1
  199. package/lib/browser/interceptors/WebSocket/index.cjs +0 -618
  200. package/lib/browser/interceptors/WebSocket/index.cjs.map +0 -1
  201. package/lib/browser/interceptors/WebSocket/index.mjs.map +0 -1
  202. package/lib/browser/interceptors/XMLHttpRequest/index.cjs +0 -8
  203. package/lib/browser/interceptors/XMLHttpRequest/index.d.cts +0 -15
  204. package/lib/browser/interceptors/XMLHttpRequest/index.d.mts +0 -15
  205. package/lib/browser/interceptors/XMLHttpRequest/index.mjs +0 -8
  206. package/lib/browser/interceptors/fetch/index.cjs +0 -7
  207. package/lib/browser/interceptors/fetch/index.d.cts +0 -13
  208. package/lib/browser/interceptors/fetch/index.d.mts +0 -13
  209. package/lib/browser/interceptors/fetch/index.mjs +0 -7
  210. package/lib/browser/presets/browser.cjs +0 -18
  211. package/lib/browser/presets/browser.cjs.map +0 -1
  212. package/lib/browser/presets/browser.d.cts +0 -12
  213. package/lib/browser/presets/browser.d.mts +0 -14
  214. package/lib/browser/presets/browser.mjs +0 -18
  215. package/lib/browser/presets/browser.mjs.map +0 -1
  216. package/lib/browser/resolveWebSocketUrl-6K6EgqsA.cjs +0 -31
  217. package/lib/browser/resolveWebSocketUrl-6K6EgqsA.cjs.map +0 -1
  218. package/lib/browser/resolveWebSocketUrl-C83-x9iE.mjs.map +0 -1
  219. package/lib/node/BatchInterceptor-DdMNfSUY.mjs +0 -44
  220. package/lib/node/BatchInterceptor-DdMNfSUY.mjs.map +0 -1
  221. package/lib/node/BatchInterceptor-KKF8Q47I.d.cts +0 -26
  222. package/lib/node/BatchInterceptor-Z1lwK23r.cjs +0 -49
  223. package/lib/node/BatchInterceptor-Z1lwK23r.cjs.map +0 -1
  224. package/lib/node/BatchInterceptor-rSr-NH_H.d.mts +0 -26
  225. package/lib/node/ClientRequest-DFs7FPNi.cjs +0 -1058
  226. package/lib/node/ClientRequest-DFs7FPNi.cjs.map +0 -1
  227. package/lib/node/ClientRequest-dRpI9v1o.mjs +0 -1049
  228. package/lib/node/ClientRequest-dRpI9v1o.mjs.map +0 -1
  229. package/lib/node/Interceptor-BsZ21ue0.d.cts +0 -132
  230. package/lib/node/Interceptor-soD-WpQO.d.mts +0 -132
  231. package/lib/node/RemoteHttpInterceptor.cjs +0 -155
  232. package/lib/node/RemoteHttpInterceptor.cjs.map +0 -1
  233. package/lib/node/RemoteHttpInterceptor.d.mts +0 -39
  234. package/lib/node/RemoteHttpInterceptor.mjs.map +0 -1
  235. package/lib/node/XMLHttpRequest-DhupxLHX.mjs.map +0 -1
  236. package/lib/node/XMLHttpRequest-Dyi6ahGz.cjs +0 -752
  237. package/lib/node/XMLHttpRequest-Dyi6ahGz.cjs.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-BqMcbuYR.mjs +0 -252
  244. package/lib/node/fetch-BqMcbuYR.mjs.map +0 -1
  245. package/lib/node/fetch-aQJu1Gf_.cjs +0 -259
  246. package/lib/node/fetch-aQJu1Gf_.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-DCLzePtS.mjs +0 -190
  256. package/lib/node/handleRequest-DCLzePtS.mjs.map +0 -1
  257. package/lib/node/handleRequest-DVOthWJo.cjs +0 -220
  258. package/lib/node/handleRequest-DVOthWJo.cjs.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 -95
  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 +0,0 @@
1
- {"version":3,"file":"node-DIKcnzhK.cjs","names":["getRawRequest","ClientRequest","Readable"],"sources":["../../src/utils/node/index.ts"],"sourcesContent":["import { ClientRequest } from 'node:http'\nimport { Readable } from 'node:stream'\nimport { invariant } from 'outvariant'\nimport { getRawRequest } from '../../getRawRequest'\n\nconst kRawRequestBodyStream = Symbol('kRawRequestBodyStream')\n\n/**\n * Returns the request body stream of the given request.\n * @note This is only relevant in the context of `http.ClientRequest`.\n * This function will throw if the given `request` wasn't created based on\n * the `http.ClientRequest` instance.\n * You must rely on the web stream consumers for other request clients.\n */\nexport function getClientRequestBodyStream(request: Request): Readable {\n const rawRequest = getRawRequest(request)\n\n invariant(\n rawRequest instanceof ClientRequest,\n `Failed to retrieve raw request body stream: request is not an instance of \"http.ClientRequest\". Note that you can only use the \"getClientRequestBodyStream\" function with the requests issued by \"http.clientRequest\".`\n )\n\n const requestBodyStream = Reflect.get(request, kRawRequestBodyStream)\n\n invariant(\n requestBodyStream instanceof Readable,\n 'Failed to retrieve raw request body stream: corrupted stream (%s)',\n typeof requestBodyStream\n )\n\n return requestBodyStream\n}\n\nexport function setRawRequestBodyStream(\n request: Request,\n stream: Readable\n): void {\n Reflect.set(request, kRawRequestBodyStream, stream)\n}\n"],"mappings":";;;;;;;AAKA,MAAM,wBAAwB,OAAO,wBAAwB;;;;;;;;AAS7D,SAAgB,2BAA2B,SAA4B;AAGrE,2BAFmBA,oCAAc,QAAQ,YAGjBC,yBACtB,yNACD;CAED,MAAM,oBAAoB,QAAQ,IAAI,SAAS,sBAAsB;AAErE,2BACE,6BAA6BC,sBAC7B,qEACA,OAAO,kBACR;AAED,QAAO;;AAGT,SAAgB,wBACd,SACA,QACM;AACN,SAAQ,IAAI,SAAS,uBAAuB,OAAO"}
@@ -1,27 +0,0 @@
1
- import { t as getRawRequest } from "./getRawRequest-C2-1urzA.mjs";
2
- import { invariant } from "outvariant";
3
- import { ClientRequest } from "node:http";
4
- import { Readable } from "node:stream";
5
-
6
- //#region src/utils/node/index.ts
7
- const kRawRequestBodyStream = Symbol("kRawRequestBodyStream");
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
- function getClientRequestBodyStream(request) {
16
- invariant(getRawRequest(request) instanceof ClientRequest, `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".`);
17
- const requestBodyStream = Reflect.get(request, kRawRequestBodyStream);
18
- invariant(requestBodyStream instanceof Readable, "Failed to retrieve raw request body stream: corrupted stream (%s)", typeof requestBodyStream);
19
- return requestBodyStream;
20
- }
21
- function setRawRequestBodyStream(request, stream) {
22
- Reflect.set(request, kRawRequestBodyStream, stream);
23
- }
24
-
25
- //#endregion
26
- export { setRawRequestBodyStream as n, getClientRequestBodyStream as t };
27
- //# sourceMappingURL=node-lsdNwZEW.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-lsdNwZEW.mjs","names":[],"sources":["../../src/utils/node/index.ts"],"sourcesContent":["import { ClientRequest } from 'node:http'\nimport { Readable } from 'node:stream'\nimport { invariant } from 'outvariant'\nimport { getRawRequest } from '../../getRawRequest'\n\nconst kRawRequestBodyStream = Symbol('kRawRequestBodyStream')\n\n/**\n * Returns the request body stream of the given request.\n * @note This is only relevant in the context of `http.ClientRequest`.\n * This function will throw if the given `request` wasn't created based on\n * the `http.ClientRequest` instance.\n * You must rely on the web stream consumers for other request clients.\n */\nexport function getClientRequestBodyStream(request: Request): Readable {\n const rawRequest = getRawRequest(request)\n\n invariant(\n rawRequest instanceof ClientRequest,\n `Failed to retrieve raw request body stream: request is not an instance of \"http.ClientRequest\". Note that you can only use the \"getClientRequestBodyStream\" function with the requests issued by \"http.clientRequest\".`\n )\n\n const requestBodyStream = Reflect.get(request, kRawRequestBodyStream)\n\n invariant(\n requestBodyStream instanceof Readable,\n 'Failed to retrieve raw request body stream: corrupted stream (%s)',\n typeof requestBodyStream\n )\n\n return requestBodyStream\n}\n\nexport function setRawRequestBodyStream(\n request: Request,\n stream: Readable\n): void {\n Reflect.set(request, kRawRequestBodyStream, stream)\n}\n"],"mappings":";;;;;;AAKA,MAAM,wBAAwB,OAAO,wBAAwB;;;;;;;;AAS7D,SAAgB,2BAA2B,SAA4B;AAGrE,WAFmB,cAAc,QAAQ,YAGjB,eACtB,yNACD;CAED,MAAM,oBAAoB,QAAQ,IAAI,SAAS,sBAAsB;AAErE,WACE,6BAA6B,UAC7B,qEACA,OAAO,kBACR;AAED,QAAO;;AAGT,SAAgB,wBACd,SACA,QACM;AACN,SAAQ,IAAI,SAAS,uBAAuB,OAAO"}
@@ -1,23 +0,0 @@
1
- require('../fetchUtils-umV5xXBy.cjs');
2
- require('../bufferUtils-S5_-2eN4.cjs');
3
- const require_ClientRequest = require('../ClientRequest-DFs7FPNi.cjs');
4
- require('../handleRequest-DVOthWJo.cjs');
5
- require('../node-DIKcnzhK.cjs');
6
- const require_XMLHttpRequest = require('../XMLHttpRequest-Dyi6ahGz.cjs');
7
- require('../hasConfigurableGlobal-MjY06_Ok.cjs');
8
- const require_fetch = require('../fetch-aQJu1Gf_.cjs');
9
-
10
- //#region src/presets/node.ts
11
- /**
12
- * The default preset provisions the interception of requests
13
- * regardless of their type (http/https/XMLHttpRequest).
14
- */
15
- var node_default = [
16
- new require_ClientRequest.ClientRequestInterceptor(),
17
- new require_XMLHttpRequest.XMLHttpRequestInterceptor(),
18
- new require_fetch.FetchInterceptor()
19
- ];
20
-
21
- //#endregion
22
- module.exports = node_default;
23
- //# sourceMappingURL=node.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node.cjs","names":["ClientRequestInterceptor","XMLHttpRequestInterceptor","FetchInterceptor"],"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,IAAIA,gDAA0B;CAC9B,IAAIC,kDAA2B;CAC/B,IAAIC,gCAAkB;CACvB"}
@@ -1,13 +0,0 @@
1
- import { t as ClientRequestInterceptor } from "../index-BJ5E5aW-.cjs";
2
- import { XMLHttpRequestInterceptor } from "../interceptors/XMLHttpRequest/index.cjs";
3
- import { FetchInterceptor } from "../interceptors/fetch/index.cjs";
4
-
5
- //#region src/presets/node.d.ts
6
-
7
- /**
8
- * The default preset provisions the interception of requests
9
- * regardless of their type (http/https/XMLHttpRequest).
10
- */
11
- declare const _default: readonly [ClientRequestInterceptor, XMLHttpRequestInterceptor, FetchInterceptor];
12
- export = _default;
13
- //# sourceMappingURL=node.d.cts.map
@@ -1,15 +0,0 @@
1
- import "../Interceptor-soD-WpQO.mjs";
2
- import { t as ClientRequestInterceptor } from "../index-DfoF45ih.mjs";
3
- import { XMLHttpRequestInterceptor } from "../interceptors/XMLHttpRequest/index.mjs";
4
- import { FetchInterceptor } from "../interceptors/fetch/index.mjs";
5
-
6
- //#region src/presets/node.d.ts
7
-
8
- /**
9
- * The default preset provisions the interception of requests
10
- * regardless of their type (http/https/XMLHttpRequest).
11
- */
12
- declare const _default: readonly [ClientRequestInterceptor, XMLHttpRequestInterceptor, FetchInterceptor];
13
- //#endregion
14
- export { _default as default };
15
- //# sourceMappingURL=node.d.mts.map
@@ -1,23 +0,0 @@
1
- import "../fetchUtils-BKJ1XmiO.mjs";
2
- import "../bufferUtils-DxPxwff_.mjs";
3
- import { t as ClientRequestInterceptor } from "../ClientRequest-dRpI9v1o.mjs";
4
- import "../handleRequest-DCLzePtS.mjs";
5
- import "../node-lsdNwZEW.mjs";
6
- import { t as XMLHttpRequestInterceptor } from "../XMLHttpRequest-DhupxLHX.mjs";
7
- import "../hasConfigurableGlobal-BiTmog1u.mjs";
8
- import { t as FetchInterceptor } from "../fetch-BqMcbuYR.mjs";
9
-
10
- //#region src/presets/node.ts
11
- /**
12
- * The default preset provisions the interception of requests
13
- * regardless of their type (http/https/XMLHttpRequest).
14
- */
15
- var node_default = [
16
- new ClientRequestInterceptor(),
17
- new XMLHttpRequestInterceptor(),
18
- new FetchInterceptor()
19
- ];
20
-
21
- //#endregion
22
- export { node_default as default };
23
- //# sourceMappingURL=node.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node.mjs","names":[],"sources":["../../../src/presets/node.ts"],"sourcesContent":["import { ClientRequestInterceptor } from '../interceptors/ClientRequest'\nimport { XMLHttpRequestInterceptor } from '../interceptors/XMLHttpRequest'\nimport { FetchInterceptor } from '../interceptors/fetch'\n\n/**\n * The default preset provisions the interception of requests\n * regardless of their type (http/https/XMLHttpRequest).\n */\nexport default [\n new ClientRequestInterceptor(),\n new XMLHttpRequestInterceptor(),\n new FetchInterceptor(),\n] as const\n"],"mappings":";;;;;;;;;;;;;;AAQA,mBAAe;CACb,IAAI,0BAA0B;CAC9B,IAAI,2BAA2B;CAC/B,IAAI,kBAAkB;CACvB"}
@@ -1,4 +0,0 @@
1
- const require_node = require('../../node-DIKcnzhK.cjs');
2
-
3
- exports.getClientRequestBodyStream = require_node.getClientRequestBodyStream;
4
- exports.setRawRequestBodyStream = require_node.setRawRequestBodyStream;
@@ -1,16 +0,0 @@
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
@@ -1,16 +0,0 @@
1
- import { Readable } from "node:stream";
2
-
3
- //#region src/utils/node/index.d.ts
4
-
5
- /**
6
- * Returns the request body stream of the given request.
7
- * @note This is only relevant in the context of `http.ClientRequest`.
8
- * This function will throw if the given `request` wasn't created based on
9
- * the `http.ClientRequest` instance.
10
- * You must rely on the web stream consumers for other request clients.
11
- */
12
- declare function getClientRequestBodyStream(request: Request): Readable;
13
- declare function setRawRequestBodyStream(request: Request, stream: Readable): void;
14
- //#endregion
15
- export { getClientRequestBodyStream, setRawRequestBodyStream };
16
- //# sourceMappingURL=index.d.mts.map
@@ -1,3 +0,0 @@
1
- import { n as setRawRequestBodyStream, t as getClientRequestBodyStream } from "../../node-lsdNwZEW.mjs";
2
-
3
- export { getClientRequestBodyStream, setRawRequestBodyStream };
@@ -1,5 +0,0 @@
1
- {
2
- "main": "../../lib/browser/presets/browser.mjs",
3
- "module": "../../lib/browser/presets/browser.mjs",
4
- "browser": "../../lib/browser/presets/browser.mjs"
5
- }
@@ -1,11 +0,0 @@
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
- }
@@ -1,255 +0,0 @@
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
- })
@@ -1,95 +0,0 @@
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
- }