msw 2.14.5 → 2.14.7

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 (110) hide show
  1. package/README.md +5 -5
  2. package/lib/browser/index.js +232 -92
  3. package/lib/browser/index.js.map +1 -1
  4. package/lib/browser/index.mjs +232 -92
  5. package/lib/browser/index.mjs.map +1 -1
  6. package/lib/core/{HttpResponse-CQwYpuKo.d.mts → HttpResponse-BTyqrRB6.d.mts} +1 -1
  7. package/lib/core/{HttpResponse-BFS34nkx.d.ts → HttpResponse-BXyXQFMJ.d.ts} +1 -1
  8. package/lib/core/HttpResponse.d.mts +1 -1
  9. package/lib/core/HttpResponse.d.ts +1 -1
  10. package/lib/core/HttpResponse.js +2 -2
  11. package/lib/core/HttpResponse.js.map +1 -1
  12. package/lib/core/HttpResponse.mjs +2 -2
  13. package/lib/core/HttpResponse.mjs.map +1 -1
  14. package/lib/core/experimental/compat.d.mts +2 -2
  15. package/lib/core/experimental/compat.d.ts +2 -2
  16. package/lib/core/experimental/define-network.d.mts +2 -2
  17. package/lib/core/experimental/define-network.d.ts +2 -2
  18. package/lib/core/experimental/define-network.js +16 -6
  19. package/lib/core/experimental/define-network.js.map +1 -1
  20. package/lib/core/experimental/define-network.mjs +16 -6
  21. package/lib/core/experimental/define-network.mjs.map +1 -1
  22. package/lib/core/experimental/frames/http-frame.d.mts +2 -2
  23. package/lib/core/experimental/frames/http-frame.d.ts +2 -2
  24. package/lib/core/experimental/frames/network-frame.d.mts +2 -2
  25. package/lib/core/experimental/frames/network-frame.d.ts +2 -2
  26. package/lib/core/experimental/frames/network-frame.js +2 -0
  27. package/lib/core/experimental/frames/network-frame.js.map +1 -1
  28. package/lib/core/experimental/frames/network-frame.mjs +2 -0
  29. package/lib/core/experimental/frames/network-frame.mjs.map +1 -1
  30. package/lib/core/experimental/frames/websocket-frame.d.mts +2 -2
  31. package/lib/core/experimental/frames/websocket-frame.d.ts +2 -2
  32. package/lib/core/experimental/handlers-controller.d.mts +1 -1
  33. package/lib/core/experimental/handlers-controller.d.ts +1 -1
  34. package/lib/core/experimental/index.d.mts +2 -2
  35. package/lib/core/experimental/index.d.ts +2 -2
  36. package/lib/core/experimental/on-unhandled-frame.d.mts +2 -2
  37. package/lib/core/experimental/on-unhandled-frame.d.ts +2 -2
  38. package/lib/core/experimental/setup-api.d.mts +1 -1
  39. package/lib/core/experimental/setup-api.d.ts +1 -1
  40. package/lib/core/experimental/sources/interceptor-source.d.mts +2 -2
  41. package/lib/core/experimental/sources/interceptor-source.d.ts +2 -2
  42. package/lib/core/experimental/sources/network-source.d.mts +2 -2
  43. package/lib/core/experimental/sources/network-source.d.ts +2 -2
  44. package/lib/core/getResponse.d.mts +1 -1
  45. package/lib/core/getResponse.d.ts +1 -1
  46. package/lib/core/graphql.d.mts +1 -1
  47. package/lib/core/graphql.d.ts +1 -1
  48. package/lib/core/handlers/GraphQLHandler.d.mts +1 -1
  49. package/lib/core/handlers/GraphQLHandler.d.ts +1 -1
  50. package/lib/core/handlers/HttpHandler.d.mts +1 -1
  51. package/lib/core/handlers/HttpHandler.d.ts +1 -1
  52. package/lib/core/handlers/RequestHandler.d.mts +1 -1
  53. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  54. package/lib/core/handlers/WebSocketHandler.js +7 -6
  55. package/lib/core/handlers/WebSocketHandler.js.map +1 -1
  56. package/lib/core/handlers/WebSocketHandler.mjs +7 -6
  57. package/lib/core/handlers/WebSocketHandler.mjs.map +1 -1
  58. package/lib/core/http.d.mts +1 -1
  59. package/lib/core/http.d.ts +1 -1
  60. package/lib/core/index.d.mts +1 -1
  61. package/lib/core/index.d.ts +1 -1
  62. package/lib/core/{on-unhandled-frame-BBR-P3kV.d.ts → on-unhandled-frame-0KmwUmeV.d.ts} +1 -1
  63. package/lib/core/{on-unhandled-frame-Cr1KOZ0I.d.mts → on-unhandled-frame-gkokW4Rr.d.mts} +1 -1
  64. package/lib/core/passthrough.d.mts +1 -1
  65. package/lib/core/passthrough.d.ts +1 -1
  66. package/lib/core/sse.d.mts +1 -1
  67. package/lib/core/sse.d.ts +1 -1
  68. package/lib/core/sse.js +18 -13
  69. package/lib/core/sse.js.map +1 -1
  70. package/lib/core/sse.mjs +18 -13
  71. package/lib/core/sse.mjs.map +1 -1
  72. package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
  73. package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
  74. package/lib/core/utils/HttpResponse/decorators.js +1 -1
  75. package/lib/core/utils/HttpResponse/decorators.js.map +1 -1
  76. package/lib/core/utils/HttpResponse/decorators.mjs +1 -1
  77. package/lib/core/utils/HttpResponse/decorators.mjs.map +1 -1
  78. package/lib/core/utils/executeHandlers.d.mts +1 -1
  79. package/lib/core/utils/executeHandlers.d.ts +1 -1
  80. package/lib/core/utils/handleRequest.d.mts +1 -1
  81. package/lib/core/utils/handleRequest.d.ts +1 -1
  82. package/lib/core/utils/internal/Disposable.js +19 -1
  83. package/lib/core/utils/internal/Disposable.js.map +1 -1
  84. package/lib/core/utils/internal/Disposable.mjs +19 -1
  85. package/lib/core/utils/internal/Disposable.mjs.map +1 -1
  86. package/lib/core/utils/internal/attachSiblingHandlers.d.mts +1 -1
  87. package/lib/core/utils/internal/attachSiblingHandlers.d.ts +1 -1
  88. package/lib/core/utils/internal/attachSiblingHandlers.js +1 -1
  89. package/lib/core/utils/internal/attachSiblingHandlers.js.map +1 -1
  90. package/lib/core/utils/internal/attachSiblingHandlers.mjs +1 -1
  91. package/lib/core/utils/internal/attachSiblingHandlers.mjs.map +1 -1
  92. package/lib/core/utils/internal/isHandlerKind.d.mts +1 -1
  93. package/lib/core/utils/internal/isHandlerKind.d.ts +1 -1
  94. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +1 -1
  95. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +1 -1
  96. package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
  97. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  98. package/lib/core/ws/WebSocketClientManager.js +4 -0
  99. package/lib/core/ws/WebSocketClientManager.js.map +1 -1
  100. package/lib/core/ws/WebSocketClientManager.mjs +4 -0
  101. package/lib/core/ws/WebSocketClientManager.mjs.map +1 -1
  102. package/lib/core/ws/handleWebSocketEvent.d.mts +1 -1
  103. package/lib/core/ws/handleWebSocketEvent.d.ts +1 -1
  104. package/lib/iife/index.js +4435 -979
  105. package/lib/iife/index.js.map +1 -1
  106. package/lib/mockServiceWorker.js +1 -1
  107. package/package.json +4 -5
  108. package/src/core/experimental/define-network.ts +30 -6
  109. package/src/core/sse.ts +15 -4
  110. package/src/core/utils/internal/Disposable.ts +22 -1
