@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 +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-2loAH7xM.cjs');
4
- require('../handleRequest-C-cKYjIh.cjs');
5
- require('../node-DIKcnzhK.cjs');
6
- const require_XMLHttpRequest = require('../XMLHttpRequest-BtDNZipW.cjs');
7
- require('../hasConfigurableGlobal-MjY06_Ok.cjs');
8
- const require_fetch = require('../fetch-D2ClLNN-.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-DGhBX21V.mjs";
4
- import "../handleRequest-FIQv5pwH.mjs";
5
- import "../node-lsdNwZEW.mjs";
6
- import { t as XMLHttpRequestInterceptor } from "../XMLHttpRequest-Dw6Wm-UU.mjs";
7
- import "../hasConfigurableGlobal-BiTmog1u.mjs";
8
- import { t as FetchInterceptor } from "../fetch-CaC3rGEu.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,96 +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
- > =
14
- InterceptorList extends ReadonlyArray<infer InterceptorType>
15
- ? InterceptorType extends Interceptor<infer EventMap>
16
- ? EventMap
17
- : never
18
- : never
19
-
20
- /**
21
- * A batch interceptor that exposes a single interface
22
- * to apply and operate with multiple interceptors at once.
23
- */
24
- export class BatchInterceptor<
25
- InterceptorList extends ReadonlyArray<Interceptor<any>>,
26
- Events extends EventMap = ExtractEventMapType<InterceptorList>,
27
- > extends Interceptor<Events> {
28
- static symbol: symbol
29
-
30
- private interceptors: InterceptorList
31
-
32
- constructor(options: BatchInterceptorOptions<InterceptorList>) {
33
- BatchInterceptor.symbol = Symbol.for(options.name)
34
- super(BatchInterceptor.symbol)
35
- this.interceptors = options.interceptors
36
- }
37
-
38
- protected setup() {
39
- const logger = this.logger.extend('setup')
40
-
41
- logger.info('applying all %d interceptors...', this.interceptors.length)
42
-
43
- for (const interceptor of this.interceptors) {
44
- logger.info('applying "%s" interceptor...', interceptor.constructor.name)
45
- interceptor.apply()
46
-
47
- logger.info('adding interceptor dispose subscription')
48
- this.subscriptions.push(() => interceptor.dispose())
49
- }
50
- }
51
-
52
- public on<EventName extends ExtractEventNames<Events>>(
53
- event: EventName,
54
- listener: Listener<Events[EventName]>
55
- ): this {
56
- // Instead of adding a listener to the batch interceptor,
57
- // propagate the listener to each of the individual interceptors.
58
- for (const interceptor of this.interceptors) {
59
- interceptor.on(event, listener)
60
- }
61
-
62
- return this
63
- }
64
-
65
- public once<EventName extends ExtractEventNames<Events>>(
66
- event: EventName,
67
- listener: Listener<Events[EventName]>
68
- ): this {
69
- for (const interceptor of this.interceptors) {
70
- interceptor.once(event, listener)
71
- }
72
-
73
- return this
74
- }
75
-
76
- public off<EventName extends ExtractEventNames<Events>>(
77
- event: EventName,
78
- listener: Listener<Events[EventName]>
79
- ): this {
80
- for (const interceptor of this.interceptors) {
81
- interceptor.off(event, listener)
82
- }
83
-
84
- return this
85
- }
86
-
87
- public removeAllListeners<EventName extends ExtractEventNames<Events>>(
88
- event?: EventName | undefined
89
- ): this {
90
- for (const interceptors of this.interceptors) {
91
- interceptors.removeAllListeners(event)
92
- }
93
-
94
- return this
95
- }
96
- }