msw 2.2.13 → 2.3.0-ws.rc-2

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 (168) 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 +26 -7
  6. package/lib/browser/index.js.map +1 -1
  7. package/lib/browser/index.mjs +26 -7
  8. package/lib/browser/index.mjs.map +1 -1
  9. package/lib/core/{GraphQLHandler-bom2Dn82.d.ts → GraphQLHandler-3gvpA65n.d.ts} +1 -1
  10. package/lib/core/{GraphQLHandler-yJ_I6j54.d.mts → GraphQLHandler-4DPdxG0R.d.mts} +1 -1
  11. package/lib/core/{HttpResponse-vQNlixkj.d.ts → HttpResponse-aJY-D0oG.d.ts} +2 -2
  12. package/lib/core/{HttpResponse-3-NyzyF7.d.mts → HttpResponse-xuSipbNt.d.mts} +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 +32 -0
  32. package/lib/core/handlers/WebSocketHandler.d.ts +32 -0
  33. package/lib/core/handlers/WebSocketHandler.js +62 -0
  34. package/lib/core/handlers/WebSocketHandler.js.map +1 -0
  35. package/lib/core/handlers/WebSocketHandler.mjs +44 -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 +5 -1
  42. package/lib/core/index.js.map +1 -1
  43. package/lib/core/index.mjs +7 -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 +16 -0
  60. package/lib/core/utils/handleWebSocketEvent.d.ts +16 -0
  61. package/lib/core/utils/handleWebSocketEvent.js +59 -0
  62. package/lib/core/utils/handleWebSocketEvent.js.map +1 -0
  63. package/lib/core/utils/handleWebSocketEvent.mjs +39 -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/logging/getTimestamp.d.mts +4 -1
  72. package/lib/core/utils/logging/getTimestamp.d.ts +4 -1
  73. package/lib/core/utils/logging/getTimestamp.js +6 -2
  74. package/lib/core/utils/logging/getTimestamp.js.map +1 -1
  75. package/lib/core/utils/logging/getTimestamp.mjs +6 -2
  76. package/lib/core/utils/logging/getTimestamp.mjs.map +1 -1
  77. package/lib/core/utils/matching/matchRequestUrl.d.mts +2 -1
  78. package/lib/core/utils/matching/matchRequestUrl.d.ts +2 -1
  79. package/lib/core/utils/matching/matchRequestUrl.js +4 -0
  80. package/lib/core/utils/matching/matchRequestUrl.js.map +1 -1
  81. package/lib/core/utils/matching/matchRequestUrl.mjs +4 -0
  82. package/lib/core/utils/matching/matchRequestUrl.mjs.map +1 -1
  83. package/lib/core/ws/WebSocketClientManager.d.mts +64 -0
  84. package/lib/core/ws/WebSocketClientManager.d.ts +64 -0
  85. package/lib/core/ws/WebSocketClientManager.js +123 -0
  86. package/lib/core/ws/WebSocketClientManager.js.map +1 -0
  87. package/lib/core/ws/WebSocketClientManager.mjs +103 -0
  88. package/lib/core/ws/WebSocketClientManager.mjs.map +1 -0
  89. package/lib/core/ws/utils/attachWebSocketLogger.d.mts +34 -0
  90. package/lib/core/ws/utils/attachWebSocketLogger.d.ts +34 -0
  91. package/lib/core/ws/utils/attachWebSocketLogger.js +211 -0
  92. package/lib/core/ws/utils/attachWebSocketLogger.js.map +1 -0
  93. package/lib/core/ws/utils/attachWebSocketLogger.mjs +191 -0
  94. package/lib/core/ws/utils/attachWebSocketLogger.mjs.map +1 -0
  95. package/lib/core/ws/utils/getMessageLength.d.mts +11 -0
  96. package/lib/core/ws/utils/getMessageLength.d.ts +11 -0
  97. package/lib/core/ws/utils/getMessageLength.js +33 -0
  98. package/lib/core/ws/utils/getMessageLength.js.map +1 -0
  99. package/lib/core/ws/utils/getMessageLength.mjs +13 -0
  100. package/lib/core/ws/utils/getMessageLength.mjs.map +1 -0
  101. package/lib/core/ws/utils/getPublicData.d.mts +5 -0
  102. package/lib/core/ws/utils/getPublicData.d.ts +5 -0
  103. package/lib/core/ws/utils/getPublicData.js +36 -0
  104. package/lib/core/ws/utils/getPublicData.js.map +1 -0
  105. package/lib/core/ws/utils/getPublicData.mjs +16 -0
  106. package/lib/core/ws/utils/getPublicData.mjs.map +1 -0
  107. package/lib/core/ws/utils/truncateMessage.d.mts +3 -0
  108. package/lib/core/ws/utils/truncateMessage.d.ts +3 -0
  109. package/lib/core/ws/utils/truncateMessage.js +31 -0
  110. package/lib/core/ws/utils/truncateMessage.js.map +1 -0
  111. package/lib/core/ws/utils/truncateMessage.mjs +11 -0
  112. package/lib/core/ws/utils/truncateMessage.mjs.map +1 -0
  113. package/lib/core/ws/webSocketInterceptor.d.mts +5 -0
  114. package/lib/core/ws/webSocketInterceptor.d.ts +5 -0
  115. package/lib/core/ws/webSocketInterceptor.js +26 -0
  116. package/lib/core/ws/webSocketInterceptor.js.map +1 -0
  117. package/lib/core/ws/webSocketInterceptor.mjs +6 -0
  118. package/lib/core/ws/webSocketInterceptor.mjs.map +1 -0
  119. package/lib/core/ws/ws.d.mts +44 -0
  120. package/lib/core/ws/ws.d.ts +44 -0
  121. package/lib/core/ws/ws.js +82 -0
  122. package/lib/core/ws/ws.js.map +1 -0
  123. package/lib/core/ws/ws.mjs +65 -0
  124. package/lib/core/ws/ws.mjs.map +1 -0
  125. package/lib/iife/index.js +967 -11
  126. package/lib/iife/index.js.map +1 -1
  127. package/lib/mockServiceWorker.js +1 -1
  128. package/lib/native/index.d.mts +6 -5
  129. package/lib/native/index.d.ts +6 -5
  130. package/lib/native/index.js +13 -0
  131. package/lib/native/index.js.map +1 -1
  132. package/lib/native/index.mjs +13 -0
  133. package/lib/native/index.mjs.map +1 -1
  134. package/lib/node/index.d.mts +8 -7
  135. package/lib/node/index.d.ts +8 -7
  136. package/lib/node/index.js +13 -0
  137. package/lib/node/index.js.map +1 -1
  138. package/lib/node/index.mjs +13 -0
  139. package/lib/node/index.mjs.map +1 -1
  140. package/package.json +26 -21
  141. package/src/browser/setupWorker/glossary.ts +10 -10
  142. package/src/browser/setupWorker/setupWorker.ts +34 -3
  143. package/src/core/SetupApi.ts +28 -20
  144. package/src/core/handlers/WebSocketHandler.ts +71 -0
  145. package/src/core/index.ts +8 -1
  146. package/src/core/utils/executeHandlers.ts +6 -2
  147. package/src/core/utils/handleRequest.ts +1 -2
  148. package/src/core/utils/handleWebSocketEvent.ts +59 -0
  149. package/src/core/utils/logging/getTimestamp.test.ts +20 -6
  150. package/src/core/utils/logging/getTimestamp.ts +11 -6
  151. package/src/core/utils/matching/matchRequestUrl.test.ts +44 -0
  152. package/src/core/utils/matching/matchRequestUrl.ts +4 -0
  153. package/src/core/ws/WebSocketClientManager.test.ts +159 -0
  154. package/src/core/ws/WebSocketClientManager.ts +170 -0
  155. package/src/core/ws/utils/attachWebSocketLogger.ts +262 -0
  156. package/src/core/ws/utils/getMessageLength.test.ts +16 -0
  157. package/src/core/ws/utils/getMessageLength.ts +19 -0
  158. package/src/core/ws/utils/getPublicData.test.ts +38 -0
  159. package/src/core/ws/utils/getPublicData.ts +17 -0
  160. package/src/core/ws/utils/truncateMessage.test.ts +12 -0
  161. package/src/core/ws/utils/truncateMessage.ts +9 -0
  162. package/src/core/ws/webSocketInterceptor.ts +3 -0
  163. package/src/core/ws/ws.test.ts +23 -0
  164. package/src/core/ws/ws.ts +108 -0
  165. package/src/node/SetupServerApi.ts +8 -7
  166. package/src/node/SetupServerCommonApi.ts +14 -1
  167. package/src/node/glossary.ts +5 -7
  168. package/src/node/setupServer.ts +2 -1
