msw 2.2.3 → 2.3.0-ws.rc-1

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 (129) hide show
  1. package/cli/init.js +0 -0
  2. package/config/scripts/postinstall.js +0 -0
  3. package/lib/browser/index.d.mts +7 -6
  4. package/lib/browser/index.d.ts +7 -6
  5. package/lib/browser/index.js +32 -15
  6. package/lib/browser/index.js.map +1 -1
  7. package/lib/browser/index.mjs +32 -15
  8. package/lib/browser/index.mjs.map +1 -1
  9. package/lib/core/{GraphQLHandler-jOzqbxSK.d.ts → GraphQLHandler-Cbu12sb0.d.ts} +1 -1
  10. package/lib/core/{GraphQLHandler-AenIUdwE.d.mts → GraphQLHandler-QGQY_9Rc.d.mts} +1 -1
  11. package/lib/core/{HttpResponse-wcp03c7-.d.mts → HttpResponse-BWB1yDNM.d.mts} +2 -2
  12. package/lib/core/{HttpResponse-_514VQ9z.d.ts → HttpResponse-DeJBWGN5.d.ts} +2 -2
  13. package/lib/core/HttpResponse.d.mts +1 -1
  14. package/lib/core/HttpResponse.d.ts +1 -1
  15. package/lib/core/SetupApi.d.mts +15 -12
  16. package/lib/core/SetupApi.d.ts +15 -12
  17. package/lib/core/SetupApi.js +3 -1
  18. package/lib/core/SetupApi.js.map +1 -1
  19. package/lib/core/SetupApi.mjs +3 -1
  20. package/lib/core/SetupApi.mjs.map +1 -1
  21. package/lib/core/getResponse.d.mts +1 -1
  22. package/lib/core/getResponse.d.ts +1 -1
  23. package/lib/core/graphql.d.mts +2 -2
  24. package/lib/core/graphql.d.ts +2 -2
  25. package/lib/core/handlers/GraphQLHandler.d.mts +2 -2
  26. package/lib/core/handlers/GraphQLHandler.d.ts +2 -2
  27. package/lib/core/handlers/HttpHandler.d.mts +1 -1
  28. package/lib/core/handlers/HttpHandler.d.ts +1 -1
  29. package/lib/core/handlers/RequestHandler.d.mts +1 -1
  30. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  31. package/lib/core/handlers/WebSocketHandler.d.mts +38 -0
  32. package/lib/core/handlers/WebSocketHandler.d.ts +38 -0
  33. package/lib/core/handlers/WebSocketHandler.js +65 -0
  34. package/lib/core/handlers/WebSocketHandler.js.map +1 -0
  35. package/lib/core/handlers/WebSocketHandler.mjs +47 -0
  36. package/lib/core/handlers/WebSocketHandler.mjs.map +1 -0
  37. package/lib/core/http.d.mts +1 -1
  38. package/lib/core/http.d.ts +1 -1
  39. package/lib/core/index.d.mts +5 -2
  40. package/lib/core/index.d.ts +5 -2
  41. package/lib/core/index.js +3 -1
  42. package/lib/core/index.js.map +1 -1
  43. package/lib/core/index.mjs +3 -1
  44. package/lib/core/index.mjs.map +1 -1
  45. package/lib/core/passthrough.d.mts +1 -1
  46. package/lib/core/passthrough.d.ts +1 -1
  47. package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
  48. package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
  49. package/lib/core/utils/executeHandlers.d.mts +1 -1
  50. package/lib/core/utils/executeHandlers.d.ts +1 -1
  51. package/lib/core/utils/executeHandlers.js +4 -0
  52. package/lib/core/utils/executeHandlers.js.map +1 -1
  53. package/lib/core/utils/executeHandlers.mjs +6 -0
  54. package/lib/core/utils/executeHandlers.mjs.map +1 -1
  55. package/lib/core/utils/handleRequest.d.mts +2 -2
  56. package/lib/core/utils/handleRequest.d.ts +2 -2
  57. package/lib/core/utils/handleRequest.js.map +1 -1
  58. package/lib/core/utils/handleRequest.mjs.map +1 -1
  59. package/lib/core/utils/handleWebSocketEvent.d.mts +10 -0
  60. package/lib/core/utils/handleWebSocketEvent.d.ts +10 -0
  61. package/lib/core/utils/handleWebSocketEvent.js +56 -0
  62. package/lib/core/utils/handleWebSocketEvent.js.map +1 -0
  63. package/lib/core/utils/handleWebSocketEvent.mjs +40 -0
  64. package/lib/core/utils/handleWebSocketEvent.mjs.map +1 -0
  65. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +2 -2
  66. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +2 -2
  67. package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
  68. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  69. package/lib/core/utils/internal/requestHandlerUtils.d.mts +1 -1
  70. package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
  71. package/lib/core/utils/matching/matchRequestUrl.d.mts +2 -1
  72. package/lib/core/utils/matching/matchRequestUrl.d.ts +2 -1
  73. package/lib/core/utils/matching/matchRequestUrl.js +4 -0
  74. package/lib/core/utils/matching/matchRequestUrl.js.map +1 -1
  75. package/lib/core/utils/matching/matchRequestUrl.mjs +4 -0
  76. package/lib/core/utils/matching/matchRequestUrl.mjs.map +1 -1
  77. package/lib/core/ws/WebSocketClientManager.d.mts +64 -0
  78. package/lib/core/ws/WebSocketClientManager.d.ts +64 -0
  79. package/lib/core/ws/WebSocketClientManager.js +123 -0
  80. package/lib/core/ws/WebSocketClientManager.js.map +1 -0
  81. package/lib/core/ws/WebSocketClientManager.mjs +103 -0
  82. package/lib/core/ws/WebSocketClientManager.mjs.map +1 -0
  83. package/lib/core/ws/webSocketInterceptor.d.mts +5 -0
  84. package/lib/core/ws/webSocketInterceptor.d.ts +5 -0
  85. package/lib/core/ws/webSocketInterceptor.js +26 -0
  86. package/lib/core/ws/webSocketInterceptor.js.map +1 -0
  87. package/lib/core/ws/webSocketInterceptor.mjs +6 -0
  88. package/lib/core/ws/webSocketInterceptor.mjs.map +1 -0
  89. package/lib/core/ws/ws.d.mts +44 -0
  90. package/lib/core/ws/ws.d.ts +44 -0
  91. package/lib/core/ws/ws.js +82 -0
  92. package/lib/core/ws/ws.js.map +1 -0
  93. package/lib/core/ws/ws.mjs +65 -0
  94. package/lib/core/ws/ws.mjs.map +1 -0
  95. package/lib/iife/index.js +703 -17
  96. package/lib/iife/index.js.map +1 -1
  97. package/lib/mockServiceWorker.js +1 -1
  98. package/lib/native/index.d.mts +6 -5
  99. package/lib/native/index.d.ts +6 -5
  100. package/lib/native/index.js +7 -0
  101. package/lib/native/index.js.map +1 -1
  102. package/lib/native/index.mjs +7 -0
  103. package/lib/native/index.mjs.map +1 -1
  104. package/lib/node/index.d.mts +8 -7
  105. package/lib/node/index.d.ts +8 -7
  106. package/lib/node/index.js +7 -0
  107. package/lib/node/index.js.map +1 -1
  108. package/lib/node/index.mjs +7 -0
  109. package/lib/node/index.mjs.map +1 -1
  110. package/package.json +27 -22
  111. package/src/browser/setupWorker/glossary.ts +10 -10
  112. package/src/browser/setupWorker/setupWorker.ts +17 -3
  113. package/src/core/SetupApi.ts +28 -20
  114. package/src/core/handlers/WebSocketHandler.ts +89 -0
  115. package/src/core/index.ts +3 -0
  116. package/src/core/utils/executeHandlers.ts +6 -2
  117. package/src/core/utils/handleRequest.ts +1 -2
  118. package/src/core/utils/handleWebSocketEvent.ts +49 -0
  119. package/src/core/utils/matching/matchRequestUrl.test.ts +44 -0
  120. package/src/core/utils/matching/matchRequestUrl.ts +4 -0
  121. package/src/core/ws/WebSocketClientManager.test.ts +159 -0
  122. package/src/core/ws/WebSocketClientManager.ts +170 -0
  123. package/src/core/ws/webSocketInterceptor.ts +3 -0
  124. package/src/core/ws/ws.test.ts +23 -0
  125. package/src/core/ws/ws.ts +108 -0
  126. package/src/node/SetupServerApi.ts +8 -7
  127. package/src/node/SetupServerCommonApi.ts +10 -1
  128. package/src/node/glossary.ts +5 -7
  129. package/src/node/setupServer.ts +2 -1
@@ -1,5 +1,5 @@
1
1
  import { OperationTypeNode, DocumentNode, GraphQLError } from 'graphql';
2
- import { g as RequestHandlerDefaultInfo, D as DefaultBodyType, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions } from './HttpResponse-_514VQ9z.js';
2
+ import { h as RequestHandlerDefaultInfo, D as DefaultBodyType, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions } from './HttpResponse-DeJBWGN5.js';
3
3
  import { Match, Path } from './utils/matching/matchRequestUrl.js';
4
4
 