@@ -1,4 +1,4 @@
1
- import { R as RequestHandler } from '../HttpResponse-BFS34nkx.js';
1
+ import { R as RequestHandler } from '../HttpResponse-BXyXQFMJ.js';
2
2
  import { WebSocketHandler } from '../handlers/WebSocketHandler.js';
3
3
  import '@mswjs/interceptors';
4
4
  import '../utils/internal/isIterable.js';
@@ -1,14 +1,14 @@
1
1
  export { DefineNetworkOptions, NetworkApi, defineNetwork } from './define-network.mjs';
2
2
  export { NetworkSource } from './sources/network-source.mjs';
3
3
  export { InterceptorSource } from './sources/interceptor-source.mjs';
4
- export { N as NetworkFrame } from '../on-unhandled-frame-Cr1KOZ0I.mjs';
4
+ export { N as NetworkFrame } from '../on-unhandled-frame-gkokW4Rr.mjs';
5
5
  export { HttpNetworkFrame, HttpNetworkFrameEventMap } from './frames/http-frame.mjs';
6
6
  export { WebSocketNetworkFrame, WebSocketNetworkFrameEventMap } from './frames/websocket-frame.mjs';
7
7
  export { HandlersController, InMemoryHandlersController } from './handlers-controller.mjs';
8
8
  import 'rettime';
9
9
  import '@mswjs/interceptors';
10
10
  import '@mswjs/interceptors/WebSocket';
11
- import '../HttpResponse-CQwYpuKo.mjs';
11
+ import '../HttpResponse-BTyqrRB6.mjs';
12
12
  import '../utils/internal/isIterable.mjs';
13
13
  import '../typeUtils.mjs';
14
14
  import 'graphql';
@@ -1,14 +1,14 @@
1
1
  export { DefineNetworkOptions, NetworkApi, defineNetwork } from './define-network.js';
2
2
  export { NetworkSource } from './sources/network-source.js';
3
3
  export { InterceptorSource } from './sources/interceptor-source.js';
4
- export { N as NetworkFrame } from '../on-unhandled-frame-BBR-P3kV.js';
4
+ export { N as NetworkFrame } from '../on-unhandled-frame-0KmwUmeV.js';
5
5
  export { HttpNetworkFrame, HttpNetworkFrameEventMap } from './frames/http-frame.js';
6
6
  export { WebSocketNetworkFrame, WebSocketNetworkFrameEventMap } from './frames/websocket-frame.js';
7
7
  export { HandlersController, InMemoryHandlersController } from './handlers-controller.js';
8
8
  import 'rettime';
9
9
  import '@mswjs/interceptors';
10
10
  import '@mswjs/interceptors/WebSocket';
11
- import '../HttpResponse-BFS34nkx.js';
11
+ import '../HttpResponse-BXyXQFMJ.js';
12
12
  import '../utils/internal/isIterable.js';
13
13
  import '../typeUtils.js';
14
14
  import 'graphql';
@@ -1,7 +1,7 @@
1
- export { U as UnhandledFrameCallback, d as UnhandledFrameDefaults, b as UnhandledFrameHandle, c as UnhandledFrameStrategy, e as executeUnhandledFrameHandle } from '../on-unhandled-frame-Cr1KOZ0I.mjs';
1
+ export { U as UnhandledFrameCallback, c as UnhandledFrameDefaults, b as UnhandledFrameHandle, d as UnhandledFrameStrategy, e as executeUnhandledFrameHandle } from '../on-unhandled-frame-gkokW4Rr.mjs';
2
2
  import 'rettime';
3
3
  import './handlers-controller.mjs';
4
- import '../HttpResponse-CQwYpuKo.mjs';
4
+ import '../HttpResponse-BTyqrRB6.mjs';
5
5
  import '@mswjs/interceptors';
6
6
  import '../utils/internal/isIterable.mjs';
7
7
  import '../typeUtils.mjs';
@@ -1,7 +1,7 @@
1
- export { U as UnhandledFrameCallback, d as UnhandledFrameDefaults, b as UnhandledFrameHandle, c as UnhandledFrameStrategy, e as executeUnhandledFrameHandle } from '../on-unhandled-frame-BBR-P3kV.js';
1
+ export { U as UnhandledFrameCallback, c as UnhandledFrameDefaults, b as UnhandledFrameHandle, d as UnhandledFrameStrategy, e as executeUnhandledFrameHandle } from '../on-unhandled-frame-0KmwUmeV.js';
2
2
  import 'rettime';
3
3
  import './handlers-controller.js';
4
- import '../HttpResponse-BFS34nkx.js';
4
+ import '../HttpResponse-BXyXQFMJ.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-CQwYpuKo.mjs';
6
+ import '../HttpResponse-BTyqrRB6.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-BFS34nkx.js';
6
+ import '../HttpResponse-BXyXQFMJ.js';
7
7
  import '@mswjs/interceptors';
8
8
  import '../utils/internal/isIterable.js';
9
9
  import '../typeUtils.js';
@@ -2,9 +2,9 @@ import { Interceptor, HttpRequestEventMap } from '@mswjs/interceptors';
2
2
  import { WebSocketEventMap } from '@mswjs/interceptors/WebSocket';
3
3
  import { NetworkSource } from './network-source.mjs';
4
4
  import 'rettime';
5
- import '../../on-unhandled-frame-Cr1KOZ0I.mjs';
5
+ import '../../on-unhandled-frame-gkokW4Rr.mjs';
6
6
  import '../handlers-controller.mjs';
7
- import '../../HttpResponse-CQwYpuKo.mjs';
7
+ import '../../HttpResponse-BTyqrRB6.mjs';
8
8
  import '../../utils/internal/isIterable.mjs';
9
9
  import '../../typeUtils.mjs';
10
10
  import 'graphql';
@@ -2,9 +2,9 @@ import { Interceptor, HttpRequestEventMap } from '@mswjs/interceptors';
2
2
  import { WebSocketEventMap } from '@mswjs/interceptors/WebSocket';
3
3
  import { NetworkSource } from './network-source.js';
4
4
  import 'rettime';
5
- import '../../on-unhandled-frame-BBR-P3kV.js';
5
+ import '../../on-unhandled-frame-0KmwUmeV.js';
6
6
  import '../handlers-controller.js';
7
- import '../../HttpResponse-BFS34nkx.js';
7
+ import '../../HttpResponse-BXyXQFMJ.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
- import { A as AnyNetworkFrame, E as ExtractFrameEvents } from '../../on-unhandled-frame-Cr1KOZ0I.mjs';
2
+ import { A as AnyNetworkFrame, E as ExtractFrameEvents } from '../../on-unhandled-frame-gkokW4Rr.mjs';
3
3
  import '../handlers-controller.mjs';
4
- import '../../HttpResponse-CQwYpuKo.mjs';
4
+ import '../../HttpResponse-BTyqrRB6.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
- import { A as AnyNetworkFrame, E as ExtractFrameEvents } from '../../on-unhandled-frame-BBR-P3kV.js';
2
+ import { A as AnyNetworkFrame, E as ExtractFrameEvents } from '../../on-unhandled-frame-0KmwUmeV.js';
3
3
  import '../handlers-controller.js';
