msw 2.14.3 → 2.14.4

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 (69) hide show
  1. package/lib/core/{HttpResponse-aGiIzO91.d.ts → HttpResponse-BFS34nkx.d.ts} +16 -0
  2. package/lib/core/{HttpResponse-CxHR1nNN.d.mts → HttpResponse-CQwYpuKo.d.mts} +16 -0
  3. package/lib/core/HttpResponse.d.mts +1 -1
  4. package/lib/core/HttpResponse.d.ts +1 -1
  5. package/lib/core/experimental/compat.d.mts +1 -1
  6. package/lib/core/experimental/compat.d.ts +1 -1
  7. package/lib/core/experimental/define-network.d.mts +1 -1
  8. package/lib/core/experimental/define-network.d.ts +1 -1
  9. package/lib/core/experimental/frames/http-frame.d.mts +1 -1
  10. package/lib/core/experimental/frames/http-frame.d.ts +1 -1
  11. package/lib/core/experimental/frames/network-frame.d.mts +1 -1
  12. package/lib/core/experimental/frames/network-frame.d.ts +1 -1
  13. package/lib/core/experimental/frames/websocket-frame.d.mts +1 -1
  14. package/lib/core/experimental/frames/websocket-frame.d.ts +1 -1
  15. package/lib/core/experimental/handlers-controller.d.mts +1 -1
  16. package/lib/core/experimental/handlers-controller.d.ts +1 -1
  17. package/lib/core/experimental/index.d.mts +1 -1
  18. package/lib/core/experimental/index.d.ts +1 -1
  19. package/lib/core/experimental/on-unhandled-frame.d.mts +1 -1
  20. package/lib/core/experimental/on-unhandled-frame.d.ts +1 -1
  21. package/lib/core/experimental/setup-api.d.mts +1 -1
  22. package/lib/core/experimental/setup-api.d.ts +1 -1
  23. package/lib/core/experimental/sources/interceptor-source.d.mts +1 -1
  24. package/lib/core/experimental/sources/interceptor-source.d.ts +1 -1
  25. package/lib/core/experimental/sources/network-source.d.mts +1 -1
  26. package/lib/core/experimental/sources/network-source.d.ts +1 -1
  27. package/lib/core/getResponse.d.mts +1 -1
  28. package/lib/core/getResponse.d.ts +1 -1
  29. package/lib/core/graphql.d.mts +1 -1
  30. package/lib/core/graphql.d.ts +1 -1
  31. package/lib/core/handlers/GraphQLHandler.d.mts +1 -1
  32. package/lib/core/handlers/GraphQLHandler.d.ts +1 -1
  33. package/lib/core/handlers/HttpHandler.d.mts +1 -1
  34. package/lib/core/handlers/HttpHandler.d.ts +1 -1
  35. package/lib/core/handlers/RequestHandler.d.mts +1 -1
  36. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  37. package/lib/core/handlers/RequestHandler.js +82 -1
  38. package/lib/core/handlers/RequestHandler.js.map +1 -1
  39. package/lib/core/handlers/RequestHandler.mjs +82 -1
  40. package/lib/core/handlers/RequestHandler.mjs.map +1 -1
  41. package/lib/core/http.d.mts +1 -1
  42. package/lib/core/http.d.ts +1 -1
  43. package/lib/core/index.d.mts +1 -1
  44. package/lib/core/index.d.ts +1 -1
  45. package/lib/core/passthrough.d.mts +1 -1
  46. package/lib/core/passthrough.d.ts +1 -1
  47. package/lib/core/sse.d.mts +1 -1
  48. package/lib/core/sse.d.ts +1 -1
  49. package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
  50. package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
  51. package/lib/core/utils/executeHandlers.d.mts +1 -1
  52. package/lib/core/utils/executeHandlers.d.ts +1 -1
  53. package/lib/core/utils/handleRequest.d.mts +1 -1
  54. package/lib/core/utils/handleRequest.d.ts +1 -1
  55. package/lib/core/utils/internal/attachSiblingHandlers.d.mts +1 -1
  56. package/lib/core/utils/internal/attachSiblingHandlers.d.ts +1 -1
  57. package/lib/core/utils/internal/isHandlerKind.d.mts +1 -1
  58. package/lib/core/utils/internal/isHandlerKind.d.ts +1 -1
  59. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +1 -1
  60. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +1 -1
  61. package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
  62. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  63. package/lib/core/ws/handleWebSocketEvent.d.mts +1 -1
  64. package/lib/core/ws/handleWebSocketEvent.d.ts +1 -1
  65. package/lib/iife/index.js +81 -1
  66. package/lib/iife/index.js.map +1 -1
  67. package/lib/mockServiceWorker.js +1 -1
  68. package/package.json +2 -2
  69. package/src/core/handlers/RequestHandler.ts +144 -10