5
5
  interface ParsedGraphQLQuery {
@@ -1,5 +1,5 @@
1
1
  import { OperationTypeNode, DocumentNode, GraphQLError } from 'graphql';
2
- import { g as RequestHandlerDefaultInfo, D as DefaultBodyType, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions } from './HttpResponse-wcp03c7-.mjs';
2
+ import { h as RequestHandlerDefaultInfo, D as DefaultBodyType, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions } from './HttpResponse-BWB1yDNM.mjs';
3
3
  import { Match, Path } from './utils/matching/matchRequestUrl.mjs';
4
4
 
5
5
  interface ParsedGraphQLQuery {
@@ -13,7 +13,7 @@ interface ResponseResolutionContext {
13
13
  * Returns the execution result object containing any matching request
14
14
  * handler and any mocked response it returned.
15
15
  */
16
- declare const executeHandlers: <Handlers extends RequestHandler<RequestHandlerDefaultInfo, any, any, RequestHandlerOptions>[]>({ request, requestId, handlers, resolutionContext, }: {
16
+ declare const executeHandlers: <Handlers extends unknown[]>({ request, requestId, handlers, resolutionContext, }: {
17
17
  request: Request;
18
18
  requestId: string;
19
19
  handlers: Handlers;
@@ -186,4 +186,4 @@ declare class HttpResponse extends Response {
186
186
  static formData(body?: FormData, init?: HttpResponseInit): Response;
187
187
  }
188
188
 
189
- export { type AsyncResponseResolverReturnType as A, type DefaultBodyType as D, type HttpResponseInit as H, type JsonBodyType as J, type MaybeAsyncResponseResolverReturnType as M, RequestHandler as R, type StrictRequest as S, type ResponseResolver as a, type ResponseResolverReturnType as b, type RequestHandlerOptions as c, type DefaultRequestMultipartBody as d, type StrictResponse as e, HttpResponse as f, type RequestHandlerDefaultInfo as g, type HandlersExecutionResult as h, type ResponseResolutionContext as i, executeHandlers as j, type RequestHandlerInternalInfo as k, type ResponseResolverInfo as l, type RequestHandlerArgs as m, type RequestHandlerExecutionResult as n };
189
+ export { type AsyncResponseResolverReturnType as A, type DefaultBodyType as D, type HttpResponseInit as H, type JsonBodyType as J, type MaybeAsyncResponseResolverReturnType as M, RequestHandler as R, type StrictRequest as S, type ResponseResolver as a, type ResponseResolverReturnType as b, type RequestHandlerOptions as c, type DefaultRequestMultipartBody as d, type StrictResponse as e, HttpResponse as f, type HandlersExecutionResult as g, type RequestHandlerDefaultInfo as h, type ResponseResolutionContext as i, executeHandlers as j, type RequestHandlerInternalInfo as k, type ResponseResolverInfo as l, type RequestHandlerArgs as m, type RequestHandlerExecutionResult as n };
@@ -13,7 +13,7 @@ interface ResponseResolutionContext {
13
13
  * Returns the execution result object containing any matching request
14
14
  * handler and any mocked response it returned.
15
15
  */
16
- declare const executeHandlers: <Handlers extends RequestHandler<RequestHandlerDefaultInfo, any, any, RequestHandlerOptions>[]>({ request, requestId, handlers, resolutionContext, }: {
16
+ declare const executeHandlers: <Handlers extends unknown[]>({ request, requestId, handlers, resolutionContext, }: {
17
17
  request: Request;
18
18
  requestId: string;
19
19
  handlers: Handlers;
@@ -186,4 +186,4 @@ declare class HttpResponse extends Response {
186
186
  static formData(body?: FormData, init?: HttpResponseInit): Response;
187
187
  }
188
188
 
189
- export { type AsyncResponseResolverReturnType as A, type DefaultBodyType as D, type HttpResponseInit as H, type JsonBodyType as J, type MaybeAsyncResponseResolverReturnType as M, RequestHandler as R, type StrictRequest as S, type ResponseResolver as a, type ResponseResolverReturnType as b, type RequestHandlerOptions as c, type DefaultRequestMultipartBody as d, type StrictResponse as e, HttpResponse as f, type RequestHandlerDefaultInfo as g, type HandlersExecutionResult as h, type ResponseResolutionContext as i, executeHandlers as j, type RequestHandlerInternalInfo as k, type ResponseResolverInfo as l, type RequestHandlerArgs as m, type RequestHandlerExecutionResult as n };
189
+ export { type AsyncResponseResolverReturnType as A, type DefaultBodyType as D, type HttpResponseInit as H, type JsonBodyType as J, type MaybeAsyncResponseResolverReturnType as M, RequestHandler as R, type StrictRequest as S, type ResponseResolver as a, type ResponseResolverReturnType as b, type RequestHandlerOptions as c, type DefaultRequestMultipartBody as d, type StrictResponse as e, HttpResponse as f, type HandlersExecutionResult as g, type RequestHandlerDefaultInfo as h, type ResponseResolutionContext as i, executeHandlers as j, type RequestHandlerInternalInfo as k, type ResponseResolverInfo as l, type RequestHandlerArgs as m, type RequestHandlerExecutionResult as n };
@@ -1,2 +1,2 @@
1
- export { f as HttpResponse, H as HttpResponseInit, S as StrictRequest, e as StrictResponse } from './HttpResponse-wcp03c7-.mjs';
1
+ export { f as HttpResponse, H as HttpResponseInit, S as StrictRequest, e as StrictResponse } from './HttpResponse-BWB1yDNM.mjs';
2
2
  import './typeUtils.mjs';
@@ -1,2 +1,2 @@
1
- export { f as HttpResponse, H as HttpResponseInit, S as StrictRequest, e as StrictResponse } from './HttpResponse-_514VQ9z.js';
1
+ export { f as HttpResponse, H as HttpResponseInit, S as StrictRequest, e as StrictResponse } from './HttpResponse-DeJBWGN5.js';
2
2
  import './typeUtils.js';
@@ -1,22 +1,25 @@
1
1
  import { EventMap, Emitter } from 'strict-event-emitter';
2
- import { R as RequestHandler, g as RequestHandlerDefaultInfo } from './HttpResponse-wcp03c7-.mjs';
2
+ import { R as RequestHandler } from './HttpResponse-BWB1yDNM.mjs';
3
3
  import { LifeCycleEventEmitter } from './sharedOptions.mjs';
4
4
  import { Disposable } from './utils/internal/Disposable.mjs';
5
+ import { WebSocketHandler } from './handlers/WebSocketHandler.mjs';
5
6
  import './typeUtils.mjs';
6
7
  import './utils/request/onUnhandledRequest.mjs';
8
+ import '@mswjs/interceptors/WebSocket';
9
+ import './utils/matching/matchRequestUrl.mjs';
7
10
 
8
11
  declare abstract class HandlersController {
9
- abstract prepend(runtimeHandlers: Array<RequestHandler>): void;
10
- abstract reset(nextHandles: Array<RequestHandler>): void;
11
- abstract currentHandlers(): Array<RequestHandler>;
12
+ abstract prepend(runtimeHandlers: Array<RequestHandler | WebSocketHandler>): void;
13
+ abstract reset(nextHandles: Array<RequestHandler | WebSocketHandler>): void;
14
+ abstract currentHandlers(): Array<RequestHandler | WebSocketHandler>;
12
15
  }
13
16
  declare class InMemoryHandlersController implements HandlersController {
14
17
  private initialHandlers;
15
18
  private handlers;
16
- constructor(initialHandlers: Array<RequestHandler>);
17
- prepend(runtimeHandles: Array<RequestHandler>): void;
18
- reset(nextHandlers: Array<RequestHandler>): void;
19
- currentHandlers(): Array<RequestHandler>;
19
+ constructor(initialHandlers: Array<RequestHandler | WebSocketHandler>);
20
+ prepend(runtimeHandles: Array<RequestHandler | WebSocketHandler>): void;
21
+ reset(nextHandlers: Array<RequestHandler | WebSocketHandler>): void;
22
+ currentHandlers(): Array<RequestHandler | WebSocketHandler>;
20
23
  }
21
24
  /**
22
25
  * Generic class for the mock API setup.
@@ -26,12 +29,12 @@ declare abstract class SetupApi<EventsMap extends EventMap> extends Disposable {
26
29
  protected readonly emitter: Emitter<EventsMap>;
27
30
  protected readonly publicEmitter: Emitter<EventsMap>;
28
31
  readonly events: LifeCycleEventEmitter<EventsMap>;
29
- constructor(...initialHandlers: Array<RequestHandler>);
32
+ constructor(...initialHandlers: Array<RequestHandler | WebSocketHandler>);
30
33
  private validateHandlers;
31
- use(...runtimeHandlers: Array<RequestHandler>): void;
34
+ use(...runtimeHandlers: Array<RequestHandler | WebSocketHandler>): void;
32
35
  restoreHandlers(): void;
33
- resetHandlers(...nextHandlers: Array<RequestHandler>): void;
34
- listHandlers(): ReadonlyArray<RequestHandler<RequestHandlerDefaultInfo, any, any>>;
36
+ resetHandlers(...nextHandlers: Array<RequestHandler | WebSocketHandler>): void;
37
+ listHandlers(): ReadonlyArray<RequestHandler | WebSocketHandler>;
35
38
  private createLifeCycleEvents;
36
39
  }
37
40
 
@@ -1,22 +1,25 @@
1
1
  import { EventMap, Emitter } from 'strict-event-emitter';
2
- import { R as RequestHandler, g as RequestHandlerDefaultInfo } from './HttpResponse-_514VQ9z.js';
2
+ import { R as RequestHandler } from './HttpResponse-DeJBWGN5.js';
3
3
  import { LifeCycleEventEmitter } from './sharedOptions.js';
4
4
  import { Disposable } from './utils/internal/Disposable.js';
5
+ import { WebSocketHandler } from './handlers/WebSocketHandler.js';
5
6
  import './typeUtils.js';
6
7
  import './utils/request/onUnhandledRequest.js';
8
+ import '@mswjs/interceptors/WebSocket';
9
+ import './utils/matching/matchRequestUrl.js';
7
10
 
8
11
  declare abstract class HandlersController {
9
- abstract prepend(runtimeHandlers: Array<RequestHandler>): void;
10
- abstract reset(nextHandles: Array<RequestHandler>): void;
11
- abstract currentHandlers(): Array<RequestHandler>;
12
+ abstract prepend(runtimeHandlers: Array<RequestHandler | WebSocketHandler>): void;
13
+ abstract reset(nextHandles: Array<RequestHandler | WebSocketHandler>): void;
14
+ abstract currentHandlers(): Array<RequestHandler | WebSocketHandler>;
12
15
  }
13
16
  declare class InMemoryHandlersController implements HandlersController {
14
17
  private initialHandlers;
15
18
  private handlers;
16
- constructor(initialHandlers: Array<RequestHandler>);
17
- prepend(runtimeHandles: Array<RequestHandler>): void;
18
- reset(nextHandlers: Array<RequestHandler>): void;
19
- currentHandlers(): Array<RequestHandler>;
19
+ constructor(initialHandlers: Array<RequestHandler | WebSocketHandler>);
20
+ prepend(runtimeHandles: Array<RequestHandler | WebSocketHandler>): void;
21
+ reset(nextHandlers: Array<RequestHandler | WebSocketHandler>): void;
22
+ currentHandlers(): Array<RequestHandler | WebSocketHandler>;
20
23
  }
21
24
  /**
22
25
  * Generic class for the mock API setup.
@@ -26,12 +29,12 @@ declare abstract class SetupApi<EventsMap extends EventMap> extends Disposable {
26
29
  protected readonly emitter: Emitter<EventsMap>;
27
30
  protected readonly publicEmitter: Emitter<EventsMap>;
28
31
  readonly events: LifeCycleEventEmitter<EventsMap>;
29
- constructor(...initialHandlers: Array<RequestHandler>);
32
+ constructor(...initialHandlers: Array<RequestHandler | WebSocketHandler>);
30
33
  private validateHandlers;
31
- use(...runtimeHandlers: Array<RequestHandler>): void;
34
+ use(...runtimeHandlers: Array<RequestHandler | WebSocketHandler>): void;
32
35
  restoreHandlers(): void;
33
- resetHandlers(...nextHandlers: Array<RequestHandler>): void;
34
- listHandlers(): ReadonlyArray<RequestHandler<RequestHandlerDefaultInfo, any, any>>;
36
+ resetHandlers(...nextHandlers: Array<RequestHandler | WebSocketHandler>): void;
37
+ listHandlers(): ReadonlyArray<RequestHandler | WebSocketHandler>;
35
38
  private createLifeCycleEvents;
36
39
  }
37
40
 
@@ -84,7 +84,9 @@ class SetupApi extends import_Disposable.Disposable {
84
84
  }
85
85
  restoreHandlers() {
86
86
  this.handlersController.currentHandlers().forEach((handler) => {
87
- handler.isUsed = false;
87
+ if ("isUsed" in handler) {
88
+ handler.isUsed = false;
89
+ }
88
90
  });
89
91
  }
90
92
  resetHandlers(...nextHandlers) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/SetupApi.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { EventMap, Emitter } from 'strict-event-emitter'\nimport {\n RequestHandler,\n RequestHandlerDefaultInfo,\n} from './handlers/RequestHandler'\nimport { LifeCycleEventEmitter } from './sharedOptions'\nimport { devUtils } from './utils/internal/devUtils'\nimport { pipeEvents } from './utils/internal/pipeEvents'\nimport { toReadonlyArray } from './utils/internal/toReadonlyArray'\nimport { Disposable } from './utils/internal/Disposable'\n\nexport abstract class HandlersController {\n abstract prepend(runtimeHandlers: Array<RequestHandler>): void\n abstract reset(nextHandles: Array<RequestHandler>): void\n abstract currentHandlers(): Array<RequestHandler>\n}\n\nexport class InMemoryHandlersController implements HandlersController {\n private handlers: Array<RequestHandler>\n\n constructor(private initialHandlers: Array<RequestHandler>) {\n this.handlers = [...initialHandlers]\n }\n\n public prepend(runtimeHandles: Array<RequestHandler>): void {\n this.handlers.unshift(...runtimeHandles)\n }\n\n public reset(nextHandlers: Array<RequestHandler>): void {\n this.handlers =\n nextHandlers.length > 0 ? [...nextHandlers] : [...this.initialHandlers]\n }\n\n public currentHandlers(): Array<RequestHandler> {\n return this.handlers\n }\n}\n\n/**\n * Generic class for the mock API setup.\n */\nexport abstract class SetupApi<EventsMap extends EventMap> extends Disposable {\n protected handlersController: HandlersController\n protected readonly emitter: Emitter<EventsMap>\n protected readonly publicEmitter: Emitter<EventsMap>\n\n public readonly events: LifeCycleEventEmitter<EventsMap>\n\n constructor(...initialHandlers: Array<RequestHandler>) {\n super()\n\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 this.handlersController = new InMemoryHandlersController(initialHandlers)\n\n this.emitter = new Emitter<EventsMap>()\n this.publicEmitter = new Emitter<EventsMap>()\n pipeEvents(this.emitter, this.publicEmitter)\n\n this.events = this.createLifeCycleEvents()\n\n this.subscriptions.push(() => {\n this.emitter.removeAllListeners()\n this.publicEmitter.removeAllListeners()\n })\n }\n\n private validateHandlers(handlers: ReadonlyArray<RequestHandler>): boolean {\n // Guard against incorrect call signature of the setup API.\n return handlers.every((handler) => !Array.isArray(handler))\n }\n\n public use(...runtimeHandlers: Array<RequestHandler>): void {\n invariant(\n this.validateHandlers(runtimeHandlers),\n devUtils.formatMessage(\n `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 this.handlersController.prepend(runtimeHandlers)\n }\n\n public restoreHandlers(): void {\n this.handlersController.currentHandlers().forEach((handler) => {\n handler.isUsed = false\n })\n }\n\n public resetHandlers(...nextHandlers: Array<RequestHandler>): void {\n this.handlersController.reset(nextHandlers)\n }\n\n public listHandlers(): ReadonlyArray<\n RequestHandler<RequestHandlerDefaultInfo, any, any>\n > {\n return toReadonlyArray(this.handlersController.currentHandlers())\n }\n\n private createLifeCycleEvents(): LifeCycleEventEmitter<EventsMap> {\n return {\n on: (...args: any[]) => {\n return (this.publicEmitter.on as any)(...args)\n },\n removeListener: (...args: any[]) => {\n return (this.publicEmitter.removeListener as any)(...args)\n },\n removeAllListeners: (...args: any[]) => {\n return this.publicEmitter.removeAllListeners(...args)\n },\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA0B;AAC1B,kCAAkC;AAMlC,sBAAyB;AACzB,wBAA2B;AAC3B,6BAAgC;AAChC,wBAA2B;AAEpB,MAAe,mBAAmB;AAIzC;AAEO,MAAM,2BAAyD;AAAA,EAGpE,YAAoB,iBAAwC;AAAxC;AAClB,SAAK,WAAW,CAAC,GAAG,eAAe;AAAA,EACrC;AAAA,EAJQ;AAAA,EAMD,QAAQ,gBAA6C;AAC1D,SAAK,SAAS,QAAQ,GAAG,cAAc;AAAA,EACzC;AAAA,EAEO,MAAM,cAA2C;AACtD,SAAK,WACH,aAAa,SAAS,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,KAAK,eAAe;AAAA,EAC1E;AAAA,EAEO,kBAAyC;AAC9C,WAAO,KAAK;AAAA,EACd;AACF;AAKO,MAAe,iBAA6C,6BAAW;AAAA,EAClE;AAAA,EACS;AAAA,EACA;AAAA,EAEH;AAAA,EAEhB,eAAe,iBAAwC;AACrD,UAAM;AAEN;AAAA,MACE,KAAK,iBAAiB,eAAe;AAAA,MACrC,yBAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,SAAK,qBAAqB,IAAI,2BAA2B,eAAe;AAExE,SAAK,UAAU,IAAI,oCAAmB;AACtC,SAAK,gBAAgB,IAAI,oCAAmB;AAC5C,sCAAW,KAAK,SAAS,KAAK,aAAa;AAE3C,SAAK,SAAS,KAAK,sBAAsB;AAEzC,SAAK,cAAc,KAAK,MAAM;AAC5B,WAAK,QAAQ,mBAAmB;AAChC,WAAK,cAAc,mBAAmB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEQ,iBAAiB,UAAkD;AAEzE,WAAO,SAAS,MAAM,CAAC,YAAY,CAAC,MAAM,QAAQ,OAAO,CAAC;AAAA,EAC5D;AAAA,EAEO,OAAO,iBAA8C;AAC1D;AAAA,MACE,KAAK,iBAAiB,eAAe;AAAA,MACrC,yBAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,SAAK,mBAAmB,QAAQ,eAAe;AAAA,EACjD;AAAA,EAEO,kBAAwB;AAC7B,SAAK,mBAAmB,gBAAgB,EAAE,QAAQ,CAAC,YAAY;AAC7D,cAAQ,SAAS;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEO,iBAAiB,cAA2C;AACjE,SAAK,mBAAmB,MAAM,YAAY;AAAA,EAC5C;AAAA,EAEO,eAEL;AACA,eAAO,wCAAgB,KAAK,mBAAmB,gBAAgB,CAAC;AAAA,EAClE;AAAA,EAEQ,wBAA0D;AAChE,WAAO;AAAA,MACL,IAAI,IAAI,SAAgB;AACtB,eAAQ,KAAK,cAAc,GAAW,GAAG,IAAI;AAAA,MAC/C;AAAA,MACA,gBAAgB,IAAI,SAAgB;AAClC,eAAQ,KAAK,cAAc,eAAuB,GAAG,IAAI;AAAA,MAC3D;AAAA,MACA,oBAAoB,IAAI,SAAgB;AACtC,eAAO,KAAK,cAAc,mBAAmB,GAAG,IAAI;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/core/SetupApi.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { EventMap, Emitter } from 'strict-event-emitter'\nimport { RequestHandler } from './handlers/RequestHandler'\nimport { LifeCycleEventEmitter } from './sharedOptions'\nimport { devUtils } from './utils/internal/devUtils'\nimport { pipeEvents } from './utils/internal/pipeEvents'\nimport { toReadonlyArray } from './utils/internal/toReadonlyArray'\nimport { Disposable } from './utils/internal/Disposable'\nimport type { WebSocketHandler } from './handlers/WebSocketHandler'\n\nexport abstract class HandlersController {\n abstract prepend(\n runtimeHandlers: Array<RequestHandler | WebSocketHandler>,\n ): void\n abstract reset(nextHandles: Array<RequestHandler | WebSocketHandler>): void\n abstract currentHandlers(): Array<RequestHandler | WebSocketHandler>\n}\n\nexport class InMemoryHandlersController implements HandlersController {\n private handlers: Array<RequestHandler | WebSocketHandler>\n\n constructor(\n private initialHandlers: Array<RequestHandler | WebSocketHandler>,\n ) {\n this.handlers = [...initialHandlers]\n }\n\n public prepend(\n runtimeHandles: Array<RequestHandler | WebSocketHandler>,\n ): void {\n this.handlers.unshift(...runtimeHandles)\n }\n\n public reset(nextHandlers: Array<RequestHandler | WebSocketHandler>): void {\n this.handlers =\n nextHandlers.length > 0 ? [...nextHandlers] : [...this.initialHandlers]\n }\n\n public currentHandlers(): Array<RequestHandler | WebSocketHandler> {\n return this.handlers\n }\n}\n\n/**\n * Generic class for the mock API setup.\n */\nexport abstract class SetupApi<EventsMap extends EventMap> extends Disposable {\n protected handlersController: HandlersController\n protected readonly emitter: Emitter<EventsMap>\n protected readonly publicEmitter: Emitter<EventsMap>\n\n public readonly events: LifeCycleEventEmitter<EventsMap>\n\n constructor(...initialHandlers: Array<RequestHandler | WebSocketHandler>) {\n super()\n\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 this.handlersController = new InMemoryHandlersController(initialHandlers)\n\n this.emitter = new Emitter<EventsMap>()\n this.publicEmitter = new Emitter<EventsMap>()\n pipeEvents(this.emitter, this.publicEmitter)\n\n this.events = this.createLifeCycleEvents()\n\n this.subscriptions.push(() => {\n this.emitter.removeAllListeners()\n this.publicEmitter.removeAllListeners()\n })\n }\n\n private validateHandlers(handlers: ReadonlyArray<unknown>): boolean {\n // Guard against incorrect call signature of the setup API.\n return handlers.every((handler) => !Array.isArray(handler))\n }\n\n public use(\n ...runtimeHandlers: Array<RequestHandler | WebSocketHandler>\n ): void {\n invariant(\n this.validateHandlers(runtimeHandlers),\n devUtils.formatMessage(\n `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 this.handlersController.prepend(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(\n ...nextHandlers: Array<RequestHandler | WebSocketHandler>\n ): void {\n this.handlersController.reset(nextHandlers)\n }\n\n public listHandlers(): ReadonlyArray<RequestHandler | WebSocketHandler> {\n return toReadonlyArray(this.handlersController.currentHandlers())\n }\n\n private createLifeCycleEvents(): LifeCycleEventEmitter<EventsMap> {\n return {\n on: (...args: any[]) => {\n return (this.publicEmitter.on as any)(...args)\n },\n removeListener: (...args: any[]) => {\n return (this.publicEmitter.removeListener as any)(...args)\n },\n removeAllListeners: (...args: any[]) => {\n return this.publicEmitter.removeAllListeners(...args)\n },\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA0B;AAC1B,kCAAkC;AAGlC,sBAAyB;AACzB,wBAA2B;AAC3B,6BAAgC;AAChC,wBAA2B;AAGpB,MAAe,mBAAmB;AAMzC;AAEO,MAAM,2BAAyD;AAAA,EAGpE,YACU,iBACR;AADQ;AAER,SAAK,WAAW,CAAC,GAAG,eAAe;AAAA,EACrC;AAAA,EANQ;AAAA,EAQD,QACL,gBACM;AACN,SAAK,SAAS,QAAQ,GAAG,cAAc;AAAA,EACzC;AAAA,EAEO,MAAM,cAA8D;AACzE,SAAK,WACH,aAAa,SAAS,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,KAAK,eAAe;AAAA,EAC1E;AAAA,EAEO,kBAA4D;AACjE,WAAO,KAAK;AAAA,EACd;AACF;AAKO,MAAe,iBAA6C,6BAAW;AAAA,EAClE;AAAA,EACS;AAAA,EACA;AAAA,EAEH;AAAA,EAEhB,eAAe,iBAA2D;AACxE,UAAM;AAEN;AAAA,MACE,KAAK,iBAAiB,eAAe;AAAA,MACrC,yBAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,SAAK,qBAAqB,IAAI,2BAA2B,eAAe;AAExE,SAAK,UAAU,IAAI,oCAAmB;AACtC,SAAK,gBAAgB,IAAI,oCAAmB;AAC5C,sCAAW,KAAK,SAAS,KAAK,aAAa;AAE3C,SAAK,SAAS,KAAK,sBAAsB;AAEzC,SAAK,cAAc,KAAK,MAAM;AAC5B,WAAK,QAAQ,mBAAmB;AAChC,WAAK,cAAc,mBAAmB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEQ,iBAAiB,UAA2C;AAElE,WAAO,SAAS,MAAM,CAAC,YAAY,CAAC,MAAM,QAAQ,OAAO,CAAC;AAAA,EAC5D;AAAA,EAEO,OACF,iBACG;AACN;AAAA,MACE,KAAK,iBAAiB,eAAe;AAAA,MACrC,yBAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,SAAK,mBAAmB,QAAQ,eAAe;AAAA,EACjD;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,iBACF,cACG;AACN,SAAK,mBAAmB,MAAM,YAAY;AAAA,EAC5C;AAAA,EAEO,eAAiE;AACtE,eAAO,wCAAgB,KAAK,mBAAmB,gBAAgB,CAAC;AAAA,EAClE;AAAA,EAEQ,wBAA0D;AAChE,WAAO;AAAA,MACL,IAAI,IAAI,SAAgB;AACtB,eAAQ,KAAK,cAAc,GAAW,GAAG,IAAI;AAAA,MAC/C;AAAA,MACA,gBAAgB,IAAI,SAAgB;AAClC,eAAQ,KAAK,cAAc,eAAuB,GAAG,IAAI;AAAA,MAC3D;AAAA,MACA,oBAAoB,IAAI,SAAgB;AACtC,eAAO,KAAK,cAAc,mBAAmB,GAAG,IAAI;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -59,7 +59,9 @@ class SetupApi extends Disposable {
59
59
  }
60
60
  restoreHandlers() {
61
61
  this.handlersController.currentHandlers().forEach((handler) => {
62
- handler.isUsed = false;
62
+ if ("isUsed" in handler) {
63
+ handler.isUsed = false;
64
+ }
63
65
  });
64
66
  }
65
67
  resetHandlers(...nextHandlers) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/SetupApi.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { EventMap, Emitter } from 'strict-event-emitter'\nimport {\n RequestHandler,\n RequestHandlerDefaultInfo,\n} from './handlers/RequestHandler'\nimport { LifeCycleEventEmitter } from './sharedOptions'\nimport { devUtils } from './utils/internal/devUtils'\nimport { pipeEvents } from './utils/internal/pipeEvents'\nimport { toReadonlyArray } from './utils/internal/toReadonlyArray'\nimport { Disposable } from './utils/internal/Disposable'\n\nexport abstract class HandlersController {\n abstract prepend(runtimeHandlers: Array<RequestHandler>): void\n abstract reset(nextHandles: Array<RequestHandler>): void\n abstract currentHandlers(): Array<RequestHandler>\n}\n\nexport class InMemoryHandlersController implements HandlersController {\n private handlers: Array<RequestHandler>\n\n constructor(private initialHandlers: Array<RequestHandler>) {\n this.handlers = [...initialHandlers]\n }\n\n public prepend(runtimeHandles: Array<RequestHandler>): void {\n this.handlers.unshift(...runtimeHandles)\n }\n\n public reset(nextHandlers: Array<RequestHandler>): void {\n this.handlers =\n nextHandlers.length > 0 ? [...nextHandlers] : [...this.initialHandlers]\n }\n\n public currentHandlers(): Array<RequestHandler> {\n return this.handlers\n }\n}\n\n/**\n * Generic class for the mock API setup.\n */\nexport abstract class SetupApi<EventsMap extends EventMap> extends Disposable {\n protected handlersController: HandlersController\n protected readonly emitter: Emitter<EventsMap>\n protected readonly publicEmitter: Emitter<EventsMap>\n\n public readonly events: LifeCycleEventEmitter<EventsMap>\n\n constructor(...initialHandlers: Array<RequestHandler>) {\n super()\n\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 this.handlersController = new InMemoryHandlersController(initialHandlers)\n\n this.emitter = new Emitter<EventsMap>()\n this.publicEmitter = new Emitter<EventsMap>()\n pipeEvents(this.emitter, this.publicEmitter)\n\n this.events = this.createLifeCycleEvents()\n\n this.subscriptions.push(() => {\n this.emitter.removeAllListeners()\n this.publicEmitter.removeAllListeners()\n })\n }\n\n private validateHandlers(handlers: ReadonlyArray<RequestHandler>): boolean {\n // Guard against incorrect call signature of the setup API.\n return handlers.every((handler) => !Array.isArray(handler))\n }\n\n public use(...runtimeHandlers: Array<RequestHandler>): void {\n invariant(\n this.validateHandlers(runtimeHandlers),\n devUtils.formatMessage(\n `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 this.handlersController.prepend(runtimeHandlers)\n }\n\n public restoreHandlers(): void {\n this.handlersController.currentHandlers().forEach((handler) => {\n handler.isUsed = false\n })\n }\n\n public resetHandlers(...nextHandlers: Array<RequestHandler>): void {\n this.handlersController.reset(nextHandlers)\n }\n\n public listHandlers(): ReadonlyArray<\n RequestHandler<RequestHandlerDefaultInfo, any, any>\n > {\n return toReadonlyArray(this.handlersController.currentHandlers())\n }\n\n private createLifeCycleEvents(): LifeCycleEventEmitter<EventsMap> {\n return {\n on: (...args: any[]) => {\n return (this.publicEmitter.on as any)(...args)\n },\n removeListener: (...args: any[]) => {\n return (this.publicEmitter.removeListener as any)(...args)\n },\n removeAllListeners: (...args: any[]) => {\n return this.publicEmitter.removeAllListeners(...args)\n },\n }\n }\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B,SAAmB,eAAe;AAMlC,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAEpB,MAAe,mBAAmB;AAIzC;AAEO,MAAM,2BAAyD;AAAA,EAGpE,YAAoB,iBAAwC;AAAxC;AAClB,SAAK,WAAW,CAAC,GAAG,eAAe;AAAA,EACrC;AAAA,EAJQ;AAAA,EAMD,QAAQ,gBAA6C;AAC1D,SAAK,SAAS,QAAQ,GAAG,cAAc;AAAA,EACzC;AAAA,EAEO,MAAM,cAA2C;AACtD,SAAK,WACH,aAAa,SAAS,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,KAAK,eAAe;AAAA,EAC1E;AAAA,EAEO,kBAAyC;AAC9C,WAAO,KAAK;AAAA,EACd;AACF;AAKO,MAAe,iBAA6C,WAAW;AAAA,EAClE;AAAA,EACS;AAAA,EACA;AAAA,EAEH;AAAA,EAEhB,eAAe,iBAAwC;AACrD,UAAM;AAEN;AAAA,MACE,KAAK,iBAAiB,eAAe;AAAA,MACrC,SAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,SAAK,qBAAqB,IAAI,2BAA2B,eAAe;AAExE,SAAK,UAAU,IAAI,QAAmB;AACtC,SAAK,gBAAgB,IAAI,QAAmB;AAC5C,eAAW,KAAK,SAAS,KAAK,aAAa;AAE3C,SAAK,SAAS,KAAK,sBAAsB;AAEzC,SAAK,cAAc,KAAK,MAAM;AAC5B,WAAK,QAAQ,mBAAmB;AAChC,WAAK,cAAc,mBAAmB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEQ,iBAAiB,UAAkD;AAEzE,WAAO,SAAS,MAAM,CAAC,YAAY,CAAC,MAAM,QAAQ,OAAO,CAAC;AAAA,EAC5D;AAAA,EAEO,OAAO,iBAA8C;AAC1D;AAAA,MACE,KAAK,iBAAiB,eAAe;AAAA,MACrC,SAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,SAAK,mBAAmB,QAAQ,eAAe;AAAA,EACjD;AAAA,EAEO,kBAAwB;AAC7B,SAAK,mBAAmB,gBAAgB,EAAE,QAAQ,CAAC,YAAY;AAC7D,cAAQ,SAAS;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEO,iBAAiB,cAA2C;AACjE,SAAK,mBAAmB,MAAM,YAAY;AAAA,EAC5C;AAAA,EAEO,eAEL;AACA,WAAO,gBAAgB,KAAK,mBAAmB,gBAAgB,CAAC;AAAA,EAClE;AAAA,EAEQ,wBAA0D;AAChE,WAAO;AAAA,MACL,IAAI,IAAI,SAAgB;AACtB,eAAQ,KAAK,cAAc,GAAW,GAAG,IAAI;AAAA,MAC/C;AAAA,MACA,gBAAgB,IAAI,SAAgB;AAClC,eAAQ,KAAK,cAAc,eAAuB,GAAG,IAAI;AAAA,MAC3D;AAAA,MACA,oBAAoB,IAAI,SAAgB;AACtC,eAAO,KAAK,cAAc,mBAAmB,GAAG,IAAI;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/core/SetupApi.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { EventMap, Emitter } from 'strict-event-emitter'\nimport { RequestHandler } from './handlers/RequestHandler'\nimport { LifeCycleEventEmitter } from './sharedOptions'\nimport { devUtils } from './utils/internal/devUtils'\nimport { pipeEvents } from './utils/internal/pipeEvents'\nimport { toReadonlyArray } from './utils/internal/toReadonlyArray'\nimport { Disposable } from './utils/internal/Disposable'\nimport type { WebSocketHandler } from './handlers/WebSocketHandler'\n\nexport abstract class HandlersController {\n abstract prepend(\n runtimeHandlers: Array<RequestHandler | WebSocketHandler>,\n ): void\n abstract reset(nextHandles: Array<RequestHandler | WebSocketHandler>): void\n abstract currentHandlers(): Array<RequestHandler | WebSocketHandler>\n}\n\nexport class InMemoryHandlersController implements HandlersController {\n private handlers: Array<RequestHandler | WebSocketHandler>\n\n constructor(\n private initialHandlers: Array<RequestHandler | WebSocketHandler>,\n ) {\n this.handlers = [...initialHandlers]\n }\n\n public prepend(\n runtimeHandles: Array<RequestHandler | WebSocketHandler>,\n ): void {\n this.handlers.unshift(...runtimeHandles)\n }\n\n public reset(nextHandlers: Array<RequestHandler | WebSocketHandler>): void {\n this.handlers =\n nextHandlers.length > 0 ? [...nextHandlers] : [...this.initialHandlers]\n }\n\n public currentHandlers(): Array<RequestHandler | WebSocketHandler> {\n return this.handlers\n }\n}\n\n/**\n * Generic class for the mock API setup.\n */\nexport abstract class SetupApi<EventsMap extends EventMap> extends Disposable {\n protected handlersController: HandlersController\n protected readonly emitter: Emitter<EventsMap>\n protected readonly publicEmitter: Emitter<EventsMap>\n\n public readonly events: LifeCycleEventEmitter<EventsMap>\n\n constructor(...initialHandlers: Array<RequestHandler | WebSocketHandler>) {\n super()\n\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 this.handlersController = new InMemoryHandlersController(initialHandlers)\n\n this.emitter = new Emitter<EventsMap>()\n this.publicEmitter = new Emitter<EventsMap>()\n pipeEvents(this.emitter, this.publicEmitter)\n\n this.events = this.createLifeCycleEvents()\n\n this.subscriptions.push(() => {\n this.emitter.removeAllListeners()\n this.publicEmitter.removeAllListeners()\n })\n }\n\n private validateHandlers(handlers: ReadonlyArray<unknown>): boolean {\n // Guard against incorrect call signature of the setup API.\n return handlers.every((handler) => !Array.isArray(handler))\n }\n\n public use(\n ...runtimeHandlers: Array<RequestHandler | WebSocketHandler>\n ): void {\n invariant(\n this.validateHandlers(runtimeHandlers),\n devUtils.formatMessage(\n `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 this.handlersController.prepend(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(\n ...nextHandlers: Array<RequestHandler | WebSocketHandler>\n ): void {\n this.handlersController.reset(nextHandlers)\n }\n\n public listHandlers(): ReadonlyArray<RequestHandler | WebSocketHandler> {\n return toReadonlyArray(this.handlersController.currentHandlers())\n }\n\n private createLifeCycleEvents(): LifeCycleEventEmitter<EventsMap> {\n return {\n on: (...args: any[]) => {\n return (this.publicEmitter.on as any)(...args)\n },\n removeListener: (...args: any[]) => {\n return (this.publicEmitter.removeListener as any)(...args)\n },\n removeAllListeners: (...args: any[]) => {\n return this.publicEmitter.removeAllListeners(...args)\n },\n }\n }\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B,SAAmB,eAAe;AAGlC,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAGpB,MAAe,mBAAmB;AAMzC;AAEO,MAAM,2BAAyD;AAAA,EAGpE,YACU,iBACR;AADQ;AAER,SAAK,WAAW,CAAC,GAAG,eAAe;AAAA,EACrC;AAAA,EANQ;AAAA,EAQD,QACL,gBACM;AACN,SAAK,SAAS,QAAQ,GAAG,cAAc;AAAA,EACzC;AAAA,EAEO,MAAM,cAA8D;AACzE,SAAK,WACH,aAAa,SAAS,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,KAAK,eAAe;AAAA,EAC1E;AAAA,EAEO,kBAA4D;AACjE,WAAO,KAAK;AAAA,EACd;AACF;AAKO,MAAe,iBAA6C,WAAW;AAAA,EAClE;AAAA,EACS;AAAA,EACA;AAAA,EAEH;AAAA,EAEhB,eAAe,iBAA2D;AACxE,UAAM;AAEN;AAAA,MACE,KAAK,iBAAiB,eAAe;AAAA,MACrC,SAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,SAAK,qBAAqB,IAAI,2BAA2B,eAAe;AAExE,SAAK,UAAU,IAAI,QAAmB;AACtC,SAAK,gBAAgB,IAAI,QAAmB;AAC5C,eAAW,KAAK,SAAS,KAAK,aAAa;AAE3C,SAAK,SAAS,KAAK,sBAAsB;AAEzC,SAAK,cAAc,KAAK,MAAM;AAC5B,WAAK,QAAQ,mBAAmB;AAChC,WAAK,cAAc,mBAAmB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEQ,iBAAiB,UAA2C;AAElE,WAAO,SAAS,MAAM,CAAC,YAAY,CAAC,MAAM,QAAQ,OAAO,CAAC;AAAA,EAC5D;AAAA,EAEO,OACF,iBACG;AACN;AAAA,MACE,KAAK,iBAAiB,eAAe;AAAA,MACrC,SAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,SAAK,mBAAmB,QAAQ,eAAe;AAAA,EACjD;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,iBACF,cACG;AACN,SAAK,mBAAmB,MAAM,YAAY;AAAA,EAC5C;AAAA,EAEO,eAAiE;AACtE,WAAO,gBAAgB,KAAK,mBAAmB,gBAAgB,CAAC;AAAA,EAClE;AAAA,EAEQ,wBAA0D;AAChE,WAAO;AAAA,MACL,IAAI,IAAI,SAAgB;AACtB,eAAQ,KAAK,cAAc,GAAW,GAAG,IAAI;AAAA,MAC/C;AAAA,MACA,gBAAgB,IAAI,SAAgB;AAClC,eAAQ,KAAK,cAAc,eAAuB,GAAG,IAAI;AAAA,MAC3D;AAAA,MACA,oBAAoB,IAAI,SAAgB;AACtC,eAAO,KAAK,cAAc,mBAAmB,GAAG,IAAI;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -1,4 +1,4 @@
1
- import { R as RequestHandler } from './HttpResponse-wcp03c7-.mjs';
1
+ import { R as RequestHandler } from './HttpResponse-BWB1yDNM.mjs';
2
2
  import './typeUtils.mjs';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { R as RequestHandler } from './HttpResponse-_514VQ9z.js';
1
+ import { R as RequestHandler } from './HttpResponse-DeJBWGN5.js';
2
2
  import './typeUtils.js';
3
3
 
4
4
  /**
@@ -1,6 +1,6 @@
1
1
  import { DocumentNode } from 'graphql';
2
- import { c as RequestHandlerOptions, a as ResponseResolver } from './HttpResponse-wcp03c7-.mjs';
3
- import { a as GraphQLQuery, b as GraphQLVariables, e as GraphQLHandlerNameSelector, G as GraphQLHandler, f as GraphQLResolverExtras, g as GraphQLResponseBody } from './GraphQLHandler-AenIUdwE.mjs';
2
+ import { c as RequestHandlerOptions, a as ResponseResolver } from './HttpResponse-BWB1yDNM.mjs';
3
+ import { a as GraphQLQuery, b as GraphQLVariables, e as GraphQLHandlerNameSelector, G as GraphQLHandler, f as GraphQLResolverExtras, g as GraphQLResponseBody } from './GraphQLHandler-QGQY_9Rc.mjs';
4
4
  import { Path } from './utils/matching/matchRequestUrl.mjs';
5
5
  import './typeUtils.mjs';
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { DocumentNode } from 'graphql';
2
- import { c as RequestHandlerOptions, a as ResponseResolver } from './HttpResponse-_514VQ9z.js';
3
- import { a as GraphQLQuery, b as GraphQLVariables, e as GraphQLHandlerNameSelector, G as GraphQLHandler, f as GraphQLResolverExtras, g as GraphQLResponseBody } from './GraphQLHandler-jOzqbxSK.js';
2
+ import { c as RequestHandlerOptions, a as ResponseResolver } from './HttpResponse-DeJBWGN5.js';
3
+ import { a as GraphQLQuery, b as GraphQLVariables, e as GraphQLHandlerNameSelector, G as GraphQLHandler, f as GraphQLResolverExtras, g as GraphQLResponseBody } from './GraphQLHandler-Cbu12sb0.js';
4
4
  import { Path } from './utils/matching/matchRequestUrl.js';
5
5
  import './typeUtils.js';
6
6
 
@@ -1,5 +1,5 @@
1
1
  import 'graphql';
2
- import '../HttpResponse-wcp03c7-.mjs';
2
+ import '../HttpResponse-BWB1yDNM.mjs';
3
3
  import '../utils/matching/matchRequestUrl.mjs';
4
- export { E as ExpectedOperationTypeNode, G as GraphQLHandler, l as GraphQLHandlerInfo, e as GraphQLHandlerNameSelector, d as GraphQLJsonRequestBody, a as GraphQLQuery, c as GraphQLRequestBody, m as GraphQLRequestParsedResult, f as GraphQLResolverExtras, g as GraphQLResponseBody, b as GraphQLVariables, n as isDocumentNode } from '../GraphQLHandler-AenIUdwE.mjs';
4
+ export { E as ExpectedOperationTypeNode, G as GraphQLHandler, l as GraphQLHandlerInfo, e as GraphQLHandlerNameSelector, d as GraphQLJsonRequestBody, a as GraphQLQuery, c as GraphQLRequestBody, m as GraphQLRequestParsedResult, f as GraphQLResolverExtras, g as GraphQLResponseBody, b as GraphQLVariables, n as isDocumentNode } from '../GraphQLHandler-QGQY_9Rc.mjs';
5
5
  import '../typeUtils.mjs';
@@ -1,5 +1,5 @@
1
1
  import 'graphql';
2
- import '../HttpResponse-_514VQ9z.js';
2
+ import '../HttpResponse-DeJBWGN5.js';
3
3
  import '../utils/matching/matchRequestUrl.js';
4
- export { E as ExpectedOperationTypeNode, G as GraphQLHandler, l as GraphQLHandlerInfo, e as GraphQLHandlerNameSelector, d as GraphQLJsonRequestBody, a as GraphQLQuery, c as GraphQLRequestBody, m as GraphQLRequestParsedResult, f as GraphQLResolverExtras, g as GraphQLResponseBody, b as GraphQLVariables, n as isDocumentNode } from '../GraphQLHandler-jOzqbxSK.js';
4
+ export { E as ExpectedOperationTypeNode, G as GraphQLHandler, l as GraphQLHandlerInfo, e as GraphQLHandlerNameSelector, d as GraphQLJsonRequestBody, a as GraphQLQuery, c as GraphQLRequestBody, m as GraphQLRequestParsedResult, f as GraphQLResolverExtras, g as GraphQLResponseBody, b as GraphQLVariables, n as isDocumentNode } from '../GraphQLHandler-Cbu12sb0.js';
5
5
  import '../typeUtils.js';
@@ -1,4 +1,4 @@
1
- import { g as RequestHandlerDefaultInfo, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions, i as ResponseResolutionContext } from '../HttpResponse-wcp03c7-.mjs';
1
+ import { h as RequestHandlerDefaultInfo, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions, i as ResponseResolutionContext } from '../HttpResponse-BWB1yDNM.mjs';
2
2
  import { Path, Match, PathParams } from '../utils/matching/matchRequestUrl.mjs';
3
3
  import '../typeUtils.mjs';
4
4
 
@@ -1,4 +1,4 @@
1
- import { g as RequestHandlerDefaultInfo, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions, i as ResponseResolutionContext } from '../HttpResponse-_514VQ9z.js';
1
+ import { h as RequestHandlerDefaultInfo, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions, i as ResponseResolutionContext } from '../HttpResponse-DeJBWGN5.js';
2
2
  import { Path, Match, PathParams } from '../utils/matching/matchRequestUrl.js';
3
3
  import '../typeUtils.js';
4
4
 
@@ -1,2 +1,2 @@
1
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, m as RequestHandlerArgs, g as RequestHandlerDefaultInfo, n as RequestHandlerExecutionResult, k as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, l as ResponseResolverInfo, b as ResponseResolverReturnType } from '../HttpResponse-wcp03c7-.mjs';
1
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, m as RequestHandlerArgs, h as RequestHandlerDefaultInfo, n as RequestHandlerExecutionResult, k as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, l as ResponseResolverInfo, b as ResponseResolverReturnType } from '../HttpResponse-BWB1yDNM.mjs';
2
2
  import '../typeUtils.mjs';
@@ -1,2 +1,2 @@
1
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, m as RequestHandlerArgs, g as RequestHandlerDefaultInfo, n as RequestHandlerExecutionResult, k as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, l as ResponseResolverInfo, b as ResponseResolverReturnType } from '../HttpResponse-_514VQ9z.js';
1
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, m as RequestHandlerArgs, h as RequestHandlerDefaultInfo, n as RequestHandlerExecutionResult, k as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, l as ResponseResolverInfo, b as ResponseResolverReturnType } from '../HttpResponse-DeJBWGN5.js';
2
2
  import '../typeUtils.js';
@@ -0,0 +1,38 @@
1
+ import { Emitter } from 'strict-event-emitter';
2
+ import { WebSocketClientConnection, WebSocketServerConnection } from '@mswjs/interceptors/WebSocket';
3
+ import { PathParams, Path, Match } from '../utils/matching/matchRequestUrl.mjs';
4
+
5
+ type WebSocketHandlerParsedResult = {
6
+ match: Match;
7
+ };
8
+ type WebSocketHandlerEventMap = {
9
+ connection: [
10
+ args: {
11
+ client: WebSocketClientConnection;
12
+ server: WebSocketServerConnection;
13
+ params: PathParams;
14
+ }
15
+ ];
16
+ };
17
+ type WebSocketHandlerIncomingEvent = MessageEvent<{
18
+ client: WebSocketClientConnection;
19
+ server: WebSocketServerConnection;
20
+ }>;
21
+ declare const kEmitter: unique symbol;
22
+ declare const kDispatchEvent: unique symbol;
23
+ declare const kDefaultPrevented: unique symbol;
24
+ declare class WebSocketHandler {
25
+ private readonly url;
26
+ protected [kEmitter]: Emitter<WebSocketHandlerEventMap>;
27
+ constructor(url: Path);
28
+ parse(args: {
29
+ event: WebSocketHandlerIncomingEvent;
30
+ }): WebSocketHandlerParsedResult;
31
+ predicate(args: {
32
+ event: WebSocketHandlerIncomingEvent;
33
+ parsedResult: WebSocketHandlerParsedResult;
34
+ }): boolean;
35
+ [kDispatchEvent](event: MessageEvent<any>): Promise<void>;
36
+ }
37
+
38
+ export { WebSocketHandler, type WebSocketHandlerEventMap, kDefaultPrevented, kDispatchEvent, kEmitter };
@@ -0,0 +1,38 @@
1
+ import { Emitter } from 'strict-event-emitter';
2
+ import { WebSocketClientConnection, WebSocketServerConnection } from '@mswjs/interceptors/WebSocket';
3
+ import { PathParams, Path, Match } from '../utils/matching/matchRequestUrl.js';
4
+
5
+ type WebSocketHandlerParsedResult = {
6
+ match: Match;
7
+ };
8
+ type WebSocketHandlerEventMap = {
9
+ connection: [
10
+ args: {
11
+ client: WebSocketClientConnection;
12
+ server: WebSocketServerConnection;
13
+ params: PathParams;
14
+ }
15
+ ];
16
+ };
17
+ type WebSocketHandlerIncomingEvent = MessageEvent<{
18
+ client: WebSocketClientConnection;
19
+ server: WebSocketServerConnection;
20
+ }>;
21
+ declare const kEmitter: unique symbol;
22
+ declare const kDispatchEvent: unique symbol;
23
+ declare const kDefaultPrevented: unique symbol;
24
+ declare class WebSocketHandler {
25
+ private readonly url;
26
+ protected [kEmitter]: Emitter<WebSocketHandlerEventMap>;
27
+ constructor(url: Path);
28
+ parse(args: {
29
+ event: WebSocketHandlerIncomingEvent;
30
+ }): WebSocketHandlerParsedResult;
31
+ predicate(args: {
32
+ event: WebSocketHandlerIncomingEvent;
33
+ parsedResult: WebSocketHandlerParsedResult;
34
+ }): boolean;
35
+ [kDispatchEvent](event: MessageEvent<any>): Promise<void>;
36
+ }
37
+
38
+ export { WebSocketHandler, type WebSocketHandlerEventMap, kDefaultPrevented, kDispatchEvent, kEmitter };
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var WebSocketHandler_exports = {};
20
+ __export(WebSocketHandler_exports, {
21
+ WebSocketHandler: () => WebSocketHandler,
22
+ kDefaultPrevented: () => kDefaultPrevented,
23
+ kDispatchEvent: () => kDispatchEvent,
24
+ kEmitter: () => kEmitter
25
+ });
26
+ module.exports = __toCommonJS(WebSocketHandler_exports);
27
+ var import_strict_event_emitter = require("strict-event-emitter");
28
+ var import_matchRequestUrl = require("../utils/matching/matchRequestUrl.js");
29
+ const kEmitter = Symbol("kEmitter");
30
+ const kDispatchEvent = Symbol("kDispatchEvent");
31
+ const kDefaultPrevented = Symbol("kDefaultPrevented");
32
+ class WebSocketHandler {
33
+ constructor(url) {
34
+ this.url = url;
35
+ this[kEmitter] = new import_strict_event_emitter.Emitter();
36
+ }
37
+ [kEmitter];
38
+ parse(args) {
39
+ const connection = args.event.data;
40
+ const match = (0, import_matchRequestUrl.matchRequestUrl)(connection.client.url, this.url);
41
+ return {
42
+ match
43
+ };
44
+ }
45
+ predicate(args) {
46
+ return args.parsedResult.match.matches;
47
+ }
48
+ async [kDispatchEvent](event) {
49
+ const parsedResult = this.parse({ event });
50
+ const shouldIntercept = this.predicate({ event, parsedResult });
51
+ if (!shouldIntercept) {
52
+ return;
53
+ }
54
+ if (!Reflect.get(event, kDefaultPrevented)) {
55
+ Reflect.set(event, kDefaultPrevented, true);
56
+ }
57
+ const connection = event.data;
58
+ this[kEmitter].emit("connection", {
59
+ client: connection.client,
60
+ server: connection.server,
61
+ params: parsedResult.match.params || {}
62
+ });
63
+ }
64
+ }
65
+ //# sourceMappingURL=WebSocketHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport type {\n WebSocketClientConnection,\n WebSocketServerConnection,\n} from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [\n args: {\n client: WebSocketClientConnection\n server: WebSocketServerConnection\n params: PathParams\n },\n ]\n}\n\ntype WebSocketHandlerIncomingEvent = MessageEvent<{\n client: WebSocketClientConnection\n server: WebSocketServerConnection\n}>\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kDispatchEvent = Symbol('kDispatchEvent')\nexport const kDefaultPrevented = Symbol('kDefaultPrevented')\n\nexport class WebSocketHandler {\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(private readonly url: Path) {\n this[kEmitter] = new Emitter()\n }\n\n public parse(args: {\n event: WebSocketHandlerIncomingEvent\n }): WebSocketHandlerParsedResult {\n const connection = args.event.data\n const match = matchRequestUrl(connection.client.url, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n event: WebSocketHandlerIncomingEvent\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n async [kDispatchEvent](event: MessageEvent<any>): Promise<void> {\n const parsedResult = this.parse({ event })\n const shouldIntercept = this.predicate({ event, parsedResult })\n\n if (!shouldIntercept) {\n return\n }\n\n // Account for other matching event handlers that've already prevented this event.\n if (!Reflect.get(event, kDefaultPrevented)) {\n // At this point, the WebSocket connection URL has matched the handler.\n // Prevent the default behavior of establishing the connection as-is.\n // Use internal symbol because we aren't actually dispatching this\n // event. Events can only marked as cancelable and can be prevented\n // when dispatched on an EventTarget.\n Reflect.set(event, kDefaultPrevented, true)\n }\n\n const connection = event.data\n\n // Emit the connection event on the handler.\n // This is what the developer adds listeners for.\n this[kEmitter].emit('connection', {\n client: connection.client,\n server: connection.server,\n params: parsedResult.match.params || {},\n })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAAwB;AAKxB,6BAKO;AAqBA,MAAM,WAAW,OAAO,UAAU;AAClC,MAAM,iBAAiB,OAAO,gBAAgB;AAC9C,MAAM,oBAAoB,OAAO,mBAAmB;AAEpD,MAAM,iBAAiB;AAAA,EAG5B,YAA6B,KAAW;AAAX;AAC3B,SAAK,QAAQ,IAAI,IAAI,oCAAQ;AAAA,EAC/B;AAAA,EAJA,CAAW,QAAQ;AAAA,EAMZ,MAAM,MAEoB;AAC/B,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,YAAQ,wCAAgB,WAAW,OAAO,KAAK,KAAK,GAAG;AAE7D,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEO,UAAU,MAGL;AACV,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,cAAc,EAAE,OAAyC;AAC9D,UAAM,eAAe,KAAK,MAAM,EAAE,MAAM,CAAC;AACzC,UAAM,kBAAkB,KAAK,UAAU,EAAE,OAAO,aAAa,CAAC;AAE9D,QAAI,CAAC,iBAAiB;AACpB;AAAA,IACF;AAGA,QAAI,CAAC,QAAQ,IAAI,OAAO,iBAAiB,GAAG;AAM1C,cAAQ,IAAI,OAAO,mBAAmB,IAAI;AAAA,IAC5C;AAEA,UAAM,aAAa,MAAM;AAIzB,SAAK,QAAQ,EAAE,KAAK,cAAc;AAAA,MAChC,QAAQ,WAAW;AAAA,MACnB,QAAQ,WAAW;AAAA,MACnB,QAAQ,aAAa,MAAM,UAAU,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -0,0 +1,47 @@
1
+ import { Emitter } from "strict-event-emitter";
2
+ import {
3
+ matchRequestUrl
4
+ } from '../utils/matching/matchRequestUrl.mjs';
5
+ const kEmitter = Symbol("kEmitter");
6
+ const kDispatchEvent = Symbol("kDispatchEvent");
7
+ const kDefaultPrevented = Symbol("kDefaultPrevented");
8
+ class WebSocketHandler {
9
+ constructor(url) {
10
+ this.url = url;
11
+ this[kEmitter] = new Emitter();
12
+ }
13
+ [kEmitter];
14
+ parse(args) {
15
+ const connection = args.event.data;
16
+ const match = matchRequestUrl(connection.client.url, this.url);
17
+ return {
18
+ match
19
+ };
20
+ }
21
+ predicate(args) {
22
+ return args.parsedResult.match.matches;
23
+ }
24
+ async [kDispatchEvent](event) {
25
+ const parsedResult = this.parse({ event });
26
+ const shouldIntercept = this.predicate({ event, parsedResult });
27
+ if (!shouldIntercept) {
28
+ return;
29
+ }
30
+ if (!Reflect.get(event, kDefaultPrevented)) {
31
+ Reflect.set(event, kDefaultPrevented, true);
32
+ }
33
+ const connection = event.data;
34
+ this[kEmitter].emit("connection", {
35
+ client: connection.client,
36
+ server: connection.server,
37
+ params: parsedResult.match.params || {}
38
+ });
39
+ }
40
+ }
41
+ export {
42
+ WebSocketHandler,
43
+ kDefaultPrevented,
44
+ kDispatchEvent,
45
+ kEmitter
46
+ };
47
+ //# sourceMappingURL=WebSocketHandler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport type {\n WebSocketClientConnection,\n WebSocketServerConnection,\n} from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [\n args: {\n client: WebSocketClientConnection\n server: WebSocketServerConnection\n params: PathParams\n },\n ]\n}\n\ntype WebSocketHandlerIncomingEvent = MessageEvent<{\n client: WebSocketClientConnection\n server: WebSocketServerConnection\n}>\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kDispatchEvent = Symbol('kDispatchEvent')\nexport const kDefaultPrevented = Symbol('kDefaultPrevented')\n\nexport class WebSocketHandler {\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(private readonly url: Path) {\n this[kEmitter] = new Emitter()\n }\n\n public parse(args: {\n event: WebSocketHandlerIncomingEvent\n }): WebSocketHandlerParsedResult {\n const connection = args.event.data\n const match = matchRequestUrl(connection.client.url, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n event: WebSocketHandlerIncomingEvent\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n async [kDispatchEvent](event: MessageEvent<any>): Promise<void> {\n const parsedResult = this.parse({ event })\n const shouldIntercept = this.predicate({ event, parsedResult })\n\n if (!shouldIntercept) {\n return\n }\n\n // Account for other matching event handlers that've already prevented this event.\n if (!Reflect.get(event, kDefaultPrevented)) {\n // At this point, the WebSocket connection URL has matched the handler.\n // Prevent the default behavior of establishing the connection as-is.\n // Use internal symbol because we aren't actually dispatching this\n // event. Events can only marked as cancelable and can be prevented\n // when dispatched on an EventTarget.\n Reflect.set(event, kDefaultPrevented, true)\n }\n\n const connection = event.data\n\n // Emit the connection event on the handler.\n // This is what the developer adds listeners for.\n this[kEmitter].emit('connection', {\n client: connection.client,\n server: connection.server,\n params: parsedResult.match.params || {},\n })\n }\n}\n"],"mappings":"AAAA,SAAS,eAAe;AAKxB;AAAA,EAIE;AAAA,OACK;AAqBA,MAAM,WAAW,OAAO,UAAU;AAClC,MAAM,iBAAiB,OAAO,gBAAgB;AAC9C,MAAM,oBAAoB,OAAO,mBAAmB;AAEpD,MAAM,iBAAiB;AAAA,EAG5B,YAA6B,KAAW;AAAX;AAC3B,SAAK,QAAQ,IAAI,IAAI,QAAQ;AAAA,EAC/B;AAAA,EAJA,CAAW,QAAQ;AAAA,EAMZ,MAAM,MAEoB;AAC/B,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,QAAQ,gBAAgB,WAAW,OAAO,KAAK,KAAK,GAAG;AAE7D,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEO,UAAU,MAGL;AACV,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,cAAc,EAAE,OAAyC;AAC9D,UAAM,eAAe,KAAK,MAAM,EAAE,MAAM,CAAC;AACzC,UAAM,kBAAkB,KAAK,UAAU,EAAE,OAAO,aAAa,CAAC;AAE9D,QAAI,CAAC,iBAAiB;AACpB;AAAA,IACF;AAGA,QAAI,CAAC,QAAQ,IAAI,OAAO,iBAAiB,GAAG;AAM1C,cAAQ,IAAI,OAAO,mBAAmB,IAAI;AAAA,IAC5C;AAEA,UAAM,aAAa,MAAM;AAIzB,SAAK,QAAQ,EAAE,KAAK,cAAc;AAAA,MAChC,QAAQ,WAAW;AAAA,MACnB,QAAQ,WAAW;AAAA,MACnB,QAAQ,aAAa,MAAM,UAAU,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -1,4 +1,4 @@
1
- import { D as DefaultBodyType, c as RequestHandlerOptions, a as ResponseResolver } from './HttpResponse-wcp03c7-.mjs';
1
+ import { D as DefaultBodyType, c as RequestHandlerOptions, a as ResponseResolver } from './HttpResponse-BWB1yDNM.mjs';
2
2
  import { HttpHandler, HttpRequestResolverExtras } from './handlers/HttpHandler.mjs';
3
3
  import { PathParams, Path } from './utils/matching/matchRequestUrl.mjs';
4
4
  import './typeUtils.mjs';
@@ -1,4 +1,4 @@
1
- import { D as DefaultBodyType, c as RequestHandlerOptions, a as ResponseResolver } from './HttpResponse-_514VQ9z.js';
1
+ import { D as DefaultBodyType, c as RequestHandlerOptions, a as ResponseResolver } from './HttpResponse-DeJBWGN5.js';
2
2
  import { HttpHandler, HttpRequestResolverExtras } from './handlers/HttpHandler.js';
3
3
  import { PathParams, Path } from './utils/matching/matchRequestUrl.js';
4
4
  import './typeUtils.js';
@@ -1,9 +1,10 @@
1
1
  export { SetupApi } from './SetupApi.mjs';
2
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, f as HttpResponse, H as HttpResponseInit, J as JsonBodyType, R as RequestHandler, c as RequestHandlerOptions, a as ResponseResolver, b as ResponseResolverReturnType, S as StrictRequest, e as StrictResponse } from './HttpResponse-wcp03c7-.mjs';
2
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, f as HttpResponse, H as HttpResponseInit, J as JsonBodyType, R as RequestHandler, c as RequestHandlerOptions, a as ResponseResolver, b as ResponseResolverReturnType, S as StrictRequest, e as StrictResponse } from './HttpResponse-BWB1yDNM.mjs';
3
3
  export { HttpRequestHandler, HttpResponseResolver, http } from './http.mjs';
4
4
  export { HttpHandler, HttpMethods, HttpRequestParsedResult, RequestQuery } from './handlers/HttpHandler.mjs';
5
5
  export { GraphQLRequestHandler, GraphQLResponseResolver, graphql } from './graphql.mjs';
6
- export { G as GraphQLHandler, d as GraphQLJsonRequestBody, a as GraphQLQuery, c as GraphQLRequestBody, b as GraphQLVariables, P as ParsedGraphQLRequest } from './GraphQLHandler-AenIUdwE.mjs';
6
+ export { G as GraphQLHandler, d as GraphQLJsonRequestBody, a as GraphQLQuery, c as GraphQLRequestBody, b as GraphQLVariables, P as ParsedGraphQLRequest } from './GraphQLHandler-QGQY_9Rc.mjs';
7
+ export { ws } from './ws/ws.mjs';
7
8
  export { Match, Path, PathParams, matchRequestUrl } from './utils/matching/matchRequestUrl.mjs';
8
9
  export { HandleRequestOptions, handleRequest } from './utils/handleRequest.mjs';
9
10
  export { getResponse } from './getResponse.mjs';
@@ -14,6 +15,8 @@ export { bypass } from './bypass.mjs';
14
15
  export { passthrough } from './passthrough.mjs';
15
16
  import 'strict-event-emitter';
16
17
  import './utils/internal/Disposable.mjs';
18
+ import './handlers/WebSocketHandler.mjs';
19
+ import '@mswjs/interceptors/WebSocket';
17
20
  import './typeUtils.mjs';
18
21
  import 'graphql';
19
22
  import './utils/request/onUnhandledRequest.mjs';
@@ -1,9 +1,10 @@
1
1
  export { SetupApi } from './SetupApi.js';
2
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, f as HttpResponse, H as HttpResponseInit, J as JsonBodyType, R as RequestHandler, c as RequestHandlerOptions, a as ResponseResolver, b as ResponseResolverReturnType, S as StrictRequest, e as StrictResponse } from './HttpResponse-_514VQ9z.js';
2
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, f as HttpResponse, H as HttpResponseInit, J as JsonBodyType, R as RequestHandler, c as RequestHandlerOptions, a as ResponseResolver, b as ResponseResolverReturnType, S as StrictRequest, e as StrictResponse } from './HttpResponse-DeJBWGN5.js';
3
3
  export { HttpRequestHandler, HttpResponseResolver, http } from './http.js';
4
4
  export { HttpHandler, HttpMethods, HttpRequestParsedResult, RequestQuery } from './handlers/HttpHandler.js';
5
5
  export { GraphQLRequestHandler, GraphQLResponseResolver, graphql } from './graphql.js';
6
- export { G as GraphQLHandler, d as GraphQLJsonRequestBody, a as GraphQLQuery, c as GraphQLRequestBody, b as GraphQLVariables, P as ParsedGraphQLRequest } from './GraphQLHandler-jOzqbxSK.js';
6
+ export { G as GraphQLHandler, d as GraphQLJsonRequestBody, a as GraphQLQuery, c as GraphQLRequestBody, b as GraphQLVariables, P as ParsedGraphQLRequest } from './GraphQLHandler-Cbu12sb0.js';
7
+ export { ws } from './ws/ws.js';
7
8
  export { Match, Path, PathParams, matchRequestUrl } from './utils/matching/matchRequestUrl.js';
8
9
  export { HandleRequestOptions, handleRequest } from './utils/handleRequest.js';
9
10
  export { getResponse } from './getResponse.js';
@@ -14,6 +15,8 @@ export { bypass } from './bypass.js';
14
15
  export { passthrough } from './passthrough.js';
15
16
  import 'strict-event-emitter';
16
17
  import './utils/internal/Disposable.js';
18
+ import './handlers/WebSocketHandler.js';
19
+ import '@mswjs/interceptors/WebSocket';
17
20
  import './typeUtils.js';
18
21
  import 'graphql';
19
22
  import './utils/request/onUnhandledRequest.js';