@depup/msw 2.13.2-depup.0 → 2.15.0-depup.10

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 (282) hide show
  1. package/README.md +10 -13
  2. package/changes.json +15 -27
  3. package/cli/init.js +1 -1
  4. package/lib/browser/index.js +547 -177
  5. package/lib/browser/index.js.map +1 -1
  6. package/lib/browser/index.mjs +547 -177
  7. package/lib/browser/index.mjs.map +1 -1
  8. package/lib/core/{HttpResponse-DlRR1D-f.d.mts → HttpResponse-BE_Y2Ak9.d.mts} +52 -1
  9. package/lib/core/{HttpResponse-CksOMVAa.d.ts → HttpResponse-DL-P1EeG.d.ts} +52 -1
  10. package/lib/core/HttpResponse.d.mts +1 -1
  11. package/lib/core/HttpResponse.d.ts +1 -1
  12. package/lib/core/HttpResponse.js +2 -2
  13. package/lib/core/HttpResponse.js.map +1 -1
  14. package/lib/core/HttpResponse.mjs +2 -2
  15. package/lib/core/HttpResponse.mjs.map +1 -1
  16. package/lib/core/experimental/compat.d.mts +2 -2
  17. package/lib/core/experimental/compat.d.ts +2 -2
  18. package/lib/core/experimental/compat.js +1 -0
  19. package/lib/core/experimental/compat.js.map +1 -1
  20. package/lib/core/experimental/compat.mjs +1 -0
  21. package/lib/core/experimental/compat.mjs.map +1 -1
  22. package/lib/core/experimental/define-network.d.mts +2 -2
  23. package/lib/core/experimental/define-network.d.ts +2 -2
  24. package/lib/core/experimental/define-network.js +21 -11
  25. package/lib/core/experimental/define-network.js.map +1 -1
  26. package/lib/core/experimental/define-network.mjs +23 -11
  27. package/lib/core/experimental/define-network.mjs.map +1 -1
  28. package/lib/core/experimental/frames/http-frame.d.mts +2 -2
  29. package/lib/core/experimental/frames/http-frame.d.ts +2 -2
  30. package/lib/core/experimental/frames/http-frame.js +5 -2
  31. package/lib/core/experimental/frames/http-frame.js.map +1 -1
  32. package/lib/core/experimental/frames/http-frame.mjs +8 -3
  33. package/lib/core/experimental/frames/http-frame.mjs.map +1 -1
  34. package/lib/core/experimental/frames/network-frame.d.mts +2 -2
  35. package/lib/core/experimental/frames/network-frame.d.ts +2 -2
  36. package/lib/core/experimental/frames/network-frame.js +2 -0
  37. package/lib/core/experimental/frames/network-frame.js.map +1 -1
  38. package/lib/core/experimental/frames/network-frame.mjs +2 -0
  39. package/lib/core/experimental/frames/network-frame.mjs.map +1 -1
  40. package/lib/core/experimental/frames/websocket-frame.d.mts +2 -2
  41. package/lib/core/experimental/frames/websocket-frame.d.ts +2 -2
  42. package/lib/core/experimental/frames/websocket-frame.js +2 -0
  43. package/lib/core/experimental/frames/websocket-frame.js.map +1 -1
  44. package/lib/core/experimental/frames/websocket-frame.mjs +2 -0
  45. package/lib/core/experimental/frames/websocket-frame.mjs.map +1 -1
  46. package/lib/core/experimental/handlers-controller.d.mts +2 -1
  47. package/lib/core/experimental/handlers-controller.d.ts +2 -1
  48. package/lib/core/experimental/handlers-controller.js +31 -6
  49. package/lib/core/experimental/handlers-controller.js.map +1 -1
  50. package/lib/core/experimental/handlers-controller.mjs +31 -6
  51. package/lib/core/experimental/handlers-controller.mjs.map +1 -1
  52. package/lib/core/experimental/index.d.mts +5 -5
  53. package/lib/core/experimental/index.d.ts +5 -5
  54. package/lib/core/experimental/index.js +3 -1
  55. package/lib/core/experimental/index.js.map +1 -1
  56. package/lib/core/experimental/index.mjs +9 -2
  57. package/lib/core/experimental/index.mjs.map +1 -1
  58. package/lib/core/experimental/on-unhandled-frame.d.mts +2 -2
  59. package/lib/core/experimental/on-unhandled-frame.d.ts +2 -2
  60. package/lib/core/experimental/on-unhandled-frame.js +1 -0
  61. package/lib/core/experimental/on-unhandled-frame.js.map +1 -1
  62. package/lib/core/experimental/on-unhandled-frame.mjs +1 -0
  63. package/lib/core/experimental/on-unhandled-frame.mjs.map +1 -1
  64. package/lib/core/experimental/setup-api.d.mts +1 -1
  65. package/lib/core/experimental/setup-api.d.ts +1 -1
  66. package/lib/core/experimental/setup-api.js +2 -5
  67. package/lib/core/experimental/setup-api.js.map +1 -1
  68. package/lib/core/experimental/setup-api.mjs +2 -5
  69. package/lib/core/experimental/setup-api.mjs.map +1 -1
  70. package/lib/core/experimental/sources/interceptor-source.d.mts +2 -2
  71. package/lib/core/experimental/sources/interceptor-source.d.ts +2 -2
  72. package/lib/core/experimental/sources/interceptor-source.js +23 -10
  73. package/lib/core/experimental/sources/interceptor-source.js.map +1 -1
  74. package/lib/core/experimental/sources/interceptor-source.mjs +24 -13
  75. package/lib/core/experimental/sources/interceptor-source.mjs.map +1 -1
  76. package/lib/core/experimental/sources/network-source.d.mts +3 -3
  77. package/lib/core/experimental/sources/network-source.d.ts +3 -3
  78. package/lib/core/experimental/sources/network-source.js +1 -0
  79. package/lib/core/experimental/sources/network-source.js.map +1 -1
  80. package/lib/core/experimental/sources/network-source.mjs +2 -0
  81. package/lib/core/experimental/sources/network-source.mjs.map +1 -1
  82. package/lib/core/getResponse.d.mts +1 -1
  83. package/lib/core/getResponse.d.ts +1 -1
  84. package/lib/core/graphql.d.mts +1 -1
  85. package/lib/core/graphql.d.ts +1 -1
  86. package/lib/core/graphql.js +1 -0
  87. package/lib/core/graphql.js.map +1 -1
  88. package/lib/core/graphql.mjs +2 -0
  89. package/lib/core/graphql.mjs.map +1 -1
  90. package/lib/core/handlers/GraphQLHandler.d.mts +1 -1
  91. package/lib/core/handlers/GraphQLHandler.d.ts +1 -1
  92. package/lib/core/handlers/GraphQLHandler.js +1 -0
  93. package/lib/core/handlers/GraphQLHandler.js.map +1 -1
  94. package/lib/core/handlers/GraphQLHandler.mjs +4 -1
  95. package/lib/core/handlers/GraphQLHandler.mjs.map +1 -1
  96. package/lib/core/handlers/HttpHandler.d.mts +1 -1
  97. package/lib/core/handlers/HttpHandler.d.ts +1 -1
  98. package/lib/core/handlers/HttpHandler.js +1 -0
  99. package/lib/core/handlers/HttpHandler.js.map +1 -1
  100. package/lib/core/handlers/HttpHandler.mjs +1 -0
  101. package/lib/core/handlers/HttpHandler.mjs.map +1 -1
  102. package/lib/core/handlers/RequestHandler.d.mts +1 -1
  103. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  104. package/lib/core/handlers/RequestHandler.js +197 -4
  105. package/lib/core/handlers/RequestHandler.js.map +1 -1
  106. package/lib/core/handlers/RequestHandler.mjs +198 -4
  107. package/lib/core/handlers/RequestHandler.mjs.map +1 -1
  108. package/lib/core/handlers/WebSocketHandler.d.mts +5 -2
  109. package/lib/core/handlers/WebSocketHandler.d.ts +5 -2
  110. package/lib/core/handlers/WebSocketHandler.js +30 -12
  111. package/lib/core/handlers/WebSocketHandler.js.map +1 -1
  112. package/lib/core/handlers/WebSocketHandler.mjs +30 -12
  113. package/lib/core/handlers/WebSocketHandler.mjs.map +1 -1
  114. package/lib/core/http.d.mts +1 -1
  115. package/lib/core/http.d.ts +1 -1
  116. package/lib/core/http.js +1 -0
  117. package/lib/core/http.js.map +1 -1
  118. package/lib/core/http.mjs +2 -0
  119. package/lib/core/http.mjs.map +1 -1
  120. package/lib/core/index.d.mts +1 -1
  121. package/lib/core/index.d.ts +1 -1
  122. package/lib/core/{network-frame-usYiHS0K.d.ts → on-unhandled-frame-0KmwUmeV.d.ts} +13 -13
  123. package/lib/core/{network-frame-B7A0ggXE.d.mts → on-unhandled-frame-gkokW4Rr.d.mts} +13 -13
  124. package/lib/core/passthrough.d.mts +1 -1
  125. package/lib/core/passthrough.d.ts +1 -1
  126. package/lib/core/sse.d.mts +4 -18
  127. package/lib/core/sse.d.ts +4 -18
  128. package/lib/core/sse.js +149 -66
  129. package/lib/core/sse.js.map +1 -1
  130. package/lib/core/sse.mjs +149 -66
  131. package/lib/core/sse.mjs.map +1 -1
  132. package/lib/core/utils/HttpResponse/decorators.d.mts +9 -4
  133. package/lib/core/utils/HttpResponse/decorators.d.ts +9 -4
  134. package/lib/core/utils/HttpResponse/decorators.js +18 -11
  135. package/lib/core/utils/HttpResponse/decorators.js.map +1 -1
  136. package/lib/core/utils/HttpResponse/decorators.mjs +18 -11
  137. package/lib/core/utils/HttpResponse/decorators.mjs.map +1 -1
  138. package/lib/core/utils/cookieStore.js.map +1 -1
  139. package/lib/core/utils/cookieStore.mjs.map +1 -1
  140. package/lib/core/utils/executeHandlers.d.mts +1 -1
  141. package/lib/core/utils/executeHandlers.d.ts +1 -1
  142. package/lib/core/utils/executeHandlers.js +1 -0
  143. package/lib/core/utils/executeHandlers.js.map +1 -1
  144. package/lib/core/utils/executeHandlers.mjs +1 -0
  145. package/lib/core/utils/executeHandlers.mjs.map +1 -1
  146. package/lib/core/utils/handleRequest.d.mts +1 -1
  147. package/lib/core/utils/handleRequest.d.ts +1 -1
  148. package/lib/core/utils/handleRequest.js.map +1 -1
  149. package/lib/core/utils/handleRequest.mjs.map +1 -1
  150. package/lib/core/utils/internal/Disposable.js +19 -1
  151. package/lib/core/utils/internal/Disposable.js.map +1 -1
  152. package/lib/core/utils/internal/Disposable.mjs +19 -1
  153. package/lib/core/utils/internal/Disposable.mjs.map +1 -1
  154. package/lib/core/utils/internal/attachSiblingHandlers.d.mts +15 -0
  155. package/lib/core/utils/internal/attachSiblingHandlers.d.ts +15 -0
  156. package/lib/core/utils/internal/attachSiblingHandlers.js +44 -0
  157. package/lib/core/utils/internal/attachSiblingHandlers.js.map +1 -0
  158. package/lib/core/utils/internal/attachSiblingHandlers.mjs +24 -0
  159. package/lib/core/utils/internal/attachSiblingHandlers.mjs.map +1 -0
  160. package/lib/core/utils/internal/isHandlerKind.d.mts +1 -1
  161. package/lib/core/utils/internal/isHandlerKind.d.ts +1 -1
  162. package/lib/core/utils/internal/observe-response-body-stream.d.mts +18 -0
  163. package/lib/core/utils/internal/observe-response-body-stream.d.ts +18 -0
  164. package/lib/core/utils/internal/observe-response-body-stream.js +64 -0
  165. package/lib/core/utils/internal/observe-response-body-stream.js.map +1 -0
  166. package/lib/core/utils/internal/observe-response-body-stream.mjs +44 -0
  167. package/lib/core/utils/internal/observe-response-body-stream.mjs.map +1 -0
  168. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +1 -1
  169. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +1 -1
  170. package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
  171. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  172. package/lib/core/utils/internal/parseMultipartData.js +1 -0
  173. package/lib/core/utils/internal/parseMultipartData.js.map +1 -1
  174. package/lib/core/utils/internal/parseMultipartData.mjs +1 -0
  175. package/lib/core/utils/internal/parseMultipartData.mjs.map +1 -1
  176. package/lib/core/utils/internal/pipeEvents.js +1 -0
  177. package/lib/core/utils/internal/pipeEvents.js.map +1 -1
  178. package/lib/core/utils/internal/pipeEvents.mjs +1 -0
  179. package/lib/core/utils/internal/pipeEvents.mjs.map +1 -1
  180. package/lib/core/utils/request/storeResponseCookies.js +1 -1
  181. package/lib/core/utils/request/storeResponseCookies.js.map +1 -1
  182. package/lib/core/utils/request/storeResponseCookies.mjs +2 -2
  183. package/lib/core/utils/request/storeResponseCookies.mjs.map +1 -1
  184. package/lib/core/ws/WebSocketClientManager.js +4 -0
  185. package/lib/core/ws/WebSocketClientManager.js.map +1 -1
  186. package/lib/core/ws/WebSocketClientManager.mjs +4 -0
  187. package/lib/core/ws/WebSocketClientManager.mjs.map +1 -1
  188. package/lib/core/ws/WebSocketIndexedDBClientStore.js +1 -0
  189. package/lib/core/ws/WebSocketIndexedDBClientStore.js.map +1 -1
  190. package/lib/core/ws/WebSocketIndexedDBClientStore.mjs +1 -0
  191. package/lib/core/ws/WebSocketIndexedDBClientStore.mjs.map +1 -1
  192. package/lib/core/ws/WebSocketMemoryClientStore.js +1 -0
  193. package/lib/core/ws/WebSocketMemoryClientStore.js.map +1 -1
  194. package/lib/core/ws/WebSocketMemoryClientStore.mjs +1 -0
  195. package/lib/core/ws/WebSocketMemoryClientStore.mjs.map +1 -1
  196. package/lib/core/ws/handleWebSocketEvent.d.mts +1 -1
  197. package/lib/core/ws/handleWebSocketEvent.d.ts +1 -1
  198. package/lib/core/ws/handleWebSocketEvent.js.map +1 -1
  199. package/lib/core/ws/handleWebSocketEvent.mjs.map +1 -1
  200. package/lib/core/ws.d.mts +17 -4
  201. package/lib/core/ws.d.ts +17 -4
  202. package/lib/core/ws.js +30 -5
  203. package/lib/core/ws.js.map +1 -1
  204. package/lib/core/ws.mjs +34 -6
  205. package/lib/core/ws.mjs.map +1 -1
  206. package/lib/iife/index.js +10138 -6034
  207. package/lib/iife/index.js.map +1 -1
  208. package/lib/mockServiceWorker.js +21 -9
  209. package/lib/native/index.js.map +1 -1
  210. package/lib/native/index.mjs.map +1 -1
  211. package/lib/node/index.d.mts +1 -1
  212. package/lib/node/index.d.ts +1 -1
  213. package/lib/node/index.js +2 -0
  214. package/lib/node/index.js.map +1 -1
  215. package/lib/node/index.mjs +1 -0
  216. package/lib/node/index.mjs.map +1 -1
  217. package/lib/shims/cookie.js +152 -62
  218. package/lib/shims/cookie.mjs +152 -62
  219. package/package.json +52 -71
  220. package/src/browser/glossary.ts +1 -1
  221. package/src/browser/setup-worker.ts +2 -2
  222. package/src/browser/sources/service-worker-source.ts +142 -40
  223. package/src/browser/utils/deserializeRequest.ts +2 -2
  224. package/src/browser/utils/pruneGetRequestBody.ts +3 -3
  225. package/src/browser/utils/should-invalidate-worker.test.ts +122 -0
  226. package/src/browser/utils/should-invalidate-worker.ts +13 -0
  227. package/src/browser/utils/workerChannel.ts +43 -21
  228. package/src/core/experimental/define-network.ts +44 -15
  229. package/src/core/experimental/frames/http-frame.test.ts +8 -2
  230. package/src/core/experimental/frames/http-frame.ts +12 -4
  231. package/src/core/experimental/frames/websocket-frame.test.ts +2 -4
  232. package/src/core/experimental/frames/websocket-frame.ts +3 -2
  233. package/src/core/experimental/handlers-controller.test.ts +139 -5
  234. package/src/core/experimental/handlers-controller.ts +39 -10
  235. package/src/core/experimental/index.ts +11 -1
  236. package/src/core/experimental/on-unhandled-frame.test.ts +2 -4
  237. package/src/core/experimental/setup-api.ts +4 -8
  238. package/src/core/experimental/sources/interceptor-source.ts +36 -16
  239. package/src/core/experimental/sources/network-source.ts +1 -1
  240. package/src/core/graphql.ts +8 -8
  241. package/src/core/handlers/GraphQLHandler.test.ts +3 -4
  242. package/src/core/handlers/GraphQLHandler.ts +15 -11
  243. package/src/core/handlers/HttpHandler.test.ts +92 -2
  244. package/src/core/handlers/HttpHandler.ts +7 -7
  245. package/src/core/handlers/RequestHandler.ts +329 -22
  246. package/src/core/handlers/WebSocketHandler.test.ts +58 -0
  247. package/src/core/handlers/WebSocketHandler.ts +37 -8
  248. package/src/core/http.ts +5 -5
  249. package/src/core/sse.ts +217 -73
  250. package/src/core/utils/HttpResponse/decorators.ts +28 -22
  251. package/src/core/utils/cookieStore.ts +1 -1
  252. package/src/core/utils/executeHandlers.ts +2 -4
  253. package/src/core/utils/handleRequest.test.ts +5 -4
  254. package/src/core/utils/handleRequest.ts +3 -3
  255. package/src/core/utils/internal/Disposable.ts +22 -1
  256. package/src/core/utils/internal/attachSiblingHandlers.ts +28 -0
  257. package/src/core/utils/internal/observe-response-body-stream.test.ts +64 -0
  258. package/src/core/utils/internal/observe-response-body-stream.ts +77 -0
  259. package/src/core/utils/internal/parseGraphQLRequest.test.ts +2 -4
  260. package/src/core/utils/internal/parseMultipartData.ts +1 -1
  261. package/src/core/utils/internal/pipeEvents.ts +2 -1
  262. package/src/core/utils/request/onUnhandledRequest.test.ts +2 -4
  263. package/src/core/utils/request/storeResponseCookies.ts +2 -4
  264. package/src/core/ws/WebSocketClientManager.test.ts +2 -4
  265. package/src/core/ws/WebSocketClientManager.ts +1 -1
  266. package/src/core/ws/WebSocketIndexedDBClientStore.ts +3 -5
  267. package/src/core/ws/WebSocketMemoryClientStore.ts +3 -5
  268. package/src/core/ws/handleWebSocketEvent.ts +3 -3
  269. package/src/core/ws.ts +66 -7
  270. package/src/mockServiceWorker.js +19 -7
  271. package/src/native/index.ts +2 -2
  272. package/src/node/async-handlers-controller.ts +2 -2
  273. package/src/node/index.ts +1 -0
  274. package/src/node/setup-server-common.ts +4 -4
  275. package/src/node/setup-server.ts +2 -2
  276. package/lib/core/utils/internal/requestHandlerUtils.d.mts +0 -12
  277. package/lib/core/utils/internal/requestHandlerUtils.d.ts +0 -12
  278. package/lib/core/utils/internal/requestHandlerUtils.js +0 -37
  279. package/lib/core/utils/internal/requestHandlerUtils.js.map +0 -1
  280. package/lib/core/utils/internal/requestHandlerUtils.mjs +0 -17
  281. package/lib/core/utils/internal/requestHandlerUtils.mjs.map +0 -1
  282. package/src/core/utils/internal/requestHandlerUtils.ts +0 -21