@@ -0,0 +1,3 @@
1
+ import { WebSocketInterceptor } from '@mswjs/interceptors/WebSocket'
2
+
3
+ export const webSocketInterceptor = new WebSocketInterceptor()
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @vitest-environment node-websocket
3
+ */
4
+ import { ws } from './ws'
5
+
6
+ it('exports the "link()" method', () => {
7
+ expect(ws).toHaveProperty('link')
8
+ expect(ws.link).toBeInstanceOf(Function)
9
+ })
10
+
11
+ it('throws an error when calling "ws.link()" without a URL argument', () => {
12
+ expect(() =>
13
+ // @ts-expect-error Intentionally invalid call.
14
+ ws.link(),
15
+ ).toThrow('Expected a WebSocket server URL but got undefined')
16
+ })
17
+
18
+ it('throws an error when given a non-path argument to "ws.link()"', () => {
19
+ expect(() =>
20
+ // @ts-expect-error Intentionally invalid argument.
21
+ ws.link(2),
22
+ ).toThrow('Expected a WebSocket server URL but got number')
23
+ })
@@ -0,0 +1,108 @@
1
+ import { invariant } from 'outvariant'
2
+ import type {
3
+ WebSocketClientConnectionProtocol,
4
+ WebSocketData,
5
+ } from '@mswjs/interceptors/WebSocket'
6
+ import {
7
+ WebSocketHandler,
8
+ kEmitter,
9
+ type WebSocketHandlerEventMap,
10
+ } from '../handlers/WebSocketHandler'
11
+ import { Path, isPath } from '../utils/matching/matchRequestUrl'
12
+ import { WebSocketClientManager } from './WebSocketClientManager'
13
+
14
+ const wsBroadcastChannel = new BroadcastChannel('msw:ws-client-manager')
15
+
16
+ /**
17
+ * Intercepts outgoing WebSocket connections to the given URL.
18
+ *
19
+ * @example
20
+ * const chat = ws.link('wss://chat.example.com')
21
+ * chat.on('connection', ({ client }) => {
22
+ * client.send('hello from server!')
23
+ * })
24
+ */
25
+ function createWebSocketLinkHandler(url: Path) {
26
+ invariant(url, 'Expected a WebSocket server URL but got undefined')
27
+
28
+ invariant(
29
+ isPath(url),
30
+ 'Expected a WebSocket server URL but got %s',
31
+ typeof url,
32
+ )
33
+
34
+ const clientManager = new WebSocketClientManager(wsBroadcastChannel)
35
+
36
+ return {
37
+ clients: clientManager.clients,
38
+ on<K extends keyof WebSocketHandlerEventMap>(
39
+ event: K,
40
+ listener: (...args: WebSocketHandlerEventMap[K]) => void,
41
+ ): WebSocketHandler {
42
+ const handler = new WebSocketHandler(url)
43
+
44
+ // Add the connection event listener for when the
45
+ // handler matches and emits a connection event.
46
+ // When that happens, store that connection in the
47
+ // set of all connections for reference.
48
+ handler[kEmitter].on('connection', ({ client }) => {
49
+ clientManager.addConnection(client)
50
+ })
51
+
52
+ // The "handleWebSocketEvent" function will invoke
53
+ // the "run()" method on the WebSocketHandler.
54
+ // If the handler matches, it will emit the "connection"
55
+ // event. Attach the user-defined listener to that event.
56
+ handler[kEmitter].on(event, listener)
57
+
58
+ return handler
59
+ },
60
+
61
+ /**
62
+ * Broadcasts the given data to all WebSocket clients.
63
+ *
64
+ * @example
65
+ * const service = ws.link('wss://example.com')
66
+ * service.on('connection', () => {
67
+ * service.broadcast('hello, everyone!')
68
+ * })
69
+ */
70
+ broadcast(data: WebSocketData): void {
71
+ // This will invoke "send()" on the immediate clients
72
+ // in this runtime and post a message to the broadcast channel
73
+ // to trigger send for the clients in other runtimes.
74
+ this.broadcastExcept([], data)
75
+ },
76
+
77
+ /**
78
+ * Broadcasts the given data to all WebSocket clients
79
+ * except the ones provided in the `clients` argument.
80
+ *
81
+ * @example
82
+ * const service = ws.link('wss://example.com')
83
+ * service.on('connection', ({ client }) => {
84
+ * service.broadcastExcept(client, 'hi, the rest of you!')
85
+ * })
86
+ */
87
+ broadcastExcept(
88
+ clients:
89
+ | WebSocketClientConnectionProtocol
90
+ | Array<WebSocketClientConnectionProtocol>,
91
+ data: WebSocketData,
92
+ ): void {
93
+ const ignoreClients = Array.prototype
94
+ .concat(clients)
95
+ .map((client) => client.id)
96
+
97
+ clientManager.clients.forEach((otherClient) => {
98
+ if (!ignoreClients.includes(otherClient.id)) {
99
+ otherClient.send(data)
100
+ }
101
+ })
102
+ },
103
+ }
104
+ }
105
+
106
+ export const ws = {
107
+ link: createWebSocketLinkHandler,
108
+ }
@@ -4,14 +4,15 @@ import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest'
4
4
  import { FetchInterceptor } from '@mswjs/interceptors/fetch'