4
- import '../../HttpResponse-BFS34nkx.js';
4
+ import '../../HttpResponse-BXyXQFMJ.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-CQwYpuKo.mjs';
1
+ import { R as RequestHandler, k as ResponseResolutionContext } from './HttpResponse-BTyqrRB6.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-BFS34nkx.js';
1
+ import { R as RequestHandler, k as ResponseResolutionContext } from './HttpResponse-BXyXQFMJ.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-CQwYpuKo.mjs';
1
+ import { e as GraphQLQuery, h as GraphQLVariables, p as GraphQLPredicate, l as ResponseResolver, q as GraphQLResolverExtras, g as GraphQLResponseBody, j as RequestHandlerOptions, b as GraphQLHandler } from './HttpResponse-BTyqrRB6.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-BFS34nkx.js';
1
+ import { e as GraphQLQuery, h as GraphQLVariables, p as GraphQLPredicate, l as ResponseResolver, q as GraphQLResolverExtras, g as GraphQLResponseBody, j as RequestHandlerOptions, b as GraphQLHandler } from './HttpResponse-BXyXQFMJ.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-CQwYpuKo.mjs';
2
+ export { z as DocumentTypeDecoration, G as GraphQLCustomPredicate, B as GraphQLCustomPredicateResult, b as GraphQLHandler, C as GraphQLHandlerInfo, E as GraphQLHandlerNameSelector, c as GraphQLJsonRequestBody, d as GraphQLOperationType, p as GraphQLPredicate, e as GraphQLQuery, f as GraphQLRequestBody, F as GraphQLRequestParsedResult, q as GraphQLResolverExtras, g as GraphQLResponseBody, h as GraphQLVariables, I as isDocumentNode } from '../HttpResponse-BTyqrRB6.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-BFS34nkx.js';
2
+ export { z as DocumentTypeDecoration, G as GraphQLCustomPredicate, B as GraphQLCustomPredicateResult, b as GraphQLHandler, C as GraphQLHandlerInfo, E as GraphQLHandlerNameSelector, c as GraphQLJsonRequestBody, d as GraphQLOperationType, p as GraphQLPredicate, e as GraphQLQuery, f as GraphQLRequestBody, F as GraphQLRequestParsedResult, q as GraphQLResolverExtras, g as GraphQLResponseBody, h as GraphQLVariables, I as isDocumentNode } from '../HttpResponse-BXyXQFMJ.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-CQwYpuKo.mjs';
1
+ import { R as RequestHandler, r as RequestHandlerDefaultInfo, l as ResponseResolver, j as RequestHandlerOptions, k as ResponseResolutionContext } from '../HttpResponse-BTyqrRB6.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-BFS34nkx.js';
1
+ import { R as RequestHandler, r as RequestHandlerDefaultInfo, l as ResponseResolver, j as RequestHandlerOptions, k as ResponseResolutionContext } from '../HttpResponse-BXyXQFMJ.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-CQwYpuKo.mjs';
2
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, a as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, K as RequestHandlerArgs, r as RequestHandlerDefaultInfo, L as RequestHandlerExecutionResult, N as RequestHandlerInternalInfo, j as RequestHandlerOptions, l as ResponseResolver, m as ResponseResolverInfo, n as ResponseResolverReturnType, O as forwardResponseCookies } from '../HttpResponse-BTyqrRB6.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-BFS34nkx.js';
2
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, a as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, K as RequestHandlerArgs, r as RequestHandlerDefaultInfo, L as RequestHandlerExecutionResult, N as RequestHandlerInternalInfo, j as RequestHandlerOptions, l as ResponseResolver, m as ResponseResolverInfo, n as ResponseResolverReturnType, O as forwardResponseCookies } from '../HttpResponse-BXyXQFMJ.js';
3
3
  import '../typeUtils.js';
4
4
  import '@mswjs/interceptors';
5
5
  import 'graphql';
@@ -30,12 +30,12 @@ var import_interceptors = require("@mswjs/interceptors");
30
30
  var import_matchRequestUrl = require("../utils/matching/matchRequestUrl");
31
31
  var import_getCallFrame = require("../utils/internal/getCallFrame");
32
32
  var import_attachWebSocketLogger = require("../ws/utils/attachWebSocketLogger");