@@ -169,7 +169,18 @@ type AsyncResponseResolverReturnType<ResponseBodyType extends DefaultBodyType> =
169
169
  type ResponseResolverInfo<ResolverExtraInfo extends Record<string, unknown>, RequestBodyType extends DefaultBodyType = DefaultBodyType> = {
170
170
  request: StrictRequest<RequestBodyType>;
171
171
  requestId: string;
172
+ /**
173
+ * Schedule a callback to run after this response resolver completes.
174
+ * Handy for cleaning up the side effects introduced in the resolver.
175
+ * @example
176
+ * sse('/', ({ client, finalize }) => {
177
+ * const interval = setInterval(() => client.send({ data: 'ping' }))
178
+ * finalize(() => clearInterval(interval))
179
+ * })
180
+ */
181
+ finalize: ResponseResolverFinalizeFunction;
172
182
  } & ResolverExtraInfo;
183
+ type ResponseResolverFinalizeFunction = (callback: () => MaybePromise<void>) => void;
173
184
  type ResponseResolver<ResolverExtraInfo extends Record<string, unknown> = Record<string, unknown>, RequestBodyType extends DefaultBodyType = DefaultBodyType, ResponseBodyType extends DefaultBodyType = undefined> = (info: ResponseResolverInfo<ResolverExtraInfo, RequestBodyType>) => AsyncResponseResolverReturnType<ResponseBodyType>;
174
185
  interface RequestHandlerArgs<HandlerInfo, HandlerOptions extends RequestHandlerOptions> {
175
186
  info: HandlerInfo;
@@ -192,7 +203,9 @@ declare abstract class RequestHandler<HandlerInfo extends RequestHandlerDefaultI
192
203
  protected resolver: ResponseResolver<ResolverExtras, any, any>;
193
204
  private resolverIterator?;
194
205
  private resolverIteratorResult?;
206
+ private resolverIteratorCleanups?;
195
207
  private options?;
208
+ private scheduledCleanups;
196
209
  info: HandlerInfo & RequestHandlerInternalInfo;
197
210
  /**
198
211
  * Indicates whether this request handler has been used
@@ -264,6 +277,9 @@ declare abstract class RequestHandler<HandlerInfo extends RequestHandlerDefaultI
264
277
  }): Promise<RequestHandlerExecutionResult<ParsedResult> | null>;
265
278
  private wrapResolver;
266
279
  private createExecutionResult;
280
+ private scheduleCleanup;
281
+ private exhaustCleanups;
282
+ private runScheduledCleanups;
267
283
  }
268
284
  /**
269
285
  * Forwards the cookies from the given response to `document.cookie`.
@@ -169,7 +169,18 @@ type AsyncResponseResolverReturnType<ResponseBodyType extends DefaultBodyType> =
169
169
  type ResponseResolverInfo<ResolverExtraInfo extends Record<string, unknown>, RequestBodyType extends DefaultBodyType = DefaultBodyType> = {
170
170
  request: StrictRequest<RequestBodyType>;
171
171
  requestId: string;
172
+ /**
173
+ * Schedule a callback to run after this response resolver completes.
174
+ * Handy for cleaning up the side effects introduced in the resolver.
175
+ * @example
176
+ * sse('/', ({ client, finalize }) => {
177
+ * const interval = setInterval(() => client.send({ data: 'ping' }))
178
+ * finalize(() => clearInterval(interval))
179
+ * })
180
+ */
181
+ finalize: ResponseResolverFinalizeFunction;
172
182
  } & ResolverExtraInfo;
183
+ type ResponseResolverFinalizeFunction = (callback: () => MaybePromise<void>) => void;
173
184
  type ResponseResolver<ResolverExtraInfo extends Record<string, unknown> = Record<string, unknown>, RequestBodyType extends DefaultBodyType = DefaultBodyType, ResponseBodyType extends DefaultBodyType = undefined> = (info: ResponseResolverInfo<ResolverExtraInfo, RequestBodyType>) => AsyncResponseResolverReturnType<ResponseBodyType>;