5
5
  import { HandlersController } from '~/core/SetupApi'
6
6
  import type { RequestHandler } from '~/core/handlers/RequestHandler'
7
+ import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler'
7
8
  import type { SetupServer } from './glossary'
8
9
  import { SetupServerCommonApi } from './SetupServerCommonApi'
9
10
 
10
11
  const store = new AsyncLocalStorage<RequestHandlersContext>()
11
12
 
12
13
  type RequestHandlersContext = {
13
- initialHandlers: Array<RequestHandler>
14
- handlers: Array<RequestHandler>
14
+ initialHandlers: Array<RequestHandler | WebSocketHandler>
15
+ handlers: Array<RequestHandler | WebSocketHandler>
15
16
  }
16
17
 
17
18
  /**
@@ -22,7 +23,7 @@ type RequestHandlersContext = {
22
23
  class AsyncHandlersController implements HandlersController {
23
24
  private rootContext: RequestHandlersContext
24
25
 
25
- constructor(initialHandlers: Array<RequestHandler>) {
26
+ constructor(initialHandlers: Array<RequestHandler | WebSocketHandler>) {
26
27
  this.rootContext = { initialHandlers, handlers: [] }
27
28
  }
28
29
 
@@ -30,18 +31,18 @@ class AsyncHandlersController implements HandlersController {
30
31
  return store.getStore() || this.rootContext
31
32
  }
32
33
 
33
- public prepend(runtimeHandlers: Array<RequestHandler>) {
34
+ public prepend(runtimeHandlers: Array<RequestHandler | WebSocketHandler>) {
34
35
  this.context.handlers.unshift(...runtimeHandlers)
35
36
  }
36
37
 
37
- public reset(nextHandlers: Array<RequestHandler>) {
38
+ public reset(nextHandlers: Array<RequestHandler | WebSocketHandler>) {
38
39
  const context = this.context
39
40
  context.handlers = []
40
41
  context.initialHandlers =
41
42
  nextHandlers.length > 0 ? nextHandlers : context.initialHandlers
42
43
  }
43
44
 
44
- public currentHandlers(): Array<RequestHandler> {
45
+ public currentHandlers(): Array<RequestHandler | WebSocketHandler> {
45
46
  const { initialHandlers, handlers } = this.context
46
47
  return handlers.concat(initialHandlers)
47
48
  }
@@ -51,7 +52,7 @@ export class SetupServerApi
51
52
  extends SetupServerCommonApi
52
53
  implements SetupServer
53
54
  {
54
- constructor(handlers: Array<RequestHandler>) {
55
+ constructor(handlers: Array<RequestHandler | WebSocketHandler>) {
55
56
  super(
56
57
  [ClientRequestInterceptor, XMLHttpRequestInterceptor, FetchInterceptor],
57
58
  handlers,
@@ -14,9 +14,12 @@ import type { LifeCycleEventsMap, SharedOptions } from '~/core/sharedOptions'
14
14
  import { SetupApi } from '~/core/SetupApi'
15
15
  import { handleRequest } from '~/core/utils/handleRequest'
16
16
  import type { RequestHandler } from '~/core/handlers/RequestHandler'
17
+ import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler'
17
18
  import { mergeRight } from '~/core/utils/internal/mergeRight'
18
19
  import { devUtils } from '~/core/utils/internal/devUtils'
19
20
  import type { SetupServerCommon } from './glossary'
21
+ import { handleWebSocketEvent } from '~/core/utils/handleWebSocketEvent'
22
+ import { webSocketInterceptor } from '~/core/ws/webSocketInterceptor'
20
23
 
21
24
  export const DEFAULT_LISTEN_OPTIONS: RequiredDeep<SharedOptions> = {
22
25
  onUnhandledRequest: 'warn',
@@ -34,7 +37,7 @@ export class SetupServerCommonApi
34
37
 
35
38
  constructor(
36
39
  interceptors: Array<{ new (): Interceptor<HttpRequestEventMap> }>,
37
- handlers: Array<RequestHandler>,
40
+ handlers: Array<RequestHandler | WebSocketHandler>,
38
41
  ) {
39
42
  super(...handlers)
40
43
 
@@ -81,6 +84,14 @@ export class SetupServerCommonApi
81
84
  )
82
85
  },
83
86
  )
87
+
88
+ handleWebSocketEvent({
89
+ getHandlers: () => {
90
+ return this.handlersController.currentHandlers()
91
+ },
92
+ onMockedConnection: () => {},
93
+ onPassthroughConnection: () => {},
94
+ })
84
95
  }
85
96
 
86
97
  public listen(options: Partial<SharedOptions> = {}): void {
@@ -91,9 +102,11 @@ export class SetupServerCommonApi
91
102
 
92
103
  // Apply the interceptor when starting the server.
93
104
  this.interceptor.apply()
105
+ webSocketInterceptor.apply()
94
106
 
95
107
  this.subscriptions.push(() => {
96
108
  this.interceptor.dispose()
109
+ webSocketInterceptor.dispose()
97
110
  })
98
111
 
99
112
  // Assert that the interceptor has been applied successfully.
@@ -1,8 +1,6 @@
1
1
  import type { PartialDeep } from 'type-fest'
2
- import type {
3
- RequestHandler,
4
- RequestHandlerDefaultInfo,
5
- } from '~/core/handlers/RequestHandler'
2
+ import type { RequestHandler } from '~/core/handlers/RequestHandler'
3
+ import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler'
6
4
  import type {
7
5
  LifeCycleEventEmitter,
8
6
  LifeCycleEventsMap,
@@ -29,7 +27,7 @@ export interface SetupServerCommon {
29
27
  *
30
28
  * @see {@link https://mswjs.io/docs/api/setup-server/use `server.use()` API reference}
31
29
  */