@@ -24,12 +24,23 @@ __export(handlers_controller_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(handlers_controller_exports);
26
26
  var import_outvariant = require("outvariant");
27
+ var import_RequestHandler = require("../handlers/RequestHandler");
28
+ var import_WebSocketHandler = require("../handlers/WebSocketHandler");
27
29
  var import_devUtils = require("../utils/internal/devUtils");
30
+ var import_attachSiblingHandlers = require("../utils/internal/attachSiblingHandlers");
28
31
  function groupHandlersByKind(handlers) {
29
32
  const groups = {};
33
+ const pushUnique = (kind, handler) => {
34
+ const bucket = groups[kind] ||= [];
35
+ if (!bucket.includes(handler)) {
36
+ bucket.push(handler);
37
+ }
38
+ };
30
39
  for (const handler of handlers) {
31
- ;
32
- (groups[handler.kind] ||= []).push(handler);
40
+ pushUnique(handler.kind, handler);
41
+ for (const sibling of (0, import_attachSiblingHandlers.getSiblingHandlers)(handler)) {
42
+ pushUnique(sibling.kind, sibling);
43
+ }
33
44
  }
34
45
  return groups;
35
46
  }
@@ -38,7 +49,7 @@ class HandlersController {
38
49
  (0, import_outvariant.invariant)(
39
50
  this.#validateHandlers(initialHandlers),
40
51
  import_devUtils.devUtils.formatMessage(
41
- "[MSW] Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?"
52
+ "Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?"
42
53
  )
43
54
  );
44
55
  const normalizedInitialHandlers = groupHandlersByKind(initialHandlers);
@@ -64,9 +75,11 @@ class HandlersController {
64
75
  return;
65
76
  }
66
77
  const { handlers } = this.getState();
67
- for (let i = nextHandlers.length - 1; i >= 0; i--) {
68
- const handler = nextHandlers[i];
69
- handlers[handler.kind] = handlers[handler.kind] ? [handler, ...handlers[handler.kind]] : [handler];
78
+ const overrides = groupHandlersByKind(nextHandlers);
79
+ for (const kind in overrides) {
80
+ const overridesForKind = overrides[kind];
81
+ const existingForKind = handlers[kind];
82
+ handlers[kind] = existingForKind ? [...overridesForKind, ...existingForKind] : overridesForKind;
70
83
  }
71
84
  this.setState({ handlers });
72
85
  }
@@ -77,6 +90,11 @@ class HandlersController {
77
90
  "Failed to replace initial handlers during reset: invalid handlers. Did you forget to spread the handlers array?"
78
91
  )
79
92
  );
93
+ for (const handler of this.currentHandlers()) {
94
+ if ("reset" in handler) {
95
+ handler["reset"]();
96
+ }
97
+ }
80
98
  const { initialHandlers } = this.getState();
81
99
  if (nextHandlers.length === 0) {
82
100
  this.setState({
@@ -90,6 +108,13 @@ class HandlersController {
90
108
  handlers: { ...normalizedNextHandlers }
91
109
  });
92
110
  }
111
+ restore() {
112
+ for (const handler of this.currentHandlers()) {
113
+ if ("restore" in handler) {
114
+ handler["restore"]();
115
+ }
116
+ }
117
+ }
93
118
  #validateHandlers(handlers) {
94
119
  return handlers.every((handler) => !Array.isArray(handler));
95
120
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/experimental/handlers-controller.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { type RequestHandler } from '../handlers/RequestHandler'\nimport { type WebSocketHandler } from '../handlers/WebSocketHandler'\nimport { devUtils } from '../utils/internal/devUtils'\n\nexport type AnyHandler = RequestHandler | WebSocketHandler\nexport type HandlersMap = Partial<Record<AnyHandler['kind'], Array<AnyHandler>>>\n\nexport function groupHandlersByKind(handlers: Array<AnyHandler>): HandlersMap {\n const groups: HandlersMap = {}\n\n /**\n * @note `Object.groupBy` is not implemented in Node.js v20.\n */\n for (const handler of handlers) {\n ;(groups[handler.kind] ||= []).push(handler)\n }\n\n return groups\n}\n\nexport interface HandlersControllerState {\n initialHandlers: HandlersMap\n handlers: HandlersMap\n}\n\nexport abstract class HandlersController {\n protected getInitialState(\n initialHandlers: Array<AnyHandler>,\n ): HandlersControllerState {\n invariant(\n this.#validateHandlers(initialHandlers),\n devUtils.formatMessage(\n '[MSW] Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?',\n ),\n )\n\n const normalizedInitialHandlers = groupHandlersByKind(initialHandlers)\n\n return {\n initialHandlers: normalizedInitialHandlers,\n handlers: { ...normalizedInitialHandlers },\n }\n }\n\n protected abstract getState(): HandlersControllerState\n protected abstract setState(nextState: Partial<HandlersControllerState>): void\n\n public currentHandlers(): Array<AnyHandler> {\n return Object.values(this.getState().handlers)\n .flat()\n .filter((handler) => handler != null)\n }\n\n public getHandlersByKind(kind: AnyHandler['kind']): Array<AnyHandler> {\n return this.getState().handlers[kind] || []\n }\n\n public use(nextHandlers: Array<AnyHandler>): void {\n invariant(\n this.#validateHandlers(nextHandlers),\n devUtils.formatMessage(\n '[MSW] Failed to call \"use()\" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?',\n ),\n )\n\n if (nextHandlers.length === 0) {\n return\n }\n\n const { handlers } = this.getState()\n\n // Iterate over next handlers and prepend them to their respective lists.\n // Iterate in a reverse order to the keep the order of the runtime handlers as provided.\n for (let i = nextHandlers.length - 1; i >= 0; i--) {\n const handler = nextHandlers[i]\n handlers[handler.kind] = handlers[handler.kind]\n ? [handler, ...handlers[handler.kind]!]\n : [handler]\n }\n\n this.setState({ handlers })\n }\n\n public reset(nextHandlers: Array<AnyHandler>): void {\n invariant(\n nextHandlers.length > 0 ? this.#validateHandlers(nextHandlers) : true,\n devUtils.formatMessage(\n 'Failed to replace initial handlers during reset: invalid handlers. Did you forget to spread the handlers array?',\n ),\n )\n\n const { initialHandlers } = this.getState()\n\n if (nextHandlers.length === 0) {\n this.setState({\n handlers: { ...initialHandlers },\n })\n\n return\n }\n\n const normalizedNextHandlers = groupHandlersByKind(nextHandlers)\n\n this.setState({\n initialHandlers: normalizedNextHandlers,\n handlers: { ...normalizedNextHandlers },\n })\n }\n\n #validateHandlers(handlers: Array<AnyHandler>): boolean {\n return handlers.every((handler) => !Array.isArray(handler))\n }\n}\n\nexport class InMemoryHandlersController extends HandlersController {\n #handlers: HandlersMap\n #initialHandlers: HandlersMap\n\n constructor(initialHandlers: Array<AnyHandler>) {\n super()\n\n const initialState = this.getInitialState(initialHandlers)\n\n this.#initialHandlers = initialState.initialHandlers\n this.#handlers = initialState.handlers\n }\n\n protected getState(): HandlersControllerState {\n return {\n initialHandlers: this.#initialHandlers,\n handlers: this.#handlers,\n }\n }\n\n protected setState(nextState: Partial<HandlersControllerState>): void {\n if (nextState.initialHandlers) {\n this.#initialHandlers = nextState.initialHandlers\n }\n\n if (nextState.handlers) {\n this.#handlers = nextState.handlers\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA0B;AAG1B,sBAAyB;AAKlB,SAAS,oBAAoB,UAA0C;AAC5E,QAAM,SAAsB,CAAC;AAK7B,aAAW,WAAW,UAAU;AAC9B;AAAC,KAAC,OAAO,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO;AAAA,EAC7C;AAEA,SAAO;AACT;AAOO,MAAe,mBAAmB;AAAA,EAC7B,gBACR,iBACyB;AACzB;AAAA,MACE,KAAK,kBAAkB,eAAe;AAAA,MACtC,yBAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,UAAM,4BAA4B,oBAAoB,eAAe;AAErE,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,UAAU,EAAE,GAAG,0BAA0B;AAAA,IAC3C;AAAA,EACF;AAAA,EAKO,kBAAqC;AAC1C,WAAO,OAAO,OAAO,KAAK,SAAS,EAAE,QAAQ,EAC1C,KAAK,EACL,OAAO,CAAC,YAAY,WAAW,IAAI;AAAA,EACxC;AAAA,EAEO,kBAAkB,MAA6C;AACpE,WAAO,KAAK,SAAS,EAAE,SAAS,IAAI,KAAK,CAAC;AAAA,EAC5C;AAAA,EAEO,IAAI,cAAuC;AAChD;AAAA,MACE,KAAK,kBAAkB,YAAY;AAAA,MACnC,yBAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,QAAI,aAAa,WAAW,GAAG;AAC7B;AAAA,IACF;AAEA,UAAM,EAAE,SAAS,IAAI,KAAK,SAAS;AAInC,aAAS,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AACjD,YAAM,UAAU,aAAa,CAAC;AAC9B,eAAS,QAAQ,IAAI,IAAI,SAAS,QAAQ,IAAI,IAC1C,CAAC,SAAS,GAAG,SAAS,QAAQ,IAAI,CAAE,IACpC,CAAC,OAAO;AAAA,IACd;AAEA,SAAK,SAAS,EAAE,SAAS,CAAC;AAAA,EAC5B;AAAA,EAEO,MAAM,cAAuC;AAClD;AAAA,MACE,aAAa,SAAS,IAAI,KAAK,kBAAkB,YAAY,IAAI;AAAA,MACjE,yBAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,UAAM,EAAE,gBAAgB,IAAI,KAAK,SAAS;AAE1C,QAAI,aAAa,WAAW,GAAG;AAC7B,WAAK,SAAS;AAAA,QACZ,UAAU,EAAE,GAAG,gBAAgB;AAAA,MACjC,CAAC;AAED;AAAA,IACF;AAEA,UAAM,yBAAyB,oBAAoB,YAAY;AAE/D,SAAK,SAAS;AAAA,MACZ,iBAAiB;AAAA,MACjB,UAAU,EAAE,GAAG,uBAAuB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,kBAAkB,UAAsC;AACtD,WAAO,SAAS,MAAM,CAAC,YAAY,CAAC,MAAM,QAAQ,OAAO,CAAC;AAAA,EAC5D;AACF;AAEO,MAAM,mCAAmC,mBAAmB;AAAA,EACjE;AAAA,EACA;AAAA,EAEA,YAAY,iBAAoC;AAC9C,UAAM;AAEN,UAAM,eAAe,KAAK,gBAAgB,eAAe;AAEzD,SAAK,mBAAmB,aAAa;AACrC,SAAK,YAAY,aAAa;AAAA,EAChC;AAAA,EAEU,WAAoC;AAC5C,WAAO;AAAA,MACL,iBAAiB,KAAK;AAAA,MACtB,UAAU,KAAK;AAAA,IACjB;AAAA,EACF;AAAA,EAEU,SAAS,WAAmD;AACpE,QAAI,UAAU,iBAAiB;AAC7B,WAAK,mBAAmB,UAAU;AAAA,IACpC;AAEA,QAAI,UAAU,UAAU;AACtB,WAAK,YAAY,UAAU;AAAA,IAC7B;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/experimental/handlers-controller.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { type RequestHandler } from '../handlers/RequestHandler'\nimport { type WebSocketHandler } from '../handlers/WebSocketHandler'\nimport { devUtils } from '../utils/internal/devUtils'\nimport { getSiblingHandlers } from '../utils/internal/attachSiblingHandlers'\n\nexport type AnyHandler = RequestHandler | WebSocketHandler\nexport type HandlersMap = Partial<Record<AnyHandler['kind'], Array<AnyHandler>>>\n\nexport function groupHandlersByKind(handlers: Array<AnyHandler>): HandlersMap {\n const groups: HandlersMap = {}\n\n const pushUnique = (kind: AnyHandler['kind'], handler: AnyHandler) => {\n const bucket = (groups[kind] ||= [])\n\n if (!bucket.includes(handler)) {\n bucket.push(handler)\n }\n }\n\n /**\n * @note `Object.groupBy` is not implemented in Node.js v20.\n */\n for (const handler of handlers) {\n pushUnique(handler.kind, handler)\n\n for (const sibling of getSiblingHandlers(handler)) {\n pushUnique(sibling.kind, sibling)\n }\n }\n\n return groups\n}\n\nexport interface HandlersControllerState {\n initialHandlers: HandlersMap\n handlers: HandlersMap\n}\n\nexport abstract class HandlersController {\n protected getInitialState(\n initialHandlers: Array<AnyHandler>,\n ): HandlersControllerState {\n invariant(\n this.#validateHandlers(initialHandlers),\n devUtils.formatMessage(\n 'Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?',\n ),\n )\n\n const normalizedInitialHandlers = groupHandlersByKind(initialHandlers)\n\n return {\n initialHandlers: normalizedInitialHandlers,\n handlers: { ...normalizedInitialHandlers },\n }\n }\n\n protected abstract getState(): HandlersControllerState\n protected abstract setState(nextState: Partial<HandlersControllerState>): void\n\n public currentHandlers(): Array<AnyHandler> {\n return Object.values(this.getState().handlers)\n .flat()\n .filter((handler) => handler != null)\n }\n\n public getHandlersByKind(kind: AnyHandler['kind']): Array<AnyHandler> {\n return this.getState().handlers[kind] || []\n }\n\n public use(nextHandlers: Array<AnyHandler>): void {\n invariant(\n this.#validateHandlers(nextHandlers),\n devUtils.formatMessage(\n '[MSW] Failed to call \"use()\" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?',\n ),\n )\n\n if (nextHandlers.length === 0) {\n return\n }\n\n const { handlers } = this.getState()\n const overrides = groupHandlersByKind(nextHandlers)\n\n // Prepend overrides to their respective kind buckets so they take\n // priority over existing handlers while preserving input order.\n for (const kind in overrides) {\n const overridesForKind = overrides[kind as AnyHandler['kind']]!\n const existingForKind = handlers[kind as AnyHandler['kind']]\n handlers[kind as AnyHandler['kind']] = existingForKind\n ? [...overridesForKind, ...existingForKind]\n : overridesForKind\n }\n\n this.setState({ handlers })\n }\n\n public reset(nextHandlers: Array<AnyHandler>): void {\n invariant(\n nextHandlers.length > 0 ? this.#validateHandlers(nextHandlers) : true,\n devUtils.formatMessage(\n 'Failed to replace initial handlers during reset: invalid handlers. Did you forget to spread the handlers array?',\n ),\n )\n\n for (const handler of this.currentHandlers()) {\n if ('reset' in handler) {\n handler['reset']()\n }\n }\n\n const { initialHandlers } = this.getState()\n\n if (nextHandlers.length === 0) {\n this.setState({\n handlers: { ...initialHandlers },\n })\n\n return\n }\n\n const normalizedNextHandlers = groupHandlersByKind(nextHandlers)\n\n this.setState({\n initialHandlers: normalizedNextHandlers,\n handlers: { ...normalizedNextHandlers },\n })\n }\n\n public restore(): void {\n for (const handler of this.currentHandlers()) {\n if ('restore' in handler) {\n handler['restore']()\n }\n }\n }\n\n #validateHandlers(handlers: Array<AnyHandler>): boolean {\n return handlers.every((handler) => !Array.isArray(handler))\n }\n}\n\nexport class InMemoryHandlersController extends HandlersController {\n #handlers: HandlersMap\n #initialHandlers: HandlersMap\n\n constructor(initialHandlers: Array<AnyHandler>) {\n super()\n\n const initialState = this.getInitialState(initialHandlers)\n\n this.#initialHandlers = initialState.initialHandlers\n this.#handlers = initialState.handlers\n }\n\n protected getState(): HandlersControllerState {\n return {\n initialHandlers: this.#initialHandlers,\n handlers: this.#handlers,\n }\n }\n\n protected setState(nextState: Partial<HandlersControllerState>): void {\n if (nextState.initialHandlers) {\n this.#initialHandlers = nextState.initialHandlers\n }\n\n if (nextState.handlers) {\n this.#handlers = nextState.handlers\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,10 +1,21 @@
1
1
  import { invariant } from "outvariant";
2
+ import {} from '../handlers/RequestHandler.mjs';
3
+ import {} from '../handlers/WebSocketHandler.mjs';
2
4
  import { devUtils } from '../utils/internal/devUtils.mjs';
5
+ import { getSiblingHandlers } from '../utils/internal/attachSiblingHandlers.mjs';
3
6
  function groupHandlersByKind(handlers) {
4
7
  const groups = {};
8
+ const pushUnique = (kind, handler) => {
9
+ const bucket = groups[kind] ||= [];
10
+ if (!bucket.includes(handler)) {
11
+ bucket.push(handler);
12
+ }
13
+ };
5
14
  for (const handler of handlers) {
6
- ;
7
- (groups[handler.kind] ||= []).push(handler);
15
+ pushUnique(handler.kind, handler);
16
+ for (const sibling of getSiblingHandlers(handler)) {
17
+ pushUnique(sibling.kind, sibling);
18
+ }
8
19
  }
9
20
  return groups;
10
21
  }
@@ -13,7 +24,7 @@ class HandlersController {
13
24
  invariant(
14
25
  this.#validateHandlers(initialHandlers),
15
26
  devUtils.formatMessage(
16
- "[MSW] Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?"
27
+ "Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?"
17
28
  )
18
29
  );
19
30
  const normalizedInitialHandlers = groupHandlersByKind(initialHandlers);
@@ -39,9 +50,11 @@ class HandlersController {
39
50
  return;
40
51
  }
41
52
  const { handlers } = this.getState();
42
- for (let i = nextHandlers.length - 1; i >= 0; i--) {
43
- const handler = nextHandlers[i];
44
- handlers[handler.kind] = handlers[handler.kind] ? [handler, ...handlers[handler.kind]] : [handler];
53
+ const overrides = groupHandlersByKind(nextHandlers);
54
+ for (const kind in overrides) {
55
+ const overridesForKind = overrides[kind];
56
+ const existingForKind = handlers[kind];
57
+ handlers[kind] = existingForKind ? [...overridesForKind, ...existingForKind] : overridesForKind;
45
58
  }
46
59
  this.setState({ handlers });
47
60
  }
@@ -52,6 +65,11 @@ class HandlersController {
52
65
  "Failed to replace initial handlers during reset: invalid handlers. Did you forget to spread the handlers array?"
53
66
  )
54
67
  );
68
+ for (const handler of this.currentHandlers()) {
69
+ if ("reset" in handler) {
70
+ handler["reset"]();
71
+ }
72
+ }
55
73
  const { initialHandlers } = this.getState();
56
74
  if (nextHandlers.length === 0) {
57
75
  this.setState({
@@ -65,6 +83,13 @@ class HandlersController {
65
83
  handlers: { ...normalizedNextHandlers }
66
84
  });
67
85
  }
86
+ restore() {
87
+ for (const handler of this.currentHandlers()) {
88
+ if ("restore" in handler) {
89
+ handler["restore"]();
90
+ }
91
+ }
92
+ }
68
93
  #validateHandlers(handlers) {
69
94
  return handlers.every((handler) => !Array.isArray(handler));
70
95
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/experimental/handlers-controller.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { type RequestHandler } from '../handlers/RequestHandler'\nimport { type WebSocketHandler } from '../handlers/WebSocketHandler'\nimport { devUtils } from '../utils/internal/devUtils'\n\nexport type AnyHandler = RequestHandler | WebSocketHandler\nexport type HandlersMap = Partial<Record<AnyHandler['kind'], Array<AnyHandler>>>\n\nexport function groupHandlersByKind(handlers: Array<AnyHandler>): HandlersMap {\n const groups: HandlersMap = {}\n\n /**\n * @note `Object.groupBy` is not implemented in Node.js v20.\n */\n for (const handler of handlers) {\n ;(groups[handler.kind] ||= []).push(handler)\n }\n\n return groups\n}\n\nexport interface HandlersControllerState {\n initialHandlers: HandlersMap\n handlers: HandlersMap\n}\n\nexport abstract class HandlersController {\n protected getInitialState(\n initialHandlers: Array<AnyHandler>,\n ): HandlersControllerState {\n invariant(\n this.#validateHandlers(initialHandlers),\n devUtils.formatMessage(\n '[MSW] Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?',\n ),\n )\n\n const normalizedInitialHandlers = groupHandlersByKind(initialHandlers)\n\n return {\n initialHandlers: normalizedInitialHandlers,\n handlers: { ...normalizedInitialHandlers },\n }\n }\n\n protected abstract getState(): HandlersControllerState\n protected abstract setState(nextState: Partial<HandlersControllerState>): void\n\n public currentHandlers(): Array<AnyHandler> {\n return Object.values(this.getState().handlers)\n .flat()\n .filter((handler) => handler != null)\n }\n\n public getHandlersByKind(kind: AnyHandler['kind']): Array<AnyHandler> {\n return this.getState().handlers[kind] || []\n }\n\n public use(nextHandlers: Array<AnyHandler>): void {\n invariant(\n this.#validateHandlers(nextHandlers),\n devUtils.formatMessage(\n '[MSW] Failed to call \"use()\" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?',\n ),\n )\n\n if (nextHandlers.length === 0) {\n return\n }\n\n const { handlers } = this.getState()\n\n // Iterate over next handlers and prepend them to their respective lists.\n // Iterate in a reverse order to the keep the order of the runtime handlers as provided.\n for (let i = nextHandlers.length - 1; i >= 0; i--) {\n const handler = nextHandlers[i]\n handlers[handler.kind] = handlers[handler.kind]\n ? [handler, ...handlers[handler.kind]!]\n : [handler]\n }\n\n this.setState({ handlers })\n }\n\n public reset(nextHandlers: Array<AnyHandler>): void {\n invariant(\n nextHandlers.length > 0 ? this.#validateHandlers(nextHandlers) : true,\n devUtils.formatMessage(\n 'Failed to replace initial handlers during reset: invalid handlers. Did you forget to spread the handlers array?',\n ),\n )\n\n const { initialHandlers } = this.getState()\n\n if (nextHandlers.length === 0) {\n this.setState({\n handlers: { ...initialHandlers },\n })\n\n return\n }\n\n const normalizedNextHandlers = groupHandlersByKind(nextHandlers)\n\n this.setState({\n initialHandlers: normalizedNextHandlers,\n handlers: { ...normalizedNextHandlers },\n })\n }\n\n #validateHandlers(handlers: Array<AnyHandler>): boolean {\n return handlers.every((handler) => !Array.isArray(handler))\n }\n}\n\nexport class InMemoryHandlersController extends HandlersController {\n #handlers: HandlersMap\n #initialHandlers: HandlersMap\n\n constructor(initialHandlers: Array<AnyHandler>) {\n super()\n\n const initialState = this.getInitialState(initialHandlers)\n\n this.#initialHandlers = initialState.initialHandlers\n this.#handlers = initialState.handlers\n }\n\n protected getState(): HandlersControllerState {\n return {\n initialHandlers: this.#initialHandlers,\n handlers: this.#handlers,\n }\n }\n\n protected setState(nextState: Partial<HandlersControllerState>): void {\n if (nextState.initialHandlers) {\n this.#initialHandlers = nextState.initialHandlers\n }\n\n if (nextState.handlers) {\n this.#handlers = nextState.handlers\n }\n }\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAG1B,SAAS,gBAAgB;AAKlB,SAAS,oBAAoB,UAA0C;AAC5E,QAAM,SAAsB,CAAC;AAK7B,aAAW,WAAW,UAAU;AAC9B;AAAC,KAAC,OAAO,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO;AAAA,EAC7C;AAEA,SAAO;AACT;AAOO,MAAe,mBAAmB;AAAA,EAC7B,gBACR,iBACyB;AACzB;AAAA,MACE,KAAK,kBAAkB,eAAe;AAAA,MACtC,SAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,UAAM,4BAA4B,oBAAoB,eAAe;AAErE,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,UAAU,EAAE,GAAG,0BAA0B;AAAA,IAC3C;AAAA,EACF;AAAA,EAKO,kBAAqC;AAC1C,WAAO,OAAO,OAAO,KAAK,SAAS,EAAE,QAAQ,EAC1C,KAAK,EACL,OAAO,CAAC,YAAY,WAAW,IAAI;AAAA,EACxC;AAAA,EAEO,kBAAkB,MAA6C;AACpE,WAAO,KAAK,SAAS,EAAE,SAAS,IAAI,KAAK,CAAC;AAAA,EAC5C;AAAA,EAEO,IAAI,cAAuC;AAChD;AAAA,MACE,KAAK,kBAAkB,YAAY;AAAA,MACnC,SAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,QAAI,aAAa,WAAW,GAAG;AAC7B;AAAA,IACF;AAEA,UAAM,EAAE,SAAS,IAAI,KAAK,SAAS;AAInC,aAAS,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AACjD,YAAM,UAAU,aAAa,CAAC;AAC9B,eAAS,QAAQ,IAAI,IAAI,SAAS,QAAQ,IAAI,IAC1C,CAAC,SAAS,GAAG,SAAS,QAAQ,IAAI,CAAE,IACpC,CAAC,OAAO;AAAA,IACd;AAEA,SAAK,SAAS,EAAE,SAAS,CAAC;AAAA,EAC5B;AAAA,EAEO,MAAM,cAAuC;AAClD;AAAA,MACE,aAAa,SAAS,IAAI,KAAK,kBAAkB,YAAY,IAAI;AAAA,MACjE,SAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,UAAM,EAAE,gBAAgB,IAAI,KAAK,SAAS;AAE1C,QAAI,aAAa,WAAW,GAAG;AAC7B,WAAK,SAAS;AAAA,QACZ,UAAU,EAAE,GAAG,gBAAgB;AAAA,MACjC,CAAC;AAED;AAAA,IACF;AAEA,UAAM,yBAAyB,oBAAoB,YAAY;AAE/D,SAAK,SAAS;AAAA,MACZ,iBAAiB;AAAA,MACjB,UAAU,EAAE,GAAG,uBAAuB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,kBAAkB,UAAsC;AACtD,WAAO,SAAS,MAAM,CAAC,YAAY,CAAC,MAAM,QAAQ,OAAO,CAAC;AAAA,EAC5D;AACF;AAEO,MAAM,mCAAmC,mBAAmB;AAAA,EACjE;AAAA,EACA;AAAA,EAEA,YAAY,iBAAoC;AAC9C,UAAM;AAEN,UAAM,eAAe,KAAK,gBAAgB,eAAe;AAEzD,SAAK,mBAAmB,aAAa;AACrC,SAAK,YAAY,aAAa;AAAA,EAChC;AAAA,EAEU,WAAoC;AAC5C,WAAO;AAAA,MACL,iBAAiB,KAAK;AAAA,MACtB,UAAU,KAAK;AAAA,IACjB;AAAA,EACF;AAAA,EAEU,SAAS,WAAmD;AACpE,QAAI,UAAU,iBAAiB;AAC7B,WAAK,mBAAmB,UAAU;AAAA,IACpC;AAEA,QAAI,UAAU,UAAU;AACtB,WAAK,YAAY,UAAU;AAAA,IAC7B;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/experimental/handlers-controller.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { type RequestHandler } from '../handlers/RequestHandler'\nimport { type WebSocketHandler } from '../handlers/WebSocketHandler'\nimport { devUtils } from '../utils/internal/devUtils'\nimport { getSiblingHandlers } from '../utils/internal/attachSiblingHandlers'\n\nexport type AnyHandler = RequestHandler | WebSocketHandler\nexport type HandlersMap = Partial<Record<AnyHandler['kind'], Array<AnyHandler>>>\n\nexport function groupHandlersByKind(handlers: Array<AnyHandler>): HandlersMap {\n const groups: HandlersMap = {}\n\n const pushUnique = (kind: AnyHandler['kind'], handler: AnyHandler) => {\n const bucket = (groups[kind] ||= [])\n\n if (!bucket.includes(handler)) {\n bucket.push(handler)\n }\n }\n\n /**\n * @note `Object.groupBy` is not implemented in Node.js v20.\n */\n for (const handler of handlers) {\n pushUnique(handler.kind, handler)\n\n for (const sibling of getSiblingHandlers(handler)) {\n pushUnique(sibling.kind, sibling)\n }\n }\n\n return groups\n}\n\nexport interface HandlersControllerState {\n initialHandlers: HandlersMap\n handlers: HandlersMap\n}\n\nexport abstract class HandlersController {\n protected getInitialState(\n initialHandlers: Array<AnyHandler>,\n ): HandlersControllerState {\n invariant(\n this.#validateHandlers(initialHandlers),\n devUtils.formatMessage(\n 'Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?',\n ),\n )\n\n const normalizedInitialHandlers = groupHandlersByKind(initialHandlers)\n\n return {\n initialHandlers: normalizedInitialHandlers,\n handlers: { ...normalizedInitialHandlers },\n }\n }\n\n protected abstract getState(): HandlersControllerState\n protected abstract setState(nextState: Partial<HandlersControllerState>): void\n\n public currentHandlers(): Array<AnyHandler> {\n return Object.values(this.getState().handlers)\n .flat()\n .filter((handler) => handler != null)\n }\n\n public getHandlersByKind(kind: AnyHandler['kind']): Array<AnyHandler> {\n return this.getState().handlers[kind] || []\n }\n\n public use(nextHandlers: Array<AnyHandler>): void {\n invariant(\n this.#validateHandlers(nextHandlers),\n devUtils.formatMessage(\n '[MSW] Failed to call \"use()\" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?',\n ),\n )\n\n if (nextHandlers.length === 0) {\n return\n }\n\n const { handlers } = this.getState()\n const overrides = groupHandlersByKind(nextHandlers)\n\n // Prepend overrides to their respective kind buckets so they take\n // priority over existing handlers while preserving input order.\n for (const kind in overrides) {\n const overridesForKind = overrides[kind as AnyHandler['kind']]!\n const existingForKind = handlers[kind as AnyHandler['kind']]\n handlers[kind as AnyHandler['kind']] = existingForKind\n ? [...overridesForKind, ...existingForKind]\n : overridesForKind\n }\n\n this.setState({ handlers })\n }\n\n public reset(nextHandlers: Array<AnyHandler>): void {\n invariant(\n nextHandlers.length > 0 ? this.#validateHandlers(nextHandlers) : true,\n devUtils.formatMessage(\n 'Failed to replace initial handlers during reset: invalid handlers. Did you forget to spread the handlers array?',\n ),\n )\n\n for (const handler of this.currentHandlers()) {\n if ('reset' in handler) {\n handler['reset']()\n }\n }\n\n const { initialHandlers } = this.getState()\n\n if (nextHandlers.length === 0) {\n this.setState({\n handlers: { ...initialHandlers },\n })\n\n return\n }\n\n const normalizedNextHandlers = groupHandlersByKind(nextHandlers)\n\n this.setState({\n initialHandlers: normalizedNextHandlers,\n handlers: { ...normalizedNextHandlers },\n })\n }\n\n public restore(): void {\n for (const handler of this.currentHandlers()) {\n if ('restore' in handler) {\n handler['restore']()\n }\n }\n }\n\n #validateHandlers(handlers: Array<AnyHandler>): boolean {\n return handlers.every((handler) => !Array.isArray(handler))\n }\n}\n\nexport class InMemoryHandlersController extends HandlersController {\n #handlers: HandlersMap\n #initialHandlers: HandlersMap\n\n constructor(initialHandlers: Array<AnyHandler>) {\n super()\n\n const initialState = this.getInitialState(initialHandlers)\n\n this.#initialHandlers = initialState.initialHandlers\n this.#handlers = initialState.handlers\n }\n\n protected getState(): HandlersControllerState {\n return {\n initialHandlers: this.#initialHandlers,\n handlers: this.#handlers,\n }\n }\n\n protected setState(nextState: Partial<HandlersControllerState>): void {\n if (nextState.initialHandlers) {\n this.#initialHandlers = nextState.initialHandlers\n }\n\n if (nextState.handlers) {\n this.#handlers = nextState.handlers\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,17 +1,17 @@
1
- export { DefineNetworkOptions, defineNetwork } from './define-network.mjs';
1
+ export { DefineNetworkOptions, NetworkApi, defineNetwork } from './define-network.mjs';
2
2
  export { NetworkSource } from './sources/network-source.mjs';
3
3
  export { InterceptorSource } from './sources/interceptor-source.mjs';
4
- export { N as NetworkFrame } from '../network-frame-B7A0ggXE.mjs';
4
+ export { N as NetworkFrame } from '../on-unhandled-frame-gkokW4Rr.mjs';
5
5
  export { HttpNetworkFrame, HttpNetworkFrameEventMap } from './frames/http-frame.mjs';
6
6
  export { WebSocketNetworkFrame, WebSocketNetworkFrameEventMap } from './frames/websocket-frame.mjs';
7
+ export { HandlersController, InMemoryHandlersController } from './handlers-controller.mjs';
7
8
  import 'rettime';
8
- import './handlers-controller.mjs';
9
- import '../HttpResponse-DlRR1D-f.mjs';
10
9
  import '@mswjs/interceptors';
10
+ import '@mswjs/interceptors/WebSocket';
11
+ import '../HttpResponse-BE_Y2Ak9.mjs';
11
12
  import '../utils/internal/isIterable.mjs';
12
13
  import '../typeUtils.mjs';
13
14
  import 'graphql';
14
15
  import '../utils/matching/matchRequestUrl.mjs';
15
16
  import '../handlers/WebSocketHandler.mjs';
16
17
  import 'strict-event-emitter';
17
- import '@mswjs/interceptors/WebSocket';
@@ -1,17 +1,17 @@
1
- export { DefineNetworkOptions, defineNetwork } from './define-network.js';
1
+ export { DefineNetworkOptions, NetworkApi, defineNetwork } from './define-network.js';
2
2
  export { NetworkSource } from './sources/network-source.js';
3
3
  export { InterceptorSource } from './sources/interceptor-source.js';
4
- export { N as NetworkFrame } from '../network-frame-usYiHS0K.js';
4
+ export { N as NetworkFrame } from '../on-unhandled-frame-0KmwUmeV.js';
5
5
  export { HttpNetworkFrame, HttpNetworkFrameEventMap } from './frames/http-frame.js';
6
6
  export { WebSocketNetworkFrame, WebSocketNetworkFrameEventMap } from './frames/websocket-frame.js';
7
+ export { HandlersController, InMemoryHandlersController } from './handlers-controller.js';
7
8
  import 'rettime';
8
- import './handlers-controller.js';
9
- import '../HttpResponse-CksOMVAa.js';
10
9
  import '@mswjs/interceptors';
10
+ import '@mswjs/interceptors/WebSocket';
11
+ import '../HttpResponse-DL-P1EeG.js';
11
12
  import '../utils/internal/isIterable.js';
12
13
  import '../typeUtils.js';
13
14
  import 'graphql';
14
15
  import '../utils/matching/matchRequestUrl.js';
15
16
  import '../handlers/WebSocketHandler.js';
16
17
  import 'strict-event-emitter';
17
- import '@mswjs/interceptors/WebSocket';
@@ -18,8 +18,9 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var experimental_exports = {};
20
20
  __export(experimental_exports, {
21
- DefineNetworkOptions: () => import_define_network.DefineNetworkOptions,
21
+ HandlersController: () => import_handlers_controller.HandlersController,
22
22
  HttpNetworkFrame: () => import_http_frame.HttpNetworkFrame,
23
+ InMemoryHandlersController: () => import_handlers_controller.InMemoryHandlersController,
23
24
  InterceptorSource: () => import_interceptor_source.InterceptorSource,
24
25
  NetworkFrame: () => import_network_frame.NetworkFrame,
25
26
  NetworkSource: () => import_network_source.NetworkSource,
@@ -33,4 +34,5 @@ var import_interceptor_source = require("./sources/interceptor-source");
33
34
  var import_network_frame = require("./frames/network-frame");
34
35
  var import_http_frame = require("./frames/http-frame");
35
36
  var import_websocket_frame = require("./frames/websocket-frame");
37
+ var import_handlers_controller = require("./handlers-controller");
36
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/experimental/index.ts"],"sourcesContent":["export { defineNetwork, DefineNetworkOptions } from './define-network'\n\n/* Network sources */\nexport { NetworkSource } from './sources/network-source'\nexport { InterceptorSource } from './sources/interceptor-source'\n\n/* Frames */\nexport { NetworkFrame } from './frames/network-frame'\nexport {\n HttpNetworkFrame,\n type HttpNetworkFrameEventMap,\n} from './frames/http-frame'\nexport {\n WebSocketNetworkFrame,\n type WebSocketNetworkFrameEventMap,\n} from './frames/websocket-frame'\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAoD;AAGpD,4BAA8B;AAC9B,gCAAkC;AAGlC,2BAA6B;AAC7B,wBAGO;AACP,6BAGO;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/experimental/index.ts"],"sourcesContent":["export {\n defineNetwork,\n type DefineNetworkOptions,\n type NetworkApi,\n} from './define-network'\n\n/* Network sources */\nexport { NetworkSource } from './sources/network-source'\nexport { InterceptorSource } from './sources/interceptor-source'\n\n/* Frames */\nexport { NetworkFrame } from './frames/network-frame'\nexport {\n HttpNetworkFrame,\n type HttpNetworkFrameEventMap,\n} from './frames/http-frame'\nexport {\n WebSocketNetworkFrame,\n type WebSocketNetworkFrameEventMap,\n} from './frames/websocket-frame'\n\n/* Handler controllers */\nexport {\n HandlersController,\n InMemoryHandlersController,\n} from './handlers-controller'\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAIO;AAGP,4BAA8B;AAC9B,gCAAkC;AAGlC,2BAA6B;AAC7B,wBAGO;AACP,6BAGO;AAGP,iCAGO;","names":[]}
@@ -1,4 +1,6 @@
1
- import { defineNetwork, DefineNetworkOptions } from './define-network.mjs';
1
+ import {
2
+ defineNetwork
3
+ } from './define-network.mjs';
2
4
  import { NetworkSource } from './sources/network-source.mjs';
3
5
  import { InterceptorSource } from './sources/interceptor-source.mjs';
4
6
  import { NetworkFrame } from './frames/network-frame.mjs';
@@ -8,9 +10,14 @@ import {
8
10
  import {
9
11
  WebSocketNetworkFrame
10
12
  } from './frames/websocket-frame.mjs';
13
+ import {
14
+ HandlersController,
15
+ InMemoryHandlersController
16
+ } from './handlers-controller.mjs';
11
17
  export {
12
- DefineNetworkOptions,
18
+ HandlersController,
13
19
  HttpNetworkFrame,
20
+ InMemoryHandlersController,
14
21
  InterceptorSource,
15
22
  NetworkFrame,
16
23
  NetworkSource,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/experimental/index.ts"],"sourcesContent":["export { defineNetwork, DefineNetworkOptions } from './define-network'\n\n/* Network sources */\nexport { NetworkSource } from './sources/network-source'\nexport { InterceptorSource } from './sources/interceptor-source'\n\n/* Frames */\nexport { NetworkFrame } from './frames/network-frame'\nexport {\n HttpNetworkFrame,\n type HttpNetworkFrameEventMap,\n} from './frames/http-frame'\nexport {\n WebSocketNetworkFrame,\n type WebSocketNetworkFrameEventMap,\n} from './frames/websocket-frame'\n"],"mappings":"AAAA,SAAS,eAAe,4BAA4B;AAGpD,SAAS,qBAAqB;AAC9B,SAAS,yBAAyB;AAGlC,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,OAEK;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/experimental/index.ts"],"sourcesContent":["export {\n defineNetwork,\n type DefineNetworkOptions,\n type NetworkApi,\n} from './define-network'\n\n/* Network sources */\nexport { NetworkSource } from './sources/network-source'\nexport { InterceptorSource } from './sources/interceptor-source'\n\n/* Frames */\nexport { NetworkFrame } from './frames/network-frame'\nexport {\n HttpNetworkFrame,\n type HttpNetworkFrameEventMap,\n} from './frames/http-frame'\nexport {\n WebSocketNetworkFrame,\n type WebSocketNetworkFrameEventMap,\n} from './frames/websocket-frame'\n\n/* Handler controllers */\nexport {\n HandlersController,\n InMemoryHandlersController,\n} from './handlers-controller'\n"],"mappings":"AAAA;AAAA,EACE;AAAA,OAGK;AAGP,SAAS,qBAAqB;AAC9B,SAAS,yBAAyB;AAGlC,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,OAEK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,OACK;","names":[]}
@@ -1,7 +1,7 @@
1
- export { U as UnhandledFrameCallback, d as UnhandledFrameDefaults, b as UnhandledFrameHandle, c as UnhandledFrameStrategy, e as executeUnhandledFrameHandle } from '../network-frame-B7A0ggXE.mjs';
1
+ export { U as UnhandledFrameCallback, c as UnhandledFrameDefaults, b as UnhandledFrameHandle, d as UnhandledFrameStrategy, e as executeUnhandledFrameHandle } from '../on-unhandled-frame-gkokW4Rr.mjs';
2
2
  import 'rettime';
3
3
  import './handlers-controller.mjs';
4
- import '../HttpResponse-DlRR1D-f.mjs';
4
+ import '../HttpResponse-BE_Y2Ak9.mjs';
5
5
  import '@mswjs/interceptors';
6
6
  import '../utils/internal/isIterable.mjs';
7
7
  import '../typeUtils.mjs';
@@ -1,7 +1,7 @@
1
- export { U as UnhandledFrameCallback, d as UnhandledFrameDefaults, b as UnhandledFrameHandle, c as UnhandledFrameStrategy, e as executeUnhandledFrameHandle } from '../network-frame-usYiHS0K.js';
1
+ export { U as UnhandledFrameCallback, c as UnhandledFrameDefaults, b as UnhandledFrameHandle, d as UnhandledFrameStrategy, e as executeUnhandledFrameHandle } from '../on-unhandled-frame-0KmwUmeV.js';
2
2
  import 'rettime';
3
3
  import './handlers-controller.js';
4
- import '../HttpResponse-CksOMVAa.js';
4
+ import '../HttpResponse-DL-P1EeG.js';
5
5
  import '@mswjs/interceptors';
6
6
  import '../utils/internal/isIterable.js';
7
7
  import '../typeUtils.js';
@@ -25,6 +25,7 @@ var import_outvariant = require("outvariant");
25
25
  var import_isCommonAssetRequest = require("../isCommonAssetRequest");
26
26
  var import_devUtils = require("../utils/internal/devUtils");
27
27
  var import_http_frame = require("./frames/http-frame");
28
+ var import_network_frame = require("./frames/network-frame");
28
29
  async function executeUnhandledFrameHandle(frame, handle) {
29
30
  const printStrategyMessage = async (strategy) => {
30
31
  if (strategy === "bypass") {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/experimental/on-unhandled-frame.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { isCommonAssetRequest } from '../isCommonAssetRequest'\nimport { devUtils, InternalError } from '../utils/internal/devUtils'\nimport { HttpNetworkFrame } from './frames/http-frame'\nimport { type AnyNetworkFrame } from './frames/network-frame'\n\nexport type UnhandledFrameHandle =\n | UnhandledFrameStrategy\n | UnhandledFrameCallback\n\nexport type UnhandledFrameStrategy = 'bypass' | 'warn' | 'error'\n\nexport type UnhandledFrameCallback = (args: {\n frame: AnyNetworkFrame\n defaults: UnhandledFrameDefaults\n}) => Promise<void> | void\n\nexport type UnhandledFrameDefaults = {\n warn: () => void\n error: () => void\n}\n\nexport async function executeUnhandledFrameHandle(\n frame: AnyNetworkFrame,\n handle: UnhandledFrameHandle,\n): Promise<void> {\n const printStrategyMessage = async (\n strategy: UnhandledFrameStrategy,\n ): Promise<void> => {\n if (strategy === 'bypass') {\n return\n }\n\n const message = await frame.getUnhandledMessage()\n\n switch (strategy) {\n case 'warn': {\n return devUtils.warn('Warning: %s', message)\n }\n\n case 'error': {\n return devUtils.error('Error: %s', message)\n }\n }\n }\n\n const applyStrategy = async (\n strategy: UnhandledFrameStrategy,\n ): Promise<void> => {\n invariant.as(\n InternalError,\n strategy === 'bypass' || strategy === 'warn' || strategy === 'error',\n /**\n * @fixme Rename \"onUnhandledRequest\" to \"onUnhandledFrame\" in the error message\n * with the next major release.\n */\n devUtils.formatMessage(\n 'Failed to react to an unhandled network frame: unknown strategy \"%s\". Please provide one of the supported strategies (\"bypass\", \"warn\", \"error\") or a custom callback function as the value of the \"onUnhandledRequest\" option.',\n strategy,\n ),\n )\n\n if (strategy === 'bypass') {\n return\n }\n\n await printStrategyMessage(strategy)\n\n if (strategy === 'error') {\n return Promise.reject(\n new InternalError(\n devUtils.formatMessage(\n 'Cannot bypass a request when using the \"error\" strategy for the \"onUnhandledRequest\" option.',\n ),\n ),\n )\n }\n }\n\n if (typeof handle === 'function') {\n return handle({\n frame,\n defaults: {\n warn: printStrategyMessage.bind(null, 'warn'),\n /**\n * @note The defaults only print the corresponding messages now.\n * They do not affect the frame resolution (e.g. do not error the frame).\n * That is only for backward compatibility reasons. In the future, these should\n * be an alias to `applyStrategy.bind(null, 'error')` instead.\n */\n error: printStrategyMessage.bind(null, 'error'),\n },\n })\n }\n\n /**\n * Ignore unhandled common HTTP assets.\n * @note Calling this here applies the common assets check\n * only to the scenarios when `onUnhandledFrame` was set to a predefined strategy.\n * When using a custom function, you need to check for common assets manually.\n */\n if (\n frame instanceof HttpNetworkFrame &&\n isCommonAssetRequest(frame.data.request)\n ) {\n return\n }\n\n return applyStrategy(handle)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA0B;AAC1B,kCAAqC;AACrC,sBAAwC;AACxC,wBAAiC;AAmBjC,eAAsB,4BACpB,OACA,QACe;AACf,QAAM,uBAAuB,OAC3B,aACkB;AAClB,QAAI,aAAa,UAAU;AACzB;AAAA,IACF;AAEA,UAAM,UAAU,MAAM,MAAM,oBAAoB;AAEhD,YAAQ,UAAU;AAAA,MAChB,KAAK,QAAQ;AACX,eAAO,yBAAS,KAAK,eAAe,OAAO;AAAA,MAC7C;AAAA,MAEA,KAAK,SAAS;AACZ,eAAO,yBAAS,MAAM,aAAa,OAAO;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB,OACpB,aACkB;AAClB,gCAAU;AAAA,MACR;AAAA,MACA,aAAa,YAAY,aAAa,UAAU,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7D,yBAAS;AAAA,QACP;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,aAAa,UAAU;AACzB;AAAA,IACF;AAEA,UAAM,qBAAqB,QAAQ;AAEnC,QAAI,aAAa,SAAS;AACxB,aAAO,QAAQ;AAAA,QACb,IAAI;AAAA,UACF,yBAAS;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,YAAY;AAChC,WAAO,OAAO;AAAA,MACZ;AAAA,MACA,UAAU;AAAA,QACR,MAAM,qBAAqB,KAAK,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAO5C,OAAO,qBAAqB,KAAK,MAAM,OAAO;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH;AAQA,MACE,iBAAiB,0CACjB,kDAAqB,MAAM,KAAK,OAAO,GACvC;AACA;AAAA,EACF;AAEA,SAAO,cAAc,MAAM;AAC7B;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/experimental/on-unhandled-frame.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { isCommonAssetRequest } from '../isCommonAssetRequest'\nimport { devUtils, InternalError } from '../utils/internal/devUtils'\nimport { HttpNetworkFrame } from './frames/http-frame'\nimport { type AnyNetworkFrame } from './frames/network-frame'\n\nexport type UnhandledFrameHandle =\n | UnhandledFrameStrategy\n | UnhandledFrameCallback\n\nexport type UnhandledFrameStrategy = 'bypass' | 'warn' | 'error'\n\nexport type UnhandledFrameCallback = (args: {\n frame: AnyNetworkFrame\n defaults: UnhandledFrameDefaults\n}) => Promise<void> | void\n\nexport type UnhandledFrameDefaults = {\n warn: () => void\n error: () => void\n}\n\nexport async function executeUnhandledFrameHandle(\n frame: AnyNetworkFrame,\n handle: UnhandledFrameHandle,\n): Promise<void> {\n const printStrategyMessage = async (\n strategy: UnhandledFrameStrategy,\n ): Promise<void> => {\n if (strategy === 'bypass') {\n return\n }\n\n const message = await frame.getUnhandledMessage()\n\n switch (strategy) {\n case 'warn': {\n return devUtils.warn('Warning: %s', message)\n }\n\n case 'error': {\n return devUtils.error('Error: %s', message)\n }\n }\n }\n\n const applyStrategy = async (\n strategy: UnhandledFrameStrategy,\n ): Promise<void> => {\n invariant.as(\n InternalError,\n strategy === 'bypass' || strategy === 'warn' || strategy === 'error',\n /**\n * @fixme Rename \"onUnhandledRequest\" to \"onUnhandledFrame\" in the error message\n * with the next major release.\n */\n devUtils.formatMessage(\n 'Failed to react to an unhandled network frame: unknown strategy \"%s\". Please provide one of the supported strategies (\"bypass\", \"warn\", \"error\") or a custom callback function as the value of the \"onUnhandledRequest\" option.',\n strategy,\n ),\n )\n\n if (strategy === 'bypass') {\n return\n }\n\n await printStrategyMessage(strategy)\n\n if (strategy === 'error') {\n return Promise.reject(\n new InternalError(\n devUtils.formatMessage(\n 'Cannot bypass a request when using the \"error\" strategy for the \"onUnhandledRequest\" option.',\n ),\n ),\n )\n }\n }\n\n if (typeof handle === 'function') {\n return handle({\n frame,\n defaults: {\n warn: printStrategyMessage.bind(null, 'warn'),\n /**\n * @note The defaults only print the corresponding messages now.\n * They do not affect the frame resolution (e.g. do not error the frame).\n * That is only for backward compatibility reasons. In the future, these should\n * be an alias to `applyStrategy.bind(null, 'error')` instead.\n */\n error: printStrategyMessage.bind(null, 'error'),\n },\n })\n }\n\n /**\n * Ignore unhandled common HTTP assets.\n * @note Calling this here applies the common assets check\n * only to the scenarios when `onUnhandledFrame` was set to a predefined strategy.\n * When using a custom function, you need to check for common assets manually.\n */\n if (\n frame instanceof HttpNetworkFrame &&\n isCommonAssetRequest(frame.data.request)\n ) {\n return\n }\n\n return applyStrategy(handle)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA0B;AAC1B,kCAAqC;AACrC,sBAAwC;AACxC,wBAAiC;AACjC,2BAAqC;AAkBrC,eAAsB,4BACpB,OACA,QACe;AACf,QAAM,uBAAuB,OAC3B,aACkB;AAClB,QAAI,aAAa,UAAU;AACzB;AAAA,IACF;AAEA,UAAM,UAAU,MAAM,MAAM,oBAAoB;AAEhD,YAAQ,UAAU;AAAA,MAChB,KAAK,QAAQ;AACX,eAAO,yBAAS,KAAK,eAAe,OAAO;AAAA,MAC7C;AAAA,MAEA,KAAK,SAAS;AACZ,eAAO,yBAAS,MAAM,aAAa,OAAO;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB,OACpB,aACkB;AAClB,gCAAU;AAAA,MACR;AAAA,MACA,aAAa,YAAY,aAAa,UAAU,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7D,yBAAS;AAAA,QACP;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,aAAa,UAAU;AACzB;AAAA,IACF;AAEA,UAAM,qBAAqB,QAAQ;AAEnC,QAAI,aAAa,SAAS;AACxB,aAAO,QAAQ;AAAA,QACb,IAAI;AAAA,UACF,yBAAS;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,YAAY;AAChC,WAAO,OAAO;AAAA,MACZ;AAAA,MACA,UAAU;AAAA,QACR,MAAM,qBAAqB,KAAK,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAO5C,OAAO,qBAAqB,KAAK,MAAM,OAAO;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH;AAQA,MACE,iBAAiB,0CACjB,kDAAqB,MAAM,KAAK,OAAO,GACvC;AACA;AAAA,EACF;AAEA,SAAO,cAAc,MAAM;AAC7B;","names":[]}
@@ -2,6 +2,7 @@ import { invariant } from "outvariant";
2
2
  import { isCommonAssetRequest } from '../isCommonAssetRequest.mjs';
3
3
  import { devUtils, InternalError } from '../utils/internal/devUtils.mjs';
4
4
  import { HttpNetworkFrame } from './frames/http-frame.mjs';
5
+ import {} from './frames/network-frame.mjs';
5
6
  async function executeUnhandledFrameHandle(frame, handle) {
6
7
  const printStrategyMessage = async (strategy) => {
7
8
  if (strategy === "bypass") {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/experimental/on-unhandled-frame.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { isCommonAssetRequest } from '../isCommonAssetRequest'\nimport { devUtils, InternalError } from '../utils/internal/devUtils'\nimport { HttpNetworkFrame } from './frames/http-frame'\nimport { type AnyNetworkFrame } from './frames/network-frame'\n\nexport type UnhandledFrameHandle =\n | UnhandledFrameStrategy\n | UnhandledFrameCallback\n\nexport type UnhandledFrameStrategy = 'bypass' | 'warn' | 'error'\n\nexport type UnhandledFrameCallback = (args: {\n frame: AnyNetworkFrame\n defaults: UnhandledFrameDefaults\n}) => Promise<void> | void\n\nexport type UnhandledFrameDefaults = {\n warn: () => void\n error: () => void\n}\n\nexport async function executeUnhandledFrameHandle(\n frame: AnyNetworkFrame,\n handle: UnhandledFrameHandle,\n): Promise<void> {\n const printStrategyMessage = async (\n strategy: UnhandledFrameStrategy,\n ): Promise<void> => {\n if (strategy === 'bypass') {\n return\n }\n\n const message = await frame.getUnhandledMessage()\n\n switch (strategy) {\n case 'warn': {\n return devUtils.warn('Warning: %s', message)\n }\n\n case 'error': {\n return devUtils.error('Error: %s', message)\n }\n }\n }\n\n const applyStrategy = async (\n strategy: UnhandledFrameStrategy,\n ): Promise<void> => {\n invariant.as(\n InternalError,\n strategy === 'bypass' || strategy === 'warn' || strategy === 'error',\n /**\n * @fixme Rename \"onUnhandledRequest\" to \"onUnhandledFrame\" in the error message\n * with the next major release.\n */\n devUtils.formatMessage(\n 'Failed to react to an unhandled network frame: unknown strategy \"%s\". Please provide one of the supported strategies (\"bypass\", \"warn\", \"error\") or a custom callback function as the value of the \"onUnhandledRequest\" option.',\n strategy,\n ),\n )\n\n if (strategy === 'bypass') {\n return\n }\n\n await printStrategyMessage(strategy)\n\n if (strategy === 'error') {\n return Promise.reject(\n new InternalError(\n devUtils.formatMessage(\n 'Cannot bypass a request when using the \"error\" strategy for the \"onUnhandledRequest\" option.',\n ),\n ),\n )\n }\n }\n\n if (typeof handle === 'function') {\n return handle({\n frame,\n defaults: {\n warn: printStrategyMessage.bind(null, 'warn'),\n /**\n * @note The defaults only print the corresponding messages now.\n * They do not affect the frame resolution (e.g. do not error the frame).\n * That is only for backward compatibility reasons. In the future, these should\n * be an alias to `applyStrategy.bind(null, 'error')` instead.\n */\n error: printStrategyMessage.bind(null, 'error'),\n },\n })\n }\n\n /**\n * Ignore unhandled common HTTP assets.\n * @note Calling this here applies the common assets check\n * only to the scenarios when `onUnhandledFrame` was set to a predefined strategy.\n * When using a custom function, you need to check for common assets manually.\n */\n if (\n frame instanceof HttpNetworkFrame &&\n isCommonAssetRequest(frame.data.request)\n ) {\n return\n }\n\n return applyStrategy(handle)\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AACrC,SAAS,UAAU,qBAAqB;AACxC,SAAS,wBAAwB;AAmBjC,eAAsB,4BACpB,OACA,QACe;AACf,QAAM,uBAAuB,OAC3B,aACkB;AAClB,QAAI,aAAa,UAAU;AACzB;AAAA,IACF;AAEA,UAAM,UAAU,MAAM,MAAM,oBAAoB;AAEhD,YAAQ,UAAU;AAAA,MAChB,KAAK,QAAQ;AACX,eAAO,SAAS,KAAK,eAAe,OAAO;AAAA,MAC7C;AAAA,MAEA,KAAK,SAAS;AACZ,eAAO,SAAS,MAAM,aAAa,OAAO;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB,OACpB,aACkB;AAClB,cAAU;AAAA,MACR;AAAA,MACA,aAAa,YAAY,aAAa,UAAU,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7D,SAAS;AAAA,QACP;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,aAAa,UAAU;AACzB;AAAA,IACF;AAEA,UAAM,qBAAqB,QAAQ;AAEnC,QAAI,aAAa,SAAS;AACxB,aAAO,QAAQ;AAAA,QACb,IAAI;AAAA,UACF,SAAS;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,YAAY;AAChC,WAAO,OAAO;AAAA,MACZ;AAAA,MACA,UAAU;AAAA,QACR,MAAM,qBAAqB,KAAK,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAO5C,OAAO,qBAAqB,KAAK,MAAM,OAAO;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH;AAQA,MACE,iBAAiB,oBACjB,qBAAqB,MAAM,KAAK,OAAO,GACvC;AACA;AAAA,EACF;AAEA,SAAO,cAAc,MAAM;AAC7B;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/experimental/on-unhandled-frame.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { isCommonAssetRequest } from '../isCommonAssetRequest'\nimport { devUtils, InternalError } from '../utils/internal/devUtils'\nimport { HttpNetworkFrame } from './frames/http-frame'\nimport { type AnyNetworkFrame } from './frames/network-frame'\n\nexport type UnhandledFrameHandle =\n | UnhandledFrameStrategy\n | UnhandledFrameCallback\n\nexport type UnhandledFrameStrategy = 'bypass' | 'warn' | 'error'\n\nexport type UnhandledFrameCallback = (args: {\n frame: AnyNetworkFrame\n defaults: UnhandledFrameDefaults\n}) => Promise<void> | void\n\nexport type UnhandledFrameDefaults = {\n warn: () => void\n error: () => void\n}\n\nexport async function executeUnhandledFrameHandle(\n frame: AnyNetworkFrame,\n handle: UnhandledFrameHandle,\n): Promise<void> {\n const printStrategyMessage = async (\n strategy: UnhandledFrameStrategy,\n ): Promise<void> => {\n if (strategy === 'bypass') {\n return\n }\n\n const message = await frame.getUnhandledMessage()\n\n switch (strategy) {\n case 'warn': {\n return devUtils.warn('Warning: %s', message)\n }\n\n case 'error': {\n return devUtils.error('Error: %s', message)\n }\n }\n }\n\n const applyStrategy = async (\n strategy: UnhandledFrameStrategy,\n ): Promise<void> => {\n invariant.as(\n InternalError,\n strategy === 'bypass' || strategy === 'warn' || strategy === 'error',\n /**\n * @fixme Rename \"onUnhandledRequest\" to \"onUnhandledFrame\" in the error message\n * with the next major release.\n */\n devUtils.formatMessage(\n 'Failed to react to an unhandled network frame: unknown strategy \"%s\". Please provide one of the supported strategies (\"bypass\", \"warn\", \"error\") or a custom callback function as the value of the \"onUnhandledRequest\" option.',\n strategy,\n ),\n )\n\n if (strategy === 'bypass') {\n return\n }\n\n await printStrategyMessage(strategy)\n\n if (strategy === 'error') {\n return Promise.reject(\n new InternalError(\n devUtils.formatMessage(\n 'Cannot bypass a request when using the \"error\" strategy for the \"onUnhandledRequest\" option.',\n ),\n ),\n )\n }\n }\n\n if (typeof handle === 'function') {\n return handle({\n frame,\n defaults: {\n warn: printStrategyMessage.bind(null, 'warn'),\n /**\n * @note The defaults only print the corresponding messages now.\n * They do not affect the frame resolution (e.g. do not error the frame).\n * That is only for backward compatibility reasons. In the future, these should\n * be an alias to `applyStrategy.bind(null, 'error')` instead.\n */\n error: printStrategyMessage.bind(null, 'error'),\n },\n })\n }\n\n /**\n * Ignore unhandled common HTTP assets.\n * @note Calling this here applies the common assets check\n * only to the scenarios when `onUnhandledFrame` was set to a predefined strategy.\n * When using a custom function, you need to check for common assets manually.\n */\n if (\n frame instanceof HttpNetworkFrame &&\n isCommonAssetRequest(frame.data.request)\n ) {\n return\n }\n\n return applyStrategy(handle)\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AACrC,SAAS,UAAU,qBAAqB;AACxC,SAAS,wBAAwB;AACjC,eAAqC;AAkBrC,eAAsB,4BACpB,OACA,QACe;AACf,QAAM,uBAAuB,OAC3B,aACkB;AAClB,QAAI,aAAa,UAAU;AACzB;AAAA,IACF;AAEA,UAAM,UAAU,MAAM,MAAM,oBAAoB;AAEhD,YAAQ,UAAU;AAAA,MAChB,KAAK,QAAQ;AACX,eAAO,SAAS,KAAK,eAAe,OAAO;AAAA,MAC7C;AAAA,MAEA,KAAK,SAAS;AACZ,eAAO,SAAS,MAAM,aAAa,OAAO;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB,OACpB,aACkB;AAClB,cAAU;AAAA,MACR;AAAA,MACA,aAAa,YAAY,aAAa,UAAU,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7D,SAAS;AAAA,QACP;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,aAAa,UAAU;AACzB;AAAA,IACF;AAEA,UAAM,qBAAqB,QAAQ;AAEnC,QAAI,aAAa,SAAS;AACxB,aAAO,QAAQ;AAAA,QACb,IAAI;AAAA,UACF,SAAS;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,YAAY;AAChC,WAAO,OAAO;AAAA,MACZ;AAAA,MACA,UAAU;AAAA,QACR,MAAM,qBAAqB,KAAK,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAO5C,OAAO,qBAAqB,KAAK,MAAM,OAAO;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH;AAQA,MACE,iBAAiB,oBACjB,qBAAqB,MAAM,KAAK,OAAO,GACvC;AACA;AAAA,EACF;AAEA,SAAO,cAAc,MAAM;AAC7B;","names":[]}
@@ -3,7 +3,7 @@ import { LifeCycleEventEmitter } from '../sharedOptions.mjs';
3
3
  import { HandlersController, AnyHandler } from './handlers-controller.mjs';
4
4
  import { Disposable } from '../utils/internal/Disposable.mjs';
5
5
  import '../utils/request/onUnhandledRequest.mjs';
6
- import '../HttpResponse-DlRR1D-f.mjs';
6
+ import '../HttpResponse-BE_Y2Ak9.mjs';
7
7
  import '@mswjs/interceptors';
8
8
  import '../utils/internal/isIterable.mjs';
9
9
  import '../typeUtils.mjs';
@@ -3,7 +3,7 @@ import { LifeCycleEventEmitter } from '../sharedOptions.js';
3
3
  import { HandlersController, AnyHandler } from './handlers-controller.js';
4
4
  import { Disposable } from '../utils/internal/Disposable.js';
5
5
  import '../utils/request/onUnhandledRequest.js';
6
- import '../HttpResponse-CksOMVAa.js';
6
+ import '../HttpResponse-DL-P1EeG.js';
7
7
  import '@mswjs/interceptors';
8
8
  import '../utils/internal/isIterable.js';
9
9
  import '../typeUtils.js';
@@ -22,6 +22,7 @@ __export(setup_api_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(setup_api_exports);
24
24
  var import_rettime = require("rettime");
25
+ var import_sharedOptions = require("../sharedOptions");
25
26
  var import_handlers_controller = require("./handlers-controller");
26
27
  var import_Disposable = require("../utils/internal/Disposable");
27
28
  var import_toReadonlyArray = require("../utils/internal/toReadonlyArray");
@@ -45,11 +46,7 @@ class SetupApi extends import_Disposable.Disposable {
45
46
  this.handlersController.use(runtimeHandlers);
46
47
  }
47
48
  restoreHandlers() {
48
- this.handlersController.currentHandlers().forEach((handler) => {
49
- if ("isUsed" in handler) {
50
- handler.isUsed = false;
51
- }
52
- });
49
+ this.handlersController.restore();
53
50
  }
54
51
  resetHandlers(...nextHandlers) {
55
52
  this.handlersController.reset(nextHandlers);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/experimental/setup-api.ts"],"sourcesContent":["import { type DefaultEventMap, Emitter } from 'rettime'\nimport { LifeCycleEventEmitter } from '../sharedOptions'\nimport {\n AnyHandler,\n HandlersController,\n InMemoryHandlersController,\n} from './handlers-controller'\nimport { Disposable } from '../utils/internal/Disposable'\nimport { toReadonlyArray } from '../utils/internal/toReadonlyArray'\n\n/**\n * Generic class for the mock API setup.\n * Preserved only for backward compatibility.\n * @deprecated\n */\nexport abstract class SetupApi<\n EventMap extends DefaultEventMap,\n> extends Disposable {\n protected handlersController: HandlersController\n protected emitter: Emitter<EventMap>\n protected publicEmitter: Emitter<EventMap>\n\n public readonly events: LifeCycleEventEmitter<EventMap>\n\n constructor(...initialHandlers: Array<AnyHandler>) {\n super()\n\n this.handlersController = new InMemoryHandlersController(initialHandlers)\n\n this.emitter = new Emitter()\n this.publicEmitter = new Emitter()\n this.events = this.emitter\n\n this.subscriptions.push(() => {\n this.emitter.removeAllListeners()\n this.publicEmitter.removeAllListeners()\n })\n }\n\n public use(...runtimeHandlers: Array<AnyHandler>): void {\n this.handlersController.use(runtimeHandlers)\n }\n\n public restoreHandlers(): void {\n this.handlersController.currentHandlers().forEach((handler) => {\n if ('isUsed' in handler) {\n handler.isUsed = false\n }\n })\n }\n\n public resetHandlers(...nextHandlers: Array<AnyHandler>): void {\n this.handlersController.reset(nextHandlers)\n }\n\n public listHandlers(): ReadonlyArray<AnyHandler> {\n return toReadonlyArray(this.handlersController.currentHandlers())\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA8C;AAE9C,iCAIO;AACP,wBAA2B;AAC3B,6BAAgC;AAOzB,MAAe,iBAEZ,6BAAW;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EAEM;AAAA,EAEhB,eAAe,iBAAoC;AACjD,UAAM;AAEN,SAAK,qBAAqB,IAAI,sDAA2B,eAAe;AAExE,SAAK,UAAU,IAAI,uBAAQ;AAC3B,SAAK,gBAAgB,IAAI,uBAAQ;AACjC,SAAK,SAAS,KAAK;AAEnB,SAAK,cAAc,KAAK,MAAM;AAC5B,WAAK,QAAQ,mBAAmB;AAChC,WAAK,cAAc,mBAAmB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEO,OAAO,iBAA0C;AACtD,SAAK,mBAAmB,IAAI,eAAe;AAAA,EAC7C;AAAA,EAEO,kBAAwB;AAC7B,SAAK,mBAAmB,gBAAgB,EAAE,QAAQ,CAAC,YAAY;AAC7D,UAAI,YAAY,SAAS;AACvB,gBAAQ,SAAS;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEO,iBAAiB,cAAuC;AAC7D,SAAK,mBAAmB,MAAM,YAAY;AAAA,EAC5C;AAAA,EAEO,eAA0C;AAC/C,eAAO,wCAAgB,KAAK,mBAAmB,gBAAgB,CAAC;AAAA,EAClE;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/experimental/setup-api.ts"],"sourcesContent":["import { type DefaultEventMap, Emitter } from 'rettime'\nimport { type LifeCycleEventEmitter } from '../sharedOptions'\nimport type { HandlersController } from './handlers-controller'\nimport {\n InMemoryHandlersController,\n type AnyHandler,\n} from './handlers-controller'\nimport { Disposable } from '../utils/internal/Disposable'\nimport { toReadonlyArray } from '../utils/internal/toReadonlyArray'\n\n/**\n * Generic class for the mock API setup.\n * Preserved only for backward compatibility.\n * @deprecated\n */\nexport abstract class SetupApi<\n EventMap extends DefaultEventMap,\n> extends Disposable {\n protected handlersController: HandlersController\n protected emitter: Emitter<EventMap>\n protected publicEmitter: Emitter<EventMap>\n\n public readonly events: LifeCycleEventEmitter<EventMap>\n\n constructor(...initialHandlers: Array<AnyHandler>) {\n super()\n\n this.handlersController = new InMemoryHandlersController(initialHandlers)\n\n this.emitter = new Emitter()\n this.publicEmitter = new Emitter()\n this.events = this.emitter\n\n this.subscriptions.push(() => {\n this.emitter.removeAllListeners()\n this.publicEmitter.removeAllListeners()\n })\n }\n\n public use(...runtimeHandlers: Array<AnyHandler>): void {\n this.handlersController.use(runtimeHandlers)\n }\n\n public restoreHandlers(): void {\n this.handlersController.restore()\n }\n\n public resetHandlers(...nextHandlers: Array<AnyHandler>): void {\n this.handlersController.reset(nextHandlers)\n }\n\n public listHandlers(): ReadonlyArray<AnyHandler> {\n return toReadonlyArray(this.handlersController.currentHandlers())\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA8C;AAC9C,2BAA2C;AAE3C,iCAGO;AACP,wBAA2B;AAC3B,6BAAgC;AAOzB,MAAe,iBAEZ,6BAAW;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EAEM;AAAA,EAEhB,eAAe,iBAAoC;AACjD,UAAM;AAEN,SAAK,qBAAqB,IAAI,sDAA2B,eAAe;AAExE,SAAK,UAAU,IAAI,uBAAQ;AAC3B,SAAK,gBAAgB,IAAI,uBAAQ;AACjC,SAAK,SAAS,KAAK;AAEnB,SAAK,cAAc,KAAK,MAAM;AAC5B,WAAK,QAAQ,mBAAmB;AAChC,WAAK,cAAc,mBAAmB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEO,OAAO,iBAA0C;AACtD,SAAK,mBAAmB,IAAI,eAAe;AAAA,EAC7C;AAAA,EAEO,kBAAwB;AAC7B,SAAK,mBAAmB,QAAQ;AAAA,EAClC;AAAA,EAEO,iBAAiB,cAAuC;AAC7D,SAAK,mBAAmB,MAAM,YAAY;AAAA,EAC5C;AAAA,EAEO,eAA0C;AAC/C,eAAO,wCAAgB,KAAK,mBAAmB,gBAAgB,CAAC;AAAA,EAClE;AACF;","names":[]}
@@ -1,4 +1,5 @@
1
1
  import { Emitter } from "rettime";
2
+ import {} from '../sharedOptions.mjs';
2
3
  import {
3
4
  InMemoryHandlersController
4
5
  } from './handlers-controller.mjs';
@@ -24,11 +25,7 @@ class SetupApi extends Disposable {
24
25
  this.handlersController.use(runtimeHandlers);
25
26
  }
26
27
  restoreHandlers() {
27
- this.handlersController.currentHandlers().forEach((handler) => {
28
- if ("isUsed" in handler) {
29
- handler.isUsed = false;
30
- }
31
- });
28
+ this.handlersController.restore();
32
29
  }
33
30
  resetHandlers(...nextHandlers) {
34
31
  this.handlersController.reset(nextHandlers);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/experimental/setup-api.ts"],"sourcesContent":["import { type DefaultEventMap, Emitter } from 'rettime'\nimport { LifeCycleEventEmitter } from '../sharedOptions'\nimport {\n AnyHandler,\n HandlersController,\n InMemoryHandlersController,\n} from './handlers-controller'\nimport { Disposable } from '../utils/internal/Disposable'\nimport { toReadonlyArray } from '../utils/internal/toReadonlyArray'\n\n/**\n * Generic class for the mock API setup.\n * Preserved only for backward compatibility.\n * @deprecated\n */\nexport abstract class SetupApi<\n EventMap extends DefaultEventMap,\n> extends Disposable {\n protected handlersController: HandlersController\n protected emitter: Emitter<EventMap>\n protected publicEmitter: Emitter<EventMap>\n\n public readonly events: LifeCycleEventEmitter<EventMap>\n\n constructor(...initialHandlers: Array<AnyHandler>) {\n super()\n\n this.handlersController = new InMemoryHandlersController(initialHandlers)\n\n this.emitter = new Emitter()\n this.publicEmitter = new Emitter()\n this.events = this.emitter\n\n this.subscriptions.push(() => {\n this.emitter.removeAllListeners()\n this.publicEmitter.removeAllListeners()\n })\n }\n\n public use(...runtimeHandlers: Array<AnyHandler>): void {\n this.handlersController.use(runtimeHandlers)\n }\n\n public restoreHandlers(): void {\n this.handlersController.currentHandlers().forEach((handler) => {\n if ('isUsed' in handler) {\n handler.isUsed = false\n }\n })\n }\n\n public resetHandlers(...nextHandlers: Array<AnyHandler>): void {\n this.handlersController.reset(nextHandlers)\n }\n\n public listHandlers(): ReadonlyArray<AnyHandler> {\n return toReadonlyArray(this.handlersController.currentHandlers())\n }\n}\n"],"mappings":"AAAA,SAA+B,eAAe;AAE9C;AAAA,EAGE;AAAA,OACK;AACP,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAOzB,MAAe,iBAEZ,WAAW;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EAEM;AAAA,EAEhB,eAAe,iBAAoC;AACjD,UAAM;AAEN,SAAK,qBAAqB,IAAI,2BAA2B,eAAe;AAExE,SAAK,UAAU,IAAI,QAAQ;AAC3B,SAAK,gBAAgB,IAAI,QAAQ;AACjC,SAAK,SAAS,KAAK;AAEnB,SAAK,cAAc,KAAK,MAAM;AAC5B,WAAK,QAAQ,mBAAmB;AAChC,WAAK,cAAc,mBAAmB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEO,OAAO,iBAA0C;AACtD,SAAK,mBAAmB,IAAI,eAAe;AAAA,EAC7C;AAAA,EAEO,kBAAwB;AAC7B,SAAK,mBAAmB,gBAAgB,EAAE,QAAQ,CAAC,YAAY;AAC7D,UAAI,YAAY,SAAS;AACvB,gBAAQ,SAAS;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEO,iBAAiB,cAAuC;AAC7D,SAAK,mBAAmB,MAAM,YAAY;AAAA,EAC5C;AAAA,EAEO,eAA0C;AAC/C,WAAO,gBAAgB,KAAK,mBAAmB,gBAAgB,CAAC;AAAA,EAClE;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/core/experimental/setup-api.ts"],"sourcesContent":["import { type DefaultEventMap, Emitter } from 'rettime'\nimport { type LifeCycleEventEmitter } from '../sharedOptions'\nimport type { HandlersController } from './handlers-controller'\nimport {\n InMemoryHandlersController,\n type AnyHandler,\n} from './handlers-controller'\nimport { Disposable } from '../utils/internal/Disposable'\nimport { toReadonlyArray } from '../utils/internal/toReadonlyArray'\n\n/**\n * Generic class for the mock API setup.\n * Preserved only for backward compatibility.\n * @deprecated\n */\nexport abstract class SetupApi<\n EventMap extends DefaultEventMap,\n> extends Disposable {\n protected handlersController: HandlersController\n protected emitter: Emitter<EventMap>\n protected publicEmitter: Emitter<EventMap>\n\n public readonly events: LifeCycleEventEmitter<EventMap>\n\n constructor(...initialHandlers: Array<AnyHandler>) {\n super()\n\n this.handlersController = new InMemoryHandlersController(initialHandlers)\n\n this.emitter = new Emitter()\n this.publicEmitter = new Emitter()\n this.events = this.emitter\n\n this.subscriptions.push(() => {\n this.emitter.removeAllListeners()\n this.publicEmitter.removeAllListeners()\n })\n }\n\n public use(...runtimeHandlers: Array<AnyHandler>): void {\n this.handlersController.use(runtimeHandlers)\n }\n\n public restoreHandlers(): void {\n this.handlersController.restore()\n }\n\n public resetHandlers(...nextHandlers: Array<AnyHandler>): void {\n this.handlersController.reset(nextHandlers)\n }\n\n public listHandlers(): ReadonlyArray<AnyHandler> {\n return toReadonlyArray(this.handlersController.currentHandlers())\n }\n}\n"],"mappings":"AAAA,SAA+B,eAAe;AAC9C,eAA2C;AAE3C;AAAA,EACE;AAAA,OAEK;AACP,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAOzB,MAAe,iBAEZ,WAAW;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EAEM;AAAA,EAEhB,eAAe,iBAAoC;AACjD,UAAM;AAEN,SAAK,qBAAqB,IAAI,2BAA2B,eAAe;AAExE,SAAK,UAAU,IAAI,QAAQ;AAC3B,SAAK,gBAAgB,IAAI,QAAQ;AACjC,SAAK,SAAS,KAAK;AAEnB,SAAK,cAAc,KAAK,MAAM;AAC5B,WAAK,QAAQ,mBAAmB;AAChC,WAAK,cAAc,mBAAmB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEO,OAAO,iBAA0C;AACtD,SAAK,mBAAmB,IAAI,eAAe;AAAA,EAC7C;AAAA,EAEO,kBAAwB;AAC7B,SAAK,mBAAmB,QAAQ;AAAA,EAClC;AAAA,EAEO,iBAAiB,cAAuC;AAC7D,SAAK,mBAAmB,MAAM,YAAY;AAAA,EAC5C;AAAA,EAEO,eAA0C;AAC/C,WAAO,gBAAgB,KAAK,mBAAmB,gBAAgB,CAAC;AAAA,EAClE;AACF;","names":[]}
@@ -2,9 +2,9 @@ import { Interceptor, HttpRequestEventMap } from '@mswjs/interceptors';
2
2
  import { WebSocketEventMap } from '@mswjs/interceptors/WebSocket';
3
3
  import { NetworkSource } from './network-source.mjs';
4
4
  import 'rettime';
5
- import '../../network-frame-B7A0ggXE.mjs';
5
+ import '../../on-unhandled-frame-gkokW4Rr.mjs';
6
6
  import '../handlers-controller.mjs';
7
- import '../../HttpResponse-DlRR1D-f.mjs';
7
+ import '../../HttpResponse-BE_Y2Ak9.mjs';
8
8
  import '../../utils/internal/isIterable.mjs';
9
9
  import '../../typeUtils.mjs';
10
10
  import 'graphql';
@@ -2,9 +2,9 @@ import { Interceptor, HttpRequestEventMap } from '@mswjs/interceptors';
2
2
  import { WebSocketEventMap } from '@mswjs/interceptors/WebSocket';
3
3
  import { NetworkSource } from './network-source.js';
4
4
  import 'rettime';
5
- import '../../network-frame-usYiHS0K.js';
5
+ import '../../on-unhandled-frame-0KmwUmeV.js';
6
6
  import '../handlers-controller.js';
7
- import '../../HttpResponse-CksOMVAa.js';
7
+ import '../../HttpResponse-DL-P1EeG.js';
8
8
  import '../../utils/internal/isIterable.js';
9
9
  import '../../typeUtils.js';
10
10
  import 'graphql';
@@ -72,16 +72,20 @@ class InterceptorSource extends import_network_source.NetworkSource {
72
72
  return;
73
73
  }
74
74
  queueMicrotask(() => {
75
- httpFrame.events.emit(
76
- new import_http_frame.ResponseEvent(
77
- isMockedResponse ? "response:mocked" : "response:bypass",
78
- {
79
- requestId,
80
- request,
81
- response
82
- }
83
- )
84
- );
75
+ try {
76
+ httpFrame.events.emit(
77
+ new import_http_frame.ResponseEvent(
78
+ isMockedResponse ? "response:mocked" : "response:bypass",
79
+ {
80
+ requestId,
81
+ request,
82
+ response
83
+ }
84
+ )
85
+ );
86
+ } finally {
87
+ httpFrame.events.removeAllListeners();
88
+ }
85
89
  });
86
90
  }
87
91
  async #handleWebSocketConnection(connection) {
@@ -122,6 +126,15 @@ class InterceptorHttpNetworkFrame extends import_http_frame.HttpNetworkFrame {
122
126
  class InterceptorWebSocketNetworkFrame extends import_websocket_frame.WebSocketNetworkFrame {
123
127
  constructor(args) {
124
128
  super({ connection: args.connection });
129
+ args.connection.client.addEventListener(
130
+ "close",
131
+ () => {
132
+ this.events.removeAllListeners();
133
+ },
134
+ {
135
+ once: true
136
+ }
137
+ );
125
138
  }
126
139
  errorWith(reason) {
127
140
  if (reason instanceof Error) {