174
185
  interface RequestHandlerArgs<HandlerInfo, HandlerOptions extends RequestHandlerOptions> {
175
186
  info: HandlerInfo;
@@ -192,7 +203,9 @@ declare abstract class RequestHandler<HandlerInfo extends RequestHandlerDefaultI
192
203
  protected resolver: ResponseResolver<ResolverExtras, any, any>;
193
204
  private resolverIterator?;
194
205
  private resolverIteratorResult?;
206
+ private resolverIteratorCleanups?;
195
207
  private options?;
208
+ private scheduledCleanups;
196
209
  info: HandlerInfo & RequestHandlerInternalInfo;
197
210
  /**
198
211
  * Indicates whether this request handler has been used
@@ -264,6 +277,9 @@ declare abstract class RequestHandler<HandlerInfo extends RequestHandlerDefaultI
264
277
  }): Promise<RequestHandlerExecutionResult<ParsedResult> | null>;
265
278
  private wrapResolver;
266
279
  private createExecutionResult;
280
+ private scheduleCleanup;
281
+ private exhaustCleanups;
282
+ private runScheduledCleanups;
267
283
  }
268
284
  /**
269
285
  * Forwards the cookies from the given response to `document.cookie`.
@@ -1,5 +1,5 @@
1
1
  import '@mswjs/interceptors';
2
- export { T as DefaultUnsafeFetchResponse, H as HttpResponse, n as HttpResponseInit, S as StrictRequest, o as StrictResponse, Q as bodyType, U as kDefaultContentType } from './HttpResponse-CxHR1nNN.mjs';
2
+ export { T as DefaultUnsafeFetchResponse, H as HttpResponse, n as HttpResponseInit, S as StrictRequest, o as StrictResponse, Q as bodyType, U as kDefaultContentType } from './HttpResponse-CQwYpuKo.mjs';
3
3
  import './typeUtils.mjs';
4
4
  import './utils/internal/isIterable.mjs';
5
5
  import 'graphql';
@@ -1,5 +1,5 @@
1
1
  import '@mswjs/interceptors';
2
- export { T as DefaultUnsafeFetchResponse, H as HttpResponse, n as HttpResponseInit, S as StrictRequest, o as StrictResponse, Q as bodyType, U as kDefaultContentType } from './HttpResponse-aGiIzO91.js';
2
+ export { T as DefaultUnsafeFetchResponse, H as HttpResponse, n as HttpResponseInit, S as StrictRequest, o as StrictResponse, Q as bodyType, U as kDefaultContentType } from './HttpResponse-BFS34nkx.js';
3
3
  import './typeUtils.js';
4
4
  import './utils/internal/isIterable.js';
5
5
  import 'graphql';
@@ -2,7 +2,7 @@ import { UnhandledRequestStrategy } from '../utils/request/onUnhandledRequest.mj
2
2
  import { U as UnhandledFrameCallback } from '../on-unhandled-frame-Cr1KOZ0I.mjs';
3
3
  import 'rettime';
4
4
  import './handlers-controller.mjs';
5
- import '../HttpResponse-CxHR1nNN.mjs';
5
+ import '../HttpResponse-CQwYpuKo.mjs';
6
6
  import '@mswjs/interceptors';
7
7
  import '../utils/internal/isIterable.mjs';
8
8
  import '../typeUtils.mjs';
@@ -2,7 +2,7 @@ import { UnhandledRequestStrategy } from '../utils/request/onUnhandledRequest.js
2
2
  import { U as UnhandledFrameCallback } from '../on-unhandled-frame-BBR-P3kV.js';
3
3
  import 'rettime';
4
4
  import './handlers-controller.js';
5
- import '../HttpResponse-aGiIzO91.js';
5
+ import '../HttpResponse-BFS34nkx.js';
6
6
  import '@mswjs/interceptors';
7
7
  import '../utils/internal/isIterable.js';
8
8
  import '../typeUtils.js';
@@ -2,7 +2,7 @@ import { Emitter, DefaultEventMap } from 'rettime';
2
2
  import { NetworkSource, ExtractSourceEvents } from './sources/network-source.mjs';
3
3
  import { a as NetworkFrameResolutionContext, b as UnhandledFrameHandle } from '../on-unhandled-frame-Cr1KOZ0I.mjs';
4
4
  import { AnyHandler, HandlersController } from './handlers-controller.mjs';
5
- import '../HttpResponse-CxHR1nNN.mjs';
5
+ import '../HttpResponse-CQwYpuKo.mjs';
6
6
  import '@mswjs/interceptors';
7
7
  import '../utils/internal/isIterable.mjs';
8
8
  import '../typeUtils.mjs';
@@ -2,7 +2,7 @@ import { Emitter, DefaultEventMap } from 'rettime';
2
2
  import { NetworkSource, ExtractSourceEvents } from './sources/network-source.js';
3
3
  import { a as NetworkFrameResolutionContext, b as UnhandledFrameHandle } from '../on-unhandled-frame-BBR-P3kV.js';
4
4
  import { AnyHandler, HandlersController } from './handlers-controller.js';
5
- import '../HttpResponse-aGiIzO91.js';
5
+ import '../HttpResponse-BFS34nkx.js';
6
6
  import '@mswjs/interceptors';
7
7
  import '../utils/internal/isIterable.js';
8
8
  import '../typeUtils.js';
@@ -1,7 +1,7 @@
1
1
  import { TypedEvent } from 'rettime';
2
2
  import { N as NetworkFrame, b as UnhandledFrameHandle, a as NetworkFrameResolutionContext } from '../../on-unhandled-frame-Cr1KOZ0I.mjs';
3
3
  import { HandlersController, AnyHandler } from '../handlers-controller.mjs';
4
- import { R as RequestHandler } from '../../HttpResponse-CxHR1nNN.mjs';
4
+ import { R as RequestHandler } from '../../HttpResponse-CQwYpuKo.mjs';
5
5
  import '../../handlers/WebSocketHandler.mjs';
6
6
  import 'strict-event-emitter';
7
7
  import '@mswjs/interceptors/WebSocket';
@@ -1,7 +1,7 @@
1
1
  import { TypedEvent } from 'rettime';
2
2
  import { N as NetworkFrame, b as UnhandledFrameHandle, a as NetworkFrameResolutionContext } from '../../on-unhandled-frame-BBR-P3kV.js';
3
3
  import { HandlersController, AnyHandler } from '../handlers-controller.js';
4
- import { R as RequestHandler } from '../../HttpResponse-aGiIzO91.js';
4
+ import { R as RequestHandler } from '../../HttpResponse-BFS34nkx.js';
5
5
  import '../../handlers/WebSocketHandler.js';
6
6
  import 'strict-event-emitter';
7
7
  import '@mswjs/interceptors/WebSocket';
@@ -1,7 +1,7 @@
1
1
  import 'rettime';
2
2
  import '../handlers-controller.mjs';
3
3
  export { A as AnyNetworkFrame, E as ExtractFrameEvents, N as NetworkFrame, a as NetworkFrameResolutionContext } from '../../on-unhandled-frame-Cr1KOZ0I.mjs';
4
- import '../../HttpResponse-CxHR1nNN.mjs';
4
+ import '../../HttpResponse-CQwYpuKo.mjs';
5
5
  import '@mswjs/interceptors';
6
6
  import '../../utils/internal/isIterable.mjs';
7
7
  import '../../typeUtils.mjs';
@@ -1,7 +1,7 @@
1
1
  import 'rettime';
2
2
  import '../handlers-controller.js';
3
3
  export { A as AnyNetworkFrame, E as ExtractFrameEvents, N as NetworkFrame, a as NetworkFrameResolutionContext } from '../../on-unhandled-frame-BBR-P3kV.js';
4
- import '../../HttpResponse-aGiIzO91.js';
4
+ import '../../HttpResponse-BFS34nkx.js';
5
5
  import '@mswjs/interceptors';
6
6
  import '../../utils/internal/isIterable.js';
7
7
  import '../../typeUtils.js';
@@ -5,7 +5,7 @@ import { N as NetworkFrame, b as UnhandledFrameHandle, a as NetworkFrameResoluti
5
5
  import { HandlersController, AnyHandler } from '../handlers-controller.mjs';
6
6
  import 'strict-event-emitter';
7
7
  import '../../utils/matching/matchRequestUrl.mjs';
8
- import '../../HttpResponse-CxHR1nNN.mjs';
8
+ import '../../HttpResponse-CQwYpuKo.mjs';
9
9
  import '@mswjs/interceptors';
10
10
  import '../../utils/internal/isIterable.mjs';
11
11
  import '../../typeUtils.mjs';
@@ -5,7 +5,7 @@ import { N as NetworkFrame, b as UnhandledFrameHandle, a as NetworkFrameResoluti
5
5
  import { HandlersController, AnyHandler } from '../handlers-controller.js';
6
6
  import 'strict-event-emitter';
7
7
  import '../../utils/matching/matchRequestUrl.js';
8
- import '../../HttpResponse-aGiIzO91.js';
8
+ import '../../HttpResponse-BFS34nkx.js';
9
9
  import '@mswjs/interceptors';
10
10
  import '../../utils/internal/isIterable.js';
11
11
  import '../../typeUtils.js';
@@ -1,4 +1,4 @@
1
- import { R as RequestHandler } from '../HttpResponse-CxHR1nNN.mjs';
1
+ import { R as RequestHandler } from '../HttpResponse-CQwYpuKo.mjs';
2
2
  import { WebSocketHandler } from '../handlers/WebSocketHandler.mjs';
3
3
  import '@mswjs/interceptors';
4
4
  import '../utils/internal/isIterable.mjs';
@@ -1,4 +1,4 @@
1
- import { R as RequestHandler } from '../HttpResponse-aGiIzO91.js';
1
+ import { R as RequestHandler } from '../HttpResponse-BFS34nkx.js';
2
2
  import { WebSocketHandler } from '../handlers/WebSocketHandler.js';
3
3
  import '@mswjs/interceptors';
4
4
  import '../utils/internal/isIterable.js';
@@ -8,7 +8,7 @@ export { HandlersController, InMemoryHandlersController } from './handlers-contr
8
8
  import 'rettime';
9
9
  import '@mswjs/interceptors';
10
10
  import '@mswjs/interceptors/WebSocket';
11
- import '../HttpResponse-CxHR1nNN.mjs';
11
+ import '../HttpResponse-CQwYpuKo.mjs';
12
12
  import '../utils/internal/isIterable.mjs';
13
13
  import '../typeUtils.mjs';
14
14
  import 'graphql';
@@ -8,7 +8,7 @@ export { HandlersController, InMemoryHandlersController } from './handlers-contr
8
8
  import 'rettime';
9
9
  import '@mswjs/interceptors';
10
10
  import '@mswjs/interceptors/WebSocket';
11
- import '../HttpResponse-aGiIzO91.js';
11
+ import '../HttpResponse-BFS34nkx.js';
12
12
  import '../utils/internal/isIterable.js';
13
13
  import '../typeUtils.js';
14
14
  import 'graphql';
@@ -1,7 +1,7 @@
1
1
  export { U as UnhandledFrameCallback, d as UnhandledFrameDefaults, b as UnhandledFrameHandle, c as UnhandledFrameStrategy, e as executeUnhandledFrameHandle } from '../on-unhandled-frame-Cr1KOZ0I.mjs';
2
2
  import 'rettime';
3
3
  import './handlers-controller.mjs';
4
- import '../HttpResponse-CxHR1nNN.mjs';
4
+ import '../HttpResponse-CQwYpuKo.mjs';
5
5
  import '@mswjs/interceptors';
6
6
  import '../utils/internal/isIterable.mjs';
7
7
  import '../typeUtils.mjs';
@@ -1,7 +1,7 @@
1
1
  export { U as UnhandledFrameCallback, d as UnhandledFrameDefaults, b as UnhandledFrameHandle, c as UnhandledFrameStrategy, e as executeUnhandledFrameHandle } from '../on-unhandled-frame-BBR-P3kV.js';
2
2
  import 'rettime';
3
3
  import './handlers-controller.js';
4
- import '../HttpResponse-aGiIzO91.js';
4
+ import '../HttpResponse-BFS34nkx.js';
5
5
  import '@mswjs/interceptors';
6
6
  import '../utils/internal/isIterable.js';
7
7
  import '../typeUtils.js';
@@ -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-CxHR1nNN.mjs';
6
+ import '../HttpResponse-CQwYpuKo.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-aGiIzO91.js';
6
+ import '../HttpResponse-BFS34nkx.js';
7
7
  import '@mswjs/interceptors';
8
8
  import '../utils/internal/isIterable.js';
9
9
  import '../typeUtils.js';
@@ -4,7 +4,7 @@ import { NetworkSource } from './network-source.mjs';
4
4
  import 'rettime';
5
5
  import '../../on-unhandled-frame-Cr1KOZ0I.mjs';
6
6
  import '../handlers-controller.mjs';
7
- import '../../HttpResponse-CxHR1nNN.mjs';
7
+ import '../../HttpResponse-CQwYpuKo.mjs';
8
8
  import '../../utils/internal/isIterable.mjs';
9
9
  import '../../typeUtils.mjs';
10
10
  import 'graphql';
@@ -4,7 +4,7 @@ import { NetworkSource } from './network-source.js';
4
4
  import 'rettime';
5
5
  import '../../on-unhandled-frame-BBR-P3kV.js';
6
6
  import '../handlers-controller.js';
7
- import '../../HttpResponse-aGiIzO91.js';
7
+ import '../../HttpResponse-BFS34nkx.js';
8
8
  import '../../utils/internal/isIterable.js';
9
9
  import '../../typeUtils.js';
10
10
  import 'graphql';
@@ -1,7 +1,7 @@
1
1
  import { Emitter, TypedEvent, TypedListenerOptions } from 'rettime';
2
2
  import { A as AnyNetworkFrame, E as ExtractFrameEvents } from '../../on-unhandled-frame-Cr1KOZ0I.mjs';
3
3
  import '../handlers-controller.mjs';
4
- import '../../HttpResponse-CxHR1nNN.mjs';
4
+ import '../../HttpResponse-CQwYpuKo.mjs';
5
5
  import '@mswjs/interceptors';
6
6
  import '../../utils/internal/isIterable.mjs';
7
7
  import '../../typeUtils.mjs';
@@ -1,7 +1,7 @@
1
1
  import { Emitter, TypedEvent, TypedListenerOptions } from 'rettime';
2
2
  import { A as AnyNetworkFrame, E as ExtractFrameEvents } from '../../on-unhandled-frame-BBR-P3kV.js';
3
3
  import '../handlers-controller.js';
4
- import '../../HttpResponse-aGiIzO91.js';
4
+ import '../../HttpResponse-BFS34nkx.js';
5
5
  import '@mswjs/interceptors';
6
6
  import '../../utils/internal/isIterable.js';
7
7
  import '../../typeUtils.js';
@@ -1,4 +1,4 @@
1
- import { R as RequestHandler, m as ResponseResolutionContext } from './HttpResponse-CxHR1nNN.mjs';
1
+ import { R as RequestHandler, m as ResponseResolutionContext } from './HttpResponse-CQwYpuKo.mjs';
2
2
  import '@mswjs/interceptors';
3
3
  import './utils/internal/isIterable.mjs';
4
4
  import './typeUtils.mjs';
@@ -1,4 +1,4 @@
1
- import { R as RequestHandler, m as ResponseResolutionContext } from './HttpResponse-aGiIzO91.js';
1
+ import { R as RequestHandler, m as ResponseResolutionContext } from './HttpResponse-BFS34nkx.js';
2
2
  import '@mswjs/interceptors';
3
3
  import './utils/internal/isIterable.js';
4
4
  import './typeUtils.js';
@@ -1,4 +1,4 @@
1
- import { f as GraphQLQuery, g as GraphQLVariables, p as GraphQLPredicate, a as ResponseResolver, q as GraphQLResolverExtras, i as GraphQLResponseBody, c as RequestHandlerOptions, G as GraphQLHandler } from './HttpResponse-CxHR1nNN.mjs';
1
+ import { f as GraphQLQuery, g as GraphQLVariables, p as GraphQLPredicate, a as ResponseResolver, q as GraphQLResolverExtras, i as GraphQLResponseBody, c as RequestHandlerOptions, G as GraphQLHandler } from './HttpResponse-CQwYpuKo.mjs';
2
2
  import { Path } from './utils/matching/matchRequestUrl.mjs';
3
3
  import '@mswjs/interceptors';
4
4
  import './utils/internal/isIterable.mjs';
@@ -1,4 +1,4 @@
1
- import { f as GraphQLQuery, g as GraphQLVariables, p as GraphQLPredicate, a as ResponseResolver, q as GraphQLResolverExtras, i as GraphQLResponseBody, c as RequestHandlerOptions, G as GraphQLHandler } from './HttpResponse-aGiIzO91.js';
1
+ import { f as GraphQLQuery, g as GraphQLVariables, p as GraphQLPredicate, a as ResponseResolver, q as GraphQLResolverExtras, i as GraphQLResponseBody, c as RequestHandlerOptions, G as GraphQLHandler } from './HttpResponse-BFS34nkx.js';
2
2
  import { Path } from './utils/matching/matchRequestUrl.js';
3
3
  import '@mswjs/interceptors';
4
4
  import './utils/internal/isIterable.js';
@@ -1,5 +1,5 @@
1
1
  import 'graphql';
2
- export { z as DocumentTypeDecoration, l as GraphQLCustomPredicate, F as GraphQLCustomPredicateResult, G as GraphQLHandler, C as GraphQLHandlerInfo, B as GraphQLHandlerNameSelector, j as GraphQLJsonRequestBody, k as GraphQLOperationType, p as GraphQLPredicate, f as GraphQLQuery, h as GraphQLRequestBody, E as GraphQLRequestParsedResult, q as GraphQLResolverExtras, i as GraphQLResponseBody, g as GraphQLVariables, I as isDocumentNode } from '../HttpResponse-CxHR1nNN.mjs';
2
+ export { z as DocumentTypeDecoration, l as GraphQLCustomPredicate, F as GraphQLCustomPredicateResult, G as GraphQLHandler, C as GraphQLHandlerInfo, B as GraphQLHandlerNameSelector, j as GraphQLJsonRequestBody, k as GraphQLOperationType, p as GraphQLPredicate, f as GraphQLQuery, h as GraphQLRequestBody, E as GraphQLRequestParsedResult, q as GraphQLResolverExtras, i as GraphQLResponseBody, g as GraphQLVariables, I as isDocumentNode } from '../HttpResponse-CQwYpuKo.mjs';
3
3
  import '../utils/matching/matchRequestUrl.mjs';
4
4
  import '@mswjs/interceptors';
5
5
  import '../utils/internal/isIterable.mjs';
@@ -1,5 +1,5 @@
1
1
  import 'graphql';
2
- export { z as DocumentTypeDecoration, l as GraphQLCustomPredicate, F as GraphQLCustomPredicateResult, G as GraphQLHandler, C as GraphQLHandlerInfo, B as GraphQLHandlerNameSelector, j as GraphQLJsonRequestBody, k as GraphQLOperationType, p as GraphQLPredicate, f as GraphQLQuery, h as GraphQLRequestBody, E as GraphQLRequestParsedResult, q as GraphQLResolverExtras, i as GraphQLResponseBody, g as GraphQLVariables, I as isDocumentNode } from '../HttpResponse-aGiIzO91.js';
2
+ export { z as DocumentTypeDecoration, l as GraphQLCustomPredicate, F as GraphQLCustomPredicateResult, G as GraphQLHandler, C as GraphQLHandlerInfo, B as GraphQLHandlerNameSelector, j as GraphQLJsonRequestBody, k as GraphQLOperationType, p as GraphQLPredicate, f as GraphQLQuery, h as GraphQLRequestBody, E as GraphQLRequestParsedResult, q as GraphQLResolverExtras, i as GraphQLResponseBody, g as GraphQLVariables, I as isDocumentNode } from '../HttpResponse-BFS34nkx.js';
3
3
  import '../utils/matching/matchRequestUrl.js';
4
4
  import '@mswjs/interceptors';
5
5
  import '../utils/internal/isIterable.js';
@@ -1,4 +1,4 @@
1
- import { R as RequestHandler, r as RequestHandlerDefaultInfo, a as ResponseResolver, c as RequestHandlerOptions, m as ResponseResolutionContext } from '../HttpResponse-CxHR1nNN.mjs';
1
+ import { R as RequestHandler, r as RequestHandlerDefaultInfo, a as ResponseResolver, c as RequestHandlerOptions, m as ResponseResolutionContext } from '../HttpResponse-CQwYpuKo.mjs';
2
2
  import { PathParams, Path, Match } from '../utils/matching/matchRequestUrl.mjs';
3
3
  import '@mswjs/interceptors';
4
4
  import '../utils/internal/isIterable.mjs';
@@ -1,4 +1,4 @@
1
- import { R as RequestHandler, r as RequestHandlerDefaultInfo, a as ResponseResolver, c as RequestHandlerOptions, m as ResponseResolutionContext } from '../HttpResponse-aGiIzO91.js';
1
+ import { R as RequestHandler, r as RequestHandlerDefaultInfo, a as ResponseResolver, c as RequestHandlerOptions, m as ResponseResolutionContext } from '../HttpResponse-BFS34nkx.js';
2
2
  import { PathParams, Path, Match } from '../utils/matching/matchRequestUrl.js';
3
3
  import '@mswjs/interceptors';
4
4
  import '../utils/internal/isIterable.js';
@@ -1,5 +1,5 @@
1
1
  import '../utils/internal/isIterable.mjs';
2
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, L as RequestHandlerArgs, r as RequestHandlerDefaultInfo, N as RequestHandlerExecutionResult, K as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, e as ResponseResolverInfo, b as ResponseResolverReturnType, O as forwardResponseCookies } from '../HttpResponse-CxHR1nNN.mjs';
2
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, L as RequestHandlerArgs, r as RequestHandlerDefaultInfo, N as RequestHandlerExecutionResult, K as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, e as ResponseResolverInfo, b as ResponseResolverReturnType, O as forwardResponseCookies } from '../HttpResponse-CQwYpuKo.mjs';
3
3
  import '../typeUtils.mjs';
4
4
  import '@mswjs/interceptors';
5
5
  import 'graphql';
@@ -1,5 +1,5 @@
1
1
  import '../utils/internal/isIterable.js';
2
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, L as RequestHandlerArgs, r as RequestHandlerDefaultInfo, N as RequestHandlerExecutionResult, K as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, e as ResponseResolverInfo, b as ResponseResolverReturnType, O as forwardResponseCookies } from '../HttpResponse-aGiIzO91.js';
2
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, L as RequestHandlerArgs, r as RequestHandlerDefaultInfo, N as RequestHandlerExecutionResult, K as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, e as ResponseResolverInfo, b as ResponseResolverReturnType, O as forwardResponseCookies } from '../HttpResponse-BFS34nkx.js';
3
3
  import '../typeUtils.js';
4
4
  import '@mswjs/interceptors';
5
5
  import 'graphql';
@@ -26,6 +26,7 @@ var import_headers_polyfill = require("headers-polyfill");
26
26
  var import_getCallFrame = require("../utils/internal/getCallFrame");
27
27
  var import_isIterable = require("../utils/internal/isIterable");
28
28
  var import_HttpResponse = require("../HttpResponse");
29
+ var import_devUtils = require("../utils/internal/devUtils");
29
30
  var import_decorators = require("../utils/HttpResponse/decorators");
30
31
  class RequestHandler {
31
32
  static cache = /* @__PURE__ */ new WeakMap();
@@ -33,7 +34,9 @@ class RequestHandler {
33
34
  resolver;
34
35
  resolverIterator;
35
36
  resolverIteratorResult;
37
+ resolverIteratorCleanups;
36
38
  options;
39
+ scheduledCleanups;
37
40
  info;
38
41
  /**
39
42
  * Indicates whether this request handler has been used
@@ -43,6 +46,7 @@ class RequestHandler {
43
46
  constructor(args) {
44
47
  this.resolver = args.resolver;
45
48
  this.options = args.options;
49
+ this.scheduledCleanups = /* @__PURE__ */ new Map();
46
50
  const callFrame = (0, import_getCallFrame.getCallFrame)(new Error());
47
51
  this.info = {
48
52
  ...args.info,
@@ -57,9 +61,11 @@ class RequestHandler {
57
61
  * from a clean state.
58
62
  */
59
63
  reset() {
64
+ this.scheduledCleanups.clear();
60
65
  const iterator = this.resolverIterator;
61
66
  this.resolverIterator = void 0;
62
67
  this.resolverIteratorResult = void 0;
68
+ this.resolverIteratorCleanups = void 0;
63
69
  if (typeof iterator?.return === "function") {
64
70
  void Promise.resolve(iterator.return());
65
71
  }
@@ -145,8 +151,20 @@ class RequestHandler {
145
151
  request: args.request,
146
152
  parsedResult
147
153
  });
154
+ const listenerController = new AbortController();
155
+ args.request.signal.addEventListener(
156
+ "abort",
157
+ () => this.runScheduledCleanups(args.requestId),
158
+ {
159
+ once: true,
160
+ signal: listenerController.signal
161
+ }
162
+ );
148
163
  const mockedResponsePromise = executeResolver({
149
164
  ...resolverExtras,
165
+ finalize: (callback) => {
166
+ this.scheduleCleanup(args.requestId, callback);
167
+ },
150
168
  requestId: args.requestId,
151
169
  request: args.request
152
170
  }).catch((errorOrResponse) => {
@@ -154,6 +172,8 @@ class RequestHandler {
154
172
  return errorOrResponse;
155
173
  }
156
174
  throw errorOrResponse;
175
+ }).finally(() => {
176
+ listenerController.abort();
157
177
  });
158
178
  const mockedResponse = await mockedResponsePromise;
159
179
  if (mockedResponse) {
@@ -172,10 +192,22 @@ class RequestHandler {
172
192
  wrapResolver(resolver) {
173
193
  return async (info) => {
174
194
  if (!this.resolverIterator) {
175
- const result = await resolver(info);
195
+ let result;
196
+ try {
197
+ result = await resolver(info);
198
+ } catch (error) {
199
+ await this.runScheduledCleanups(info.requestId);
200
+ throw error;
201
+ }
176
202
  if (!(0, import_isIterable.isIterable)(result)) {
203
+ await this.runScheduledCleanups(info.requestId);
177
204
  return result;
178
205
  }
206
+ const existingCleanups = this.scheduledCleanups.get(info.requestId);
207
+ if (existingCleanups != null && existingCleanups.length > 0) {
208
+ this.resolverIteratorCleanups = existingCleanups;
209
+ this.scheduledCleanups.delete(info.requestId);
210
+ }
179
211
  this.resolverIterator = Symbol.iterator in result ? result[Symbol.iterator]() : result[Symbol.asyncIterator]();
180
212
  }
181
213
  this.isUsed = false;
@@ -186,6 +218,7 @@ class RequestHandler {
186
218
  }
187
219
  if (done) {
188
220
  this.isUsed = true;
221
+ await this.runScheduledCleanups(info.requestId);
189
222
  return this.resolverIteratorResult?.clone();
190
223
  }
191
224
  return nextResponse;
@@ -200,6 +233,54 @@ class RequestHandler {
200
233
  parsedResult: args.parsedResult
201
234
  };
202
235
  }
236
+ scheduleCleanup(requestId, callback) {
237
+ if (this.resolverIterator) {
238
+ ;
239
+ (this.resolverIteratorCleanups ||= []).unshift(callback);
240
+ return;
241
+ }
242
+ const cleanups = this.scheduledCleanups.get(requestId) || [];
243
+ cleanups.unshift(callback);
244
+ this.scheduledCleanups.set(requestId, cleanups);
245
+ }
246
+ async exhaustCleanups(cleanups) {
247
+ const errors = [];
248
+ for (const cleanup of cleanups) {
249
+ try {
250
+ await cleanup();
251
+ } catch (error) {
252
+ if (error instanceof Error) {
253
+ errors.push(error);
254
+ }
255
+ }
256
+ }
257
+ if (errors.length > 0) {
258
+ import_devUtils.devUtils.error(
259
+ 'Failed to execute cleanup for request handler "%s"',
260
+ this.info.header,
261
+ new AggregateError(
262
+ errors,
263
+ `Failed to execute cleanup for request handler "${this.info.header}"`
264
+ )
265
+ );
266
+ }
267
+ }
268
+ async runScheduledCleanups(requestId) {
269
+ if (this.resolverIterator && this.resolverIteratorCleanups != null && this.resolverIteratorCleanups.length > 0) {
270
+ try {
271
+ await this.exhaustCleanups(this.resolverIteratorCleanups);
272
+ } finally {
273
+ this.resolverIteratorCleanups = void 0;
274
+ }
275
+ return;
276
+ }
277
+ const cleanups = this.scheduledCleanups.get(requestId);
278
+ if (!cleanups || cleanups.length == 0) {
279
+ return;
280
+ }
281
+ await this.exhaustCleanups(cleanups);
282
+ this.scheduledCleanups.delete(requestId);
283
+ }
203
284
  }
204
285
  function forwardResponseCookies(response) {
205
286
  if (typeof document === "undefined") {