32
- use(...handlers: Array<RequestHandler>): void
30
+ use(...handlers: Array<RequestHandler | WebSocketHandler>): void
33
31
 
34
32
  /**
35
33
  * Marks all request handlers that respond using `res.once()` as unused.
@@ -43,14 +41,14 @@ export interface SetupServerCommon {
43
41
  *
44
42
  * @see {@link https://mswjs.io/docs/api/setup-server/reset-handlers `server.reset-handlers()` API reference}
45
43
  */
46
- resetHandlers(...nextHandlers: Array<RequestHandler>): void
44
+ resetHandlers(...nextHandlers: Array<RequestHandler | WebSocketHandler>): void
47
45
 
48
46
  /**
49
47
  * Returns a readonly list of currently active request handlers.
50
48
  *
51
49
  * @see {@link https://mswjs.io/docs/api/setup-server/list-handlers `server.listHandlers()` API reference}
52
50
  */
53
- listHandlers(): ReadonlyArray<RequestHandler<RequestHandlerDefaultInfo, any>>
51
+ listHandlers(): ReadonlyArray<RequestHandler | WebSocketHandler>
54
52
 
55
53
  /**
56
54
  * Life-cycle events.
@@ -1,4 +1,5 @@
1
1
  import type { RequestHandler } from '~/core/handlers/RequestHandler'
2
+ import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler'
2
3
  import { SetupServerApi } from './SetupServerApi'
3
4
 
4
5
  /**
@@ -8,7 +9,7 @@ import { SetupServerApi } from './SetupServerApi'
8
9
  * @see {@link https://mswjs.io/docs/api/setup-server `setupServer()` API reference}
9
10
  */
10
11
  export const setupServer = (
11
- ...handlers: Array<RequestHandler>
12
+ ...handlers: Array<RequestHandler | WebSocketHandler>
12
13
  ): SetupServerApi => {
13
14
  return new SetupServerApi(handlers)
14
15
  }