33
- const kEmitter = Symbol("kEmitter");
34
- const kSender = Symbol("kSender");
35
- const kConnect = Symbol("kConnect");
36
- const kAutoConnect = Symbol("kAutoConnect");
37
- const kStopPropagationPatched = Symbol("kStopPropagationPatched");
38
- const KOnStopPropagation = Symbol("KOnStopPropagation");
33
+ const kEmitter = /* @__PURE__ */ Symbol("kEmitter");
34
+ const kSender = /* @__PURE__ */ Symbol("kSender");
35
+ const kConnect = /* @__PURE__ */ Symbol("kConnect");
36
+ const kAutoConnect = /* @__PURE__ */ Symbol("kAutoConnect");
37
+ const kStopPropagationPatched = /* @__PURE__ */ Symbol("kStopPropagationPatched");
38
+ const KOnStopPropagation = /* @__PURE__ */ Symbol("KOnStopPropagation");
39
39
  class WebSocketHandler {
40
40
  constructor(url) {
41
41
  this.url = url;
@@ -43,6 +43,7 @@ class WebSocketHandler {
43
43
  this[kEmitter] = new import_strict_event_emitter.Emitter();
44
44
  this.callFrame = (0, import_getCallFrame.getCallFrame)(new Error());
45
45
  }
46
+ url;
46
47
  id;
47
48
  callFrame;
48
49
  kind = "websocket";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport { createRequestId, resolveWebSocketUrl } from '@mswjs/interceptors'\nimport type {\n WebSocketClientConnectionProtocol,\n WebSocketConnectionData,\n WebSocketServerConnectionProtocol,\n} from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport { attachWebSocketLogger } from '../ws/utils/attachWebSocketLogger'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\nexport interface WebSocketHandlerConnection {\n client: WebSocketClientConnectionProtocol\n server: WebSocketServerConnectionProtocol\n info: WebSocketConnectionData['info']\n params: PathParams\n}\n\nexport interface WebSocketResolutionContext {\n baseUrl?: string\n [kAutoConnect]?: boolean\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kSender = Symbol('kSender')\nexport const kConnect = Symbol('kConnect')\nexport const kAutoConnect = Symbol('kAutoConnect')\n\nconst kStopPropagationPatched = Symbol('kStopPropagationPatched')\nconst KOnStopPropagation = Symbol('KOnStopPropagation')\n\nexport class WebSocketHandler {\n public id: string\n public callFrame?: string\n public kind = 'websocket' as const\n\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(protected readonly url: Path) {\n this.id = createRequestId()\n\n this[kEmitter] = new Emitter()\n this.callFrame = getCallFrame(new Error())\n }\n\n public parse(args: {\n url: string | URL\n resolutionContext?: WebSocketResolutionContext\n }): WebSocketHandlerParsedResult {\n const clientUrl = new URL(args.url)\n\n // Resolve the WebSocket handler path:\n // - Plain string URLs resolved as per the specification (via Interceptors).\n // - String URLs starting with a wildcard are preserved (prepending a scheme there will break them).\n // - RegExp paths are preserved.\n const resolvedHandlerUrl =\n this.url instanceof RegExp || this.url.startsWith('*')\n ? this.url\n : this.#resolveWebSocketUrl(this.url, args.resolutionContext?.baseUrl)\n\n /**\n * @note Remove the Socket.IO path prefix from the WebSocket\n * client URL. This is an exception to keep the users from\n * including the implementation details in their handlers.\n */\n clientUrl.pathname = clientUrl.pathname.replace(/^\\/socket.io\\//, '/')\n\n const match = matchRequestUrl(\n clientUrl,\n resolvedHandlerUrl,\n args.resolutionContext?.baseUrl,\n )\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n url: string | URL\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n public test(\n url: string | URL,\n resolutionContext?: WebSocketResolutionContext & { strict?: boolean },\n ): boolean {\n return this.#match(url, resolutionContext) != null\n }\n\n public async run(\n connection: WebSocketConnectionData,\n resolutionContext?: WebSocketResolutionContext,\n ): Promise<WebSocketHandlerConnection | null> {\n const parsedResult = this.#match(connection.client.url, resolutionContext)\n\n if (parsedResult == null) {\n return null\n }\n\n const resolvedConnection: WebSocketHandlerConnection = {\n ...connection,\n params: parsedResult.match.params || {},\n }\n\n if (resolutionContext?.[kAutoConnect] ?? true) {\n if (this[kConnect](resolvedConnection)) {\n return resolvedConnection\n }\n\n return null\n }\n\n return resolvedConnection\n }\n\n #match(\n url: string | URL,\n resolutionContext?: WebSocketResolutionContext & { strict?: boolean },\n ): WebSocketHandlerParsedResult | null {\n const resolvedUrl = this.#resolveWebSocketUrl(\n url.toString(),\n resolutionContext?.baseUrl,\n )\n const parsedResult = this.parse({\n url: resolvedUrl,\n resolutionContext,\n })\n\n if (\n this.predicate({\n url,\n parsedResult,\n })\n ) {\n return parsedResult\n }\n\n return null\n }\n\n protected [kConnect](connection: WebSocketHandlerConnection): boolean {\n // Support `event.stopPropagation()` for various client/server events.\n connection.client.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.client.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n connection.server.addEventListener(\n 'open',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'error',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n /**\n * @fixme Use \"rettime\" and await these events to have\n * exceptions propagate properly.\n */\n return this[kEmitter].emit('connection', connection)\n }\n\n public log(connection: WebSocketConnectionData): () => void {\n return attachWebSocketLogger(connection)\n }\n\n #resolveWebSocketUrl(url: string, baseUrl?: string): string {\n const resolvedUrl = resolveWebSocketUrl(\n baseUrl\n ? /**\n * @note Resolve against the base URL preemtively because `resolveWebSocketUrl` only\n * resolves against `location.href`, which is missing in Node.js. Base URL allows\n * the handler to accept a relative URL in Node.js.\n */\n new URL(url, baseUrl)\n : url,\n )\n\n /**\n * @note Omit the trailing slash.\n * While the browser always produces a trailing slash at the end of a WebSocket URL,\n * having it in as the handler's predicate would mean it is *required* in the actual URL.\n */\n return resolvedUrl.replace(/\\/$/, '')\n }\n}\n\nfunction createStopPropagationListener(handler: WebSocketHandler) {\n return function stopPropagationListener(event: Event) {\n const propagationStoppedAt = Reflect.get(event, 'kPropagationStoppedAt') as\n | string\n | undefined\n\n if (propagationStoppedAt && handler.id !== propagationStoppedAt) {\n event.stopImmediatePropagation()\n return\n }\n\n Object.defineProperty(event, KOnStopPropagation, {\n value(this: WebSocketHandler) {\n Object.defineProperty(event, 'kPropagationStoppedAt', {\n value: handler.id,\n })\n },\n configurable: true,\n })\n\n // Since the same event instance is shared between all client/server objects,\n // make sure to patch its `stopPropagation` method only once.\n if (!Reflect.get(event, kStopPropagationPatched)) {\n event.stopPropagation = new Proxy(event.stopPropagation, {\n apply: (target, thisArg, args) => {\n Reflect.get(event, KOnStopPropagation)?.call(handler)\n return Reflect.apply(target, thisArg, args)\n },\n })\n\n Object.defineProperty(event, kStopPropagationPatched, {\n value: true,\n // If something else attempts to redefine this, throw.\n configurable: false,\n })\n }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport { createRequestId, resolveWebSocketUrl } from '@mswjs/interceptors'\nimport type {\n WebSocketClientConnectionProtocol,\n WebSocketConnectionData,\n WebSocketServerConnectionProtocol,\n} from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport { attachWebSocketLogger } from '../ws/utils/attachWebSocketLogger'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\nexport interface WebSocketHandlerConnection {\n client: WebSocketClientConnectionProtocol\n server: WebSocketServerConnectionProtocol\n info: WebSocketConnectionData['info']\n params: PathParams\n}\n\nexport interface WebSocketResolutionContext {\n baseUrl?: string\n [kAutoConnect]?: boolean\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kSender = Symbol('kSender')\nexport const kConnect = Symbol('kConnect')\nexport const kAutoConnect = Symbol('kAutoConnect')\n\nconst kStopPropagationPatched = Symbol('kStopPropagationPatched')\nconst KOnStopPropagation = Symbol('KOnStopPropagation')\n\nexport class WebSocketHandler {\n public id: string\n public callFrame?: string\n public kind = 'websocket' as const\n\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(protected readonly url: Path) {\n this.id = createRequestId()\n\n this[kEmitter] = new Emitter()\n this.callFrame = getCallFrame(new Error())\n }\n\n public parse(args: {\n url: string | URL\n resolutionContext?: WebSocketResolutionContext\n }): WebSocketHandlerParsedResult {\n const clientUrl = new URL(args.url)\n\n // Resolve the WebSocket handler path:\n // - Plain string URLs resolved as per the specification (via Interceptors).\n // - String URLs starting with a wildcard are preserved (prepending a scheme there will break them).\n // - RegExp paths are preserved.\n const resolvedHandlerUrl =\n this.url instanceof RegExp || this.url.startsWith('*')\n ? this.url\n : this.#resolveWebSocketUrl(this.url, args.resolutionContext?.baseUrl)\n\n /**\n * @note Remove the Socket.IO path prefix from the WebSocket\n * client URL. This is an exception to keep the users from\n * including the implementation details in their handlers.\n */\n clientUrl.pathname = clientUrl.pathname.replace(/^\\/socket.io\\//, '/')\n\n const match = matchRequestUrl(\n clientUrl,\n resolvedHandlerUrl,\n args.resolutionContext?.baseUrl,\n )\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n url: string | URL\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n public test(\n url: string | URL,\n resolutionContext?: WebSocketResolutionContext & { strict?: boolean },\n ): boolean {\n return this.#match(url, resolutionContext) != null\n }\n\n public async run(\n connection: WebSocketConnectionData,\n resolutionContext?: WebSocketResolutionContext,\n ): Promise<WebSocketHandlerConnection | null> {\n const parsedResult = this.#match(connection.client.url, resolutionContext)\n\n if (parsedResult == null) {\n return null\n }\n\n const resolvedConnection: WebSocketHandlerConnection = {\n ...connection,\n params: parsedResult.match.params || {},\n }\n\n if (resolutionContext?.[kAutoConnect] ?? true) {\n if (this[kConnect](resolvedConnection)) {\n return resolvedConnection\n }\n\n return null\n }\n\n return resolvedConnection\n }\n\n #match(\n url: string | URL,\n resolutionContext?: WebSocketResolutionContext & { strict?: boolean },\n ): WebSocketHandlerParsedResult | null {\n const resolvedUrl = this.#resolveWebSocketUrl(\n url.toString(),\n resolutionContext?.baseUrl,\n )\n const parsedResult = this.parse({\n url: resolvedUrl,\n resolutionContext,\n })\n\n if (\n this.predicate({\n url,\n parsedResult,\n })\n ) {\n return parsedResult\n }\n\n return null\n }\n\n protected [kConnect](connection: WebSocketHandlerConnection): boolean {\n // Support `event.stopPropagation()` for various client/server events.\n connection.client.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.client.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n connection.server.addEventListener(\n 'open',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'error',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n /**\n * @fixme Use \"rettime\" and await these events to have\n * exceptions propagate properly.\n */\n return this[kEmitter].emit('connection', connection)\n }\n\n public log(connection: WebSocketConnectionData): () => void {\n return attachWebSocketLogger(connection)\n }\n\n #resolveWebSocketUrl(url: string, baseUrl?: string): string {\n const resolvedUrl = resolveWebSocketUrl(\n baseUrl\n ? /**\n * @note Resolve against the base URL preemtively because `resolveWebSocketUrl` only\n * resolves against `location.href`, which is missing in Node.js. Base URL allows\n * the handler to accept a relative URL in Node.js.\n */\n new URL(url, baseUrl)\n : url,\n )\n\n /**\n * @note Omit the trailing slash.\n * While the browser always produces a trailing slash at the end of a WebSocket URL,\n * having it in as the handler's predicate would mean it is *required* in the actual URL.\n */\n return resolvedUrl.replace(/\\/$/, '')\n }\n}\n\nfunction createStopPropagationListener(handler: WebSocketHandler) {\n return function stopPropagationListener(event: Event) {\n const propagationStoppedAt = Reflect.get(event, 'kPropagationStoppedAt') as\n | string\n | undefined\n\n if (propagationStoppedAt && handler.id !== propagationStoppedAt) {\n event.stopImmediatePropagation()\n return\n }\n\n Object.defineProperty(event, KOnStopPropagation, {\n value(this: WebSocketHandler) {\n Object.defineProperty(event, 'kPropagationStoppedAt', {\n value: handler.id,\n })\n },\n configurable: true,\n })\n\n // Since the same event instance is shared between all client/server objects,\n // make sure to patch its `stopPropagation` method only once.\n if (!Reflect.get(event, kStopPropagationPatched)) {\n event.stopPropagation = new Proxy(event.stopPropagation, {\n apply: (target, thisArg, args) => {\n Reflect.get(event, KOnStopPropagation)?.call(handler)\n return Reflect.apply(target, thisArg, args)\n },\n })\n\n Object.defineProperty(event, kStopPropagationPatched, {\n value: true,\n // If something else attempts to redefine this, throw.\n configurable: false,\n })\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -5,12 +5,12 @@ import {
5
5
  } from '../utils/matching/matchRequestUrl.mjs';
6
6
  import { getCallFrame } from '../utils/internal/getCallFrame.mjs';
7
7
  import { attachWebSocketLogger } from '../ws/utils/attachWebSocketLogger.mjs';
8
- const kEmitter = Symbol("kEmitter");
9
- const kSender = Symbol("kSender");
10
- const kConnect = Symbol("kConnect");
11
- const kAutoConnect = Symbol("kAutoConnect");
12
- const kStopPropagationPatched = Symbol("kStopPropagationPatched");
13
- const KOnStopPropagation = Symbol("KOnStopPropagation");
8
+ const kEmitter = /* @__PURE__ */ Symbol("kEmitter");
9
+ const kSender = /* @__PURE__ */ Symbol("kSender");
10
+ const kConnect = /* @__PURE__ */ Symbol("kConnect");
11
+ const kAutoConnect = /* @__PURE__ */ Symbol("kAutoConnect");
12
+ const kStopPropagationPatched = /* @__PURE__ */ Symbol("kStopPropagationPatched");
13
+ const KOnStopPropagation = /* @__PURE__ */ Symbol("KOnStopPropagation");
14
14
  class WebSocketHandler {
15
15
  constructor(url) {
16
16
  this.url = url;
@@ -18,6 +18,7 @@ class WebSocketHandler {
18
18
  this[kEmitter] = new Emitter();
19
19
  this.callFrame = getCallFrame(new Error());
20
20
  }
21
+ url;
21
22
  id;
22
23
  callFrame;
23
24
  kind = "websocket";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport { createRequestId, resolveWebSocketUrl } from '@mswjs/interceptors'\nimport type {\n WebSocketClientConnectionProtocol,\n WebSocketConnectionData,\n WebSocketServerConnectionProtocol,\n} from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport { attachWebSocketLogger } from '../ws/utils/attachWebSocketLogger'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\nexport interface WebSocketHandlerConnection {\n client: WebSocketClientConnectionProtocol\n server: WebSocketServerConnectionProtocol\n info: WebSocketConnectionData['info']\n params: PathParams\n}\n\nexport interface WebSocketResolutionContext {\n baseUrl?: string\n [kAutoConnect]?: boolean\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kSender = Symbol('kSender')\nexport const kConnect = Symbol('kConnect')\nexport const kAutoConnect = Symbol('kAutoConnect')\n\nconst kStopPropagationPatched = Symbol('kStopPropagationPatched')\nconst KOnStopPropagation = Symbol('KOnStopPropagation')\n\nexport class WebSocketHandler {\n public id: string\n public callFrame?: string\n public kind = 'websocket' as const\n\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(protected readonly url: Path) {\n this.id = createRequestId()\n\n this[kEmitter] = new Emitter()\n this.callFrame = getCallFrame(new Error())\n }\n\n public parse(args: {\n url: string | URL\n resolutionContext?: WebSocketResolutionContext\n }): WebSocketHandlerParsedResult {\n const clientUrl = new URL(args.url)\n\n // Resolve the WebSocket handler path:\n // - Plain string URLs resolved as per the specification (via Interceptors).\n // - String URLs starting with a wildcard are preserved (prepending a scheme there will break them).\n // - RegExp paths are preserved.\n const resolvedHandlerUrl =\n this.url instanceof RegExp || this.url.startsWith('*')\n ? this.url\n : this.#resolveWebSocketUrl(this.url, args.resolutionContext?.baseUrl)\n\n /**\n * @note Remove the Socket.IO path prefix from the WebSocket\n * client URL. This is an exception to keep the users from\n * including the implementation details in their handlers.\n */\n clientUrl.pathname = clientUrl.pathname.replace(/^\\/socket.io\\//, '/')\n\n const match = matchRequestUrl(\n clientUrl,\n resolvedHandlerUrl,\n args.resolutionContext?.baseUrl,\n )\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n url: string | URL\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n public test(\n url: string | URL,\n resolutionContext?: WebSocketResolutionContext & { strict?: boolean },\n ): boolean {\n return this.#match(url, resolutionContext) != null\n }\n\n public async run(\n connection: WebSocketConnectionData,\n resolutionContext?: WebSocketResolutionContext,\n ): Promise<WebSocketHandlerConnection | null> {\n const parsedResult = this.#match(connection.client.url, resolutionContext)\n\n if (parsedResult == null) {\n return null\n }\n\n const resolvedConnection: WebSocketHandlerConnection = {\n ...connection,\n params: parsedResult.match.params || {},\n }\n\n if (resolutionContext?.[kAutoConnect] ?? true) {\n if (this[kConnect](resolvedConnection)) {\n return resolvedConnection\n }\n\n return null\n }\n\n return resolvedConnection\n }\n\n #match(\n url: string | URL,\n resolutionContext?: WebSocketResolutionContext & { strict?: boolean },\n ): WebSocketHandlerParsedResult | null {\n const resolvedUrl = this.#resolveWebSocketUrl(\n url.toString(),\n resolutionContext?.baseUrl,\n )\n const parsedResult = this.parse({\n url: resolvedUrl,\n resolutionContext,\n })\n\n if (\n this.predicate({\n url,\n parsedResult,\n })\n ) {\n return parsedResult\n }\n\n return null\n }\n\n protected [kConnect](connection: WebSocketHandlerConnection): boolean {\n // Support `event.stopPropagation()` for various client/server events.\n connection.client.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.client.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n connection.server.addEventListener(\n 'open',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'error',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n /**\n * @fixme Use \"rettime\" and await these events to have\n * exceptions propagate properly.\n */\n return this[kEmitter].emit('connection', connection)\n }\n\n public log(connection: WebSocketConnectionData): () => void {\n return attachWebSocketLogger(connection)\n }\n\n #resolveWebSocketUrl(url: string, baseUrl?: string): string {\n const resolvedUrl = resolveWebSocketUrl(\n baseUrl\n ? /**\n * @note Resolve against the base URL preemtively because `resolveWebSocketUrl` only\n * resolves against `location.href`, which is missing in Node.js. Base URL allows\n * the handler to accept a relative URL in Node.js.\n */\n new URL(url, baseUrl)\n : url,\n )\n\n /**\n * @note Omit the trailing slash.\n * While the browser always produces a trailing slash at the end of a WebSocket URL,\n * having it in as the handler's predicate would mean it is *required* in the actual URL.\n */\n return resolvedUrl.replace(/\\/$/, '')\n }\n}\n\nfunction createStopPropagationListener(handler: WebSocketHandler) {\n return function stopPropagationListener(event: Event) {\n const propagationStoppedAt = Reflect.get(event, 'kPropagationStoppedAt') as\n | string\n | undefined\n\n if (propagationStoppedAt && handler.id !== propagationStoppedAt) {\n event.stopImmediatePropagation()\n return\n }\n\n Object.defineProperty(event, KOnStopPropagation, {\n value(this: WebSocketHandler) {\n Object.defineProperty(event, 'kPropagationStoppedAt', {\n value: handler.id,\n })\n },\n configurable: true,\n })\n\n // Since the same event instance is shared between all client/server objects,\n // make sure to patch its `stopPropagation` method only once.\n if (!Reflect.get(event, kStopPropagationPatched)) {\n event.stopPropagation = new Proxy(event.stopPropagation, {\n apply: (target, thisArg, args) => {\n Reflect.get(event, KOnStopPropagation)?.call(handler)\n return Reflect.apply(target, thisArg, args)\n },\n })\n\n Object.defineProperty(event, kStopPropagationPatched, {\n value: true,\n // If something else attempts to redefine this, throw.\n configurable: false,\n })\n }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport { createRequestId, resolveWebSocketUrl } from '@mswjs/interceptors'\nimport type {\n WebSocketClientConnectionProtocol,\n WebSocketConnectionData,\n WebSocketServerConnectionProtocol,\n} from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport { attachWebSocketLogger } from '../ws/utils/attachWebSocketLogger'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\nexport interface WebSocketHandlerConnection {\n client: WebSocketClientConnectionProtocol\n server: WebSocketServerConnectionProtocol\n info: WebSocketConnectionData['info']\n params: PathParams\n}\n\nexport interface WebSocketResolutionContext {\n baseUrl?: string\n [kAutoConnect]?: boolean\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kSender = Symbol('kSender')\nexport const kConnect = Symbol('kConnect')\nexport const kAutoConnect = Symbol('kAutoConnect')\n\nconst kStopPropagationPatched = Symbol('kStopPropagationPatched')\nconst KOnStopPropagation = Symbol('KOnStopPropagation')\n\nexport class WebSocketHandler {\n public id: string\n public callFrame?: string\n public kind = 'websocket' as const\n\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(protected readonly url: Path) {\n this.id = createRequestId()\n\n this[kEmitter] = new Emitter()\n this.callFrame = getCallFrame(new Error())\n }\n\n public parse(args: {\n url: string | URL\n resolutionContext?: WebSocketResolutionContext\n }): WebSocketHandlerParsedResult {\n const clientUrl = new URL(args.url)\n\n // Resolve the WebSocket handler path:\n // - Plain string URLs resolved as per the specification (via Interceptors).\n // - String URLs starting with a wildcard are preserved (prepending a scheme there will break them).\n // - RegExp paths are preserved.\n const resolvedHandlerUrl =\n this.url instanceof RegExp || this.url.startsWith('*')\n ? this.url\n : this.#resolveWebSocketUrl(this.url, args.resolutionContext?.baseUrl)\n\n /**\n * @note Remove the Socket.IO path prefix from the WebSocket\n * client URL. This is an exception to keep the users from\n * including the implementation details in their handlers.\n */\n clientUrl.pathname = clientUrl.pathname.replace(/^\\/socket.io\\//, '/')\n\n const match = matchRequestUrl(\n clientUrl,\n resolvedHandlerUrl,\n args.resolutionContext?.baseUrl,\n )\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n url: string | URL\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n public test(\n url: string | URL,\n resolutionContext?: WebSocketResolutionContext & { strict?: boolean },\n ): boolean {\n return this.#match(url, resolutionContext) != null\n }\n\n public async run(\n connection: WebSocketConnectionData,\n resolutionContext?: WebSocketResolutionContext,\n ): Promise<WebSocketHandlerConnection | null> {\n const parsedResult = this.#match(connection.client.url, resolutionContext)\n\n if (parsedResult == null) {\n return null\n }\n\n const resolvedConnection: WebSocketHandlerConnection = {\n ...connection,\n params: parsedResult.match.params || {},\n }\n\n if (resolutionContext?.[kAutoConnect] ?? true) {\n if (this[kConnect](resolvedConnection)) {\n return resolvedConnection\n }\n\n return null\n }\n\n return resolvedConnection\n }\n\n #match(\n url: string | URL,\n resolutionContext?: WebSocketResolutionContext & { strict?: boolean },\n ): WebSocketHandlerParsedResult | null {\n const resolvedUrl = this.#resolveWebSocketUrl(\n url.toString(),\n resolutionContext?.baseUrl,\n )\n const parsedResult = this.parse({\n url: resolvedUrl,\n resolutionContext,\n })\n\n if (\n this.predicate({\n url,\n parsedResult,\n })\n ) {\n return parsedResult\n }\n\n return null\n }\n\n protected [kConnect](connection: WebSocketHandlerConnection): boolean {\n // Support `event.stopPropagation()` for various client/server events.\n connection.client.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.client.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n connection.server.addEventListener(\n 'open',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'error',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n /**\n * @fixme Use \"rettime\" and await these events to have\n * exceptions propagate properly.\n */\n return this[kEmitter].emit('connection', connection)\n }\n\n public log(connection: WebSocketConnectionData): () => void {\n return attachWebSocketLogger(connection)\n }\n\n #resolveWebSocketUrl(url: string, baseUrl?: string): string {\n const resolvedUrl = resolveWebSocketUrl(\n baseUrl\n ? /**\n * @note Resolve against the base URL preemtively because `resolveWebSocketUrl` only\n * resolves against `location.href`, which is missing in Node.js. Base URL allows\n * the handler to accept a relative URL in Node.js.\n */\n new URL(url, baseUrl)\n : url,\n )\n\n /**\n * @note Omit the trailing slash.\n * While the browser always produces a trailing slash at the end of a WebSocket URL,\n * having it in as the handler's predicate would mean it is *required* in the actual URL.\n */\n return resolvedUrl.replace(/\\/$/, '')\n }\n}\n\nfunction createStopPropagationListener(handler: WebSocketHandler) {\n return function stopPropagationListener(event: Event) {\n const propagationStoppedAt = Reflect.get(event, 'kPropagationStoppedAt') as\n | string\n | undefined\n\n if (propagationStoppedAt && handler.id !== propagationStoppedAt) {\n event.stopImmediatePropagation()\n return\n }\n\n Object.defineProperty(event, KOnStopPropagation, {\n value(this: WebSocketHandler) {\n Object.defineProperty(event, 'kPropagationStoppedAt', {\n value: handler.id,\n })\n },\n configurable: true,\n })\n\n // Since the same event instance is shared between all client/server objects,\n // make sure to patch its `stopPropagation` method only once.\n if (!Reflect.get(event, kStopPropagationPatched)) {\n event.stopPropagation = new Proxy(event.stopPropagation, {\n apply: (target, thisArg, args) => {\n Reflect.get(event, KOnStopPropagation)?.call(handler)\n return Reflect.apply(target, thisArg, args)\n },\n })\n\n Object.defineProperty(event, kStopPropagationPatched, {\n value: true,\n // If something else attempts to redefine this, throw.\n configurable: false,\n })\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,4 @@
1
- import { D as DefaultBodyType, a as ResponseResolver, c as RequestHandlerOptions } from './HttpResponse-CQwYpuKo.mjs';
1
+ import { D as DefaultBodyType, l as ResponseResolver, j as RequestHandlerOptions } from './HttpResponse-BTyqrRB6.mjs';
2
2
  import { HttpRequestPredicate, HttpRequestResolverExtras, HttpHandler } from './handlers/HttpHandler.mjs';
3
3
  import { PathParams } from './utils/matching/matchRequestUrl.mjs';
4
4
  import '@mswjs/interceptors';
@@ -1,4 +1,4 @@
1
- import { D as DefaultBodyType, a as ResponseResolver, c as RequestHandlerOptions } from './HttpResponse-BFS34nkx.js';
1
+ import { D as DefaultBodyType, l as ResponseResolver, j as RequestHandlerOptions } from './HttpResponse-BXyXQFMJ.js';
2
2
  import { HttpRequestPredicate, HttpRequestResolverExtras, HttpHandler } from './handlers/HttpHandler.js';
3
3
  import { PathParams } from './utils/matching/matchRequestUrl.js';
4
4
  import '@mswjs/interceptors';
@@ -1,5 +1,5 @@
1
1
  export { SetupApi } from './experimental/setup-api.mjs';
2
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, l as GraphQLCustomPredicate, G as GraphQLHandler, j as GraphQLJsonRequestBody, k as GraphQLOperationType, f as GraphQLQuery, h as GraphQLRequestBody, i as GraphQLResponseBody, g as GraphQLVariables, H as HttpResponse, n as HttpResponseInit, J as JsonBodyType, P as ParsedGraphQLRequest, R as RequestHandler, c as RequestHandlerOptions, m as ResponseResolutionContext, a as ResponseResolver, e as ResponseResolverInfo, b as ResponseResolverReturnType, S as StrictRequest, o as StrictResponse } from './HttpResponse-CQwYpuKo.mjs';
2
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, a as DefaultRequestMultipartBody, G as GraphQLCustomPredicate, b as GraphQLHandler, c as GraphQLJsonRequestBody, d as GraphQLOperationType, e as GraphQLQuery, f as GraphQLRequestBody, g as GraphQLResponseBody, h as GraphQLVariables, H as HttpResponse, i as HttpResponseInit, J as JsonBodyType, P as ParsedGraphQLRequest, R as RequestHandler, j as RequestHandlerOptions, k as ResponseResolutionContext, l as ResponseResolver, m as ResponseResolverInfo, n as ResponseResolverReturnType, S as StrictRequest, o as StrictResponse } from './HttpResponse-BTyqrRB6.mjs';
3
3
  export { HttpRequestHandler, HttpResponseResolver, http } from './http.mjs';
4
4
  export { HttpCustomPredicate, HttpHandler, HttpHandlerInfo, HttpHandlerMethod, HttpMethods, HttpRequestParsedResult, HttpRequestResolverExtras, RequestQuery } from './handlers/HttpHandler.mjs';
5
5
  export { GraphQLLinkHandlers, GraphQLOperationHandler, GraphQLRequestHandler, GraphQLResponseResolver, graphql } from './graphql.mjs';
@@ -1,5 +1,5 @@
1
1
  export { SetupApi } from './experimental/setup-api.js';
2
- export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, l as GraphQLCustomPredicate, G as GraphQLHandler, j as GraphQLJsonRequestBody, k as GraphQLOperationType, f as GraphQLQuery, h as GraphQLRequestBody, i as GraphQLResponseBody, g as GraphQLVariables, H as HttpResponse, n as HttpResponseInit, J as JsonBodyType, P as ParsedGraphQLRequest, R as RequestHandler, c as RequestHandlerOptions, m as ResponseResolutionContext, a as ResponseResolver, e as ResponseResolverInfo, b as ResponseResolverReturnType, S as StrictRequest, o as StrictResponse } from './HttpResponse-BFS34nkx.js';
2
+ export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, a as DefaultRequestMultipartBody, G as GraphQLCustomPredicate, b as GraphQLHandler, c as GraphQLJsonRequestBody, d as GraphQLOperationType, e as GraphQLQuery, f as GraphQLRequestBody, g as GraphQLResponseBody, h as GraphQLVariables, H as HttpResponse, i as HttpResponseInit, J as JsonBodyType, P as ParsedGraphQLRequest, R as RequestHandler, j as RequestHandlerOptions, k as ResponseResolutionContext, l as ResponseResolver, m as ResponseResolverInfo, n as ResponseResolverReturnType, S as StrictRequest, o as StrictResponse } from './HttpResponse-BXyXQFMJ.js';
3
3
  export { HttpRequestHandler, HttpResponseResolver, http } from './http.js';
4
4
  export { HttpCustomPredicate, HttpHandler, HttpHandlerInfo, HttpHandlerMethod, HttpMethods, HttpRequestParsedResult, HttpRequestResolverExtras, RequestQuery } from './handlers/HttpHandler.js';
5
5
  export { GraphQLLinkHandlers, GraphQLOperationHandler, GraphQLRequestHandler, GraphQLResponseResolver, graphql } from './graphql.js';
@@ -53,4 +53,4 @@ type UnhandledFrameDefaults = {
53
53
  };
54
54
  declare function executeUnhandledFrameHandle(frame: AnyNetworkFrame, handle: UnhandledFrameHandle): Promise<void>;
55
55
 
56
- export { type AnyNetworkFrame as A, type ExtractFrameEvents as E, NetworkFrame as N, type UnhandledFrameCallback as U, type NetworkFrameResolutionContext as a, type UnhandledFrameHandle as b, type UnhandledFrameStrategy as c, type UnhandledFrameDefaults as d, executeUnhandledFrameHandle as e };
56
+ export { type AnyNetworkFrame as A, type ExtractFrameEvents as E, NetworkFrame as N, type UnhandledFrameCallback as U, type NetworkFrameResolutionContext as a, type UnhandledFrameHandle as b, type UnhandledFrameDefaults as c, type UnhandledFrameStrategy as d, executeUnhandledFrameHandle as e };
@@ -53,4 +53,4 @@ type UnhandledFrameDefaults = {
53
53
  };
54
54
  declare function executeUnhandledFrameHandle(frame: AnyNetworkFrame, handle: UnhandledFrameHandle): Promise<void>;
55
55
 
56
- export { type AnyNetworkFrame as A, type ExtractFrameEvents as E, NetworkFrame as N, type UnhandledFrameCallback as U, type NetworkFrameResolutionContext as a, type UnhandledFrameHandle as b, type UnhandledFrameStrategy as c, type UnhandledFrameDefaults as d, executeUnhandledFrameHandle as e };
56
+ export { type AnyNetworkFrame as A, type ExtractFrameEvents as E, NetworkFrame as N, type UnhandledFrameCallback as U, type NetworkFrameResolutionContext as a, type UnhandledFrameHandle as b, type UnhandledFrameDefaults as c, type UnhandledFrameStrategy as d, executeUnhandledFrameHandle as e };
@@ -1,4 +1,4 @@
1
- import { H as HttpResponse } from './HttpResponse-CQwYpuKo.mjs';
1
+ import { H as HttpResponse } from './HttpResponse-BTyqrRB6.mjs';
2
2
  import '@mswjs/interceptors';
3
3
  import './utils/internal/isIterable.mjs';
4
4
  import './typeUtils.mjs';
@@ -1,4 +1,4 @@
1
- import { H as HttpResponse } from './HttpResponse-BFS34nkx.js';
1
+ import { H as HttpResponse } from './HttpResponse-BXyXQFMJ.js';
2
2
  import '@mswjs/interceptors';
3
3
  import './utils/internal/isIterable.js';
4
4
  import './typeUtils.js';
@@ -1,4 +1,4 @@
1
- import { a as ResponseResolver } from './HttpResponse-CQwYpuKo.mjs';
1
+ import { l as ResponseResolver } from './HttpResponse-BTyqrRB6.mjs';
2
2
  import { HttpRequestResolverExtras, HttpHandler } from './handlers/HttpHandler.mjs';
3
3
  import { PathParams, Path } from './utils/matching/matchRequestUrl.mjs';
4
4
  import '@mswjs/interceptors';
package/lib/core/sse.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as ResponseResolver } from './HttpResponse-BFS34nkx.js';
1
+ import { l as ResponseResolver } from './HttpResponse-BXyXQFMJ.js';
2
2
  import { HttpRequestResolverExtras, HttpHandler } from './handlers/HttpHandler.js';
3
3
  import { PathParams, Path } from './utils/matching/matchRequestUrl.js';
4
4
  import '@mswjs/interceptors';
package/lib/core/sse.js CHANGED
@@ -41,7 +41,7 @@ const SSE_RESPONSE_INIT = {
41
41
  }
42
42
  };
43
43
  class ServerSentEventHandler extends import_HttpHandler.HttpHandler {
44
- #emitter;
44
+ #loggableRequests;
45
45
  constructor(path, resolver) {
46
46
  (0, import_outvariant.invariant)(
47
47
  typeof EventSource !== "undefined",
@@ -52,7 +52,11 @@ class ServerSentEventHandler extends import_HttpHandler.HttpHandler {
52
52
  const { client, server, response } = createEventStream(
53
53
  info.request
54
54
  );
55
- client[kClientEmitter] = this.#emitter;
55
+ const emitter = new import_strict_event_emitter.Emitter();
56
+ client[kClientEmitter] = emitter;
57
+ if (this.#loggableRequests.has(info.request)) {
58
+ this.#attachClientLogger(info.request, emitter);
59
+ }
56
60
  await resolver({
57
61
  ...info,
58
62
  client,
@@ -60,7 +64,7 @@ class ServerSentEventHandler extends import_HttpHandler.HttpHandler {
60
64
  });
61
65
  return response;
62
66
  });
63
- this.#emitter = new import_strict_event_emitter.Emitter();
67
+ this.#loggableRequests = /* @__PURE__ */ new WeakSet();
64
68
  }
65
69
  async predicate(args) {
66
70
  if (args.request.headers.get("accept") !== "text/event-stream") {
@@ -76,7 +80,7 @@ class ServerSentEventHandler extends import_HttpHandler.HttpHandler {
76
80
  */
77
81
  response: new Response("[streaming]", SSE_RESPONSE_INIT)
78
82
  });
79
- this.#attachClientLogger(args.request, this.#emitter);
83
+ this.#loggableRequests.add(args.request);
80
84
  }
81
85
  return matches;
82
86
  }
@@ -119,7 +123,7 @@ class ServerSentEventHandler extends import_HttpHandler.HttpHandler {
119
123
  });
120
124
  }
121
125
  }
122
- const kClientEmitter = Symbol.for("kClientEmitter");
126
+ const kClientEmitter = /* @__PURE__ */ Symbol.for("kClientEmitter");
123
127
  class ServerSentEventClient {
124
128
  [kClientEmitter];
125
129
  #encoder;
@@ -283,14 +287,14 @@ class ServerSentEventServer {
283
287
  return source;
284
288
  }
285
289
  }
286
- const kRequest = Symbol("kRequest");
287
- const kReconnectionTime = Symbol("kReconnectionTime");
288
- const kLastEventId = Symbol("kLastEventId");
289
- const kAbortController = Symbol("kAbortController");
290
- const kOnOpen = Symbol("kOnOpen");
291
- const kOnMessage = Symbol("kOnMessage");
292
- const kOnAnyMessage = Symbol("kOnAnyMessage");
293
- const kOnError = Symbol("kOnError");
290
+ const kRequest = /* @__PURE__ */ Symbol("kRequest");
291
+ const kReconnectionTime = /* @__PURE__ */ Symbol("kReconnectionTime");
292
+ const kLastEventId = /* @__PURE__ */ Symbol("kLastEventId");
293
+ const kAbortController = /* @__PURE__ */ Symbol("kAbortController");
294
+ const kOnOpen = /* @__PURE__ */ Symbol("kOnOpen");
295
+ const kOnMessage = /* @__PURE__ */ Symbol("kOnMessage");
296
+ const kOnAnyMessage = /* @__PURE__ */ Symbol("kOnAnyMessage");
297
+ const kOnError = /* @__PURE__ */ Symbol("kOnError");
294
298
  class ObservableEventSource extends EventTarget {
295
299
  static CONNECTING = 0;
296
300
  static OPEN = 1;
@@ -527,6 +531,7 @@ class EventSourceParsingStream extends WritableStream {
527
531
  this.decoder = new TextDecoder();
528
532
  this.position = 0;
529
533
  }
534
+ underlyingSink;
530
535
  decoder;
531
536
  buffer;
532
537
  position;