msw 2.3.0-ws.rc-6 → 2.3.0-ws.rc-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 (66) hide show
  1. package/README.md +3 -9
  2. package/lib/browser/index.js +160 -64
  3. package/lib/browser/index.js.map +1 -1
  4. package/lib/browser/index.mjs +160 -64
  5. package/lib/browser/index.mjs.map +1 -1
  6. package/lib/core/handlers/WebSocketHandler.js +1 -2
  7. package/lib/core/handlers/WebSocketHandler.js.map +1 -1
  8. package/lib/core/handlers/WebSocketHandler.mjs +1 -2
  9. package/lib/core/handlers/WebSocketHandler.mjs.map +1 -1
  10. package/lib/core/utils/internal/Disposable.d.mts +2 -2
  11. package/lib/core/utils/internal/Disposable.d.ts +2 -2
  12. package/lib/core/utils/internal/Disposable.js +5 -2
  13. package/lib/core/utils/internal/Disposable.js.map +1 -1
  14. package/lib/core/utils/internal/Disposable.mjs +5 -2
  15. package/lib/core/utils/internal/Disposable.mjs.map +1 -1
  16. package/lib/core/utils/internal/devUtils.d.mts +10 -1
  17. package/lib/core/utils/internal/devUtils.d.ts +10 -1
  18. package/lib/core/utils/internal/devUtils.js +7 -0
  19. package/lib/core/utils/internal/devUtils.js.map +1 -1
  20. package/lib/core/utils/internal/devUtils.mjs +7 -0
  21. package/lib/core/utils/internal/devUtils.mjs.map +1 -1
  22. package/lib/core/utils/matching/normalizePath.d.mts +1 -0
  23. package/lib/core/utils/matching/normalizePath.d.ts +1 -0
  24. package/lib/core/utils/matching/normalizePath.js.map +1 -1
  25. package/lib/core/utils/matching/normalizePath.mjs.map +1 -1
  26. package/lib/core/utils/request/onUnhandledRequest.js +3 -3
  27. package/lib/core/utils/request/onUnhandledRequest.js.map +1 -1
  28. package/lib/core/utils/request/onUnhandledRequest.mjs +4 -4
  29. package/lib/core/utils/request/onUnhandledRequest.mjs.map +1 -1
  30. package/lib/core/utils/url/cleanUrl.d.mts +2 -1
  31. package/lib/core/utils/url/cleanUrl.d.ts +2 -1
  32. package/lib/core/utils/url/cleanUrl.js +3 -0
  33. package/lib/core/utils/url/cleanUrl.js.map +1 -1
  34. package/lib/core/utils/url/cleanUrl.mjs +3 -0
  35. package/lib/core/utils/url/cleanUrl.mjs.map +1 -1
  36. package/lib/core/ws/WebSocketClientManager.js.map +1 -1
  37. package/lib/core/ws/WebSocketClientManager.mjs.map +1 -1
  38. package/lib/iife/index.js +204 -79
  39. package/lib/iife/index.js.map +1 -1
  40. package/lib/mockServiceWorker.js +1 -1
  41. package/lib/native/index.js +5 -0
  42. package/lib/native/index.js.map +1 -1
  43. package/lib/native/index.mjs +6 -1
  44. package/lib/native/index.mjs.map +1 -1
  45. package/lib/node/index.js +5 -0
  46. package/lib/node/index.js.map +1 -1
  47. package/lib/node/index.mjs +6 -1
  48. package/lib/node/index.mjs.map +1 -1
  49. package/package.json +17 -5
  50. package/src/browser/setupWorker/start/createStartHandler.ts +6 -0
  51. package/src/core/handlers/WebSocketHandler.ts +1 -2
  52. package/src/core/utils/internal/Disposable.ts +6 -3
  53. package/src/core/utils/internal/devUtils.test.ts +21 -0
  54. package/src/core/utils/internal/devUtils.ts +13 -0
  55. package/src/core/utils/matching/matchRequestUrl.test.ts +11 -0
  56. package/src/core/utils/matching/normalizePath.test.ts +7 -1
  57. package/src/core/utils/matching/normalizePath.ts +1 -0
  58. package/src/core/utils/request/onUnhandledRequest.test.ts +30 -4
  59. package/src/core/utils/request/onUnhandledRequest.ts +4 -4
  60. package/src/core/utils/url/cleanUrl.test.ts +8 -3
  61. package/src/core/utils/url/cleanUrl.ts +9 -1
  62. package/src/core/utils/url/getAbsoluteUrl.node.test.ts +3 -3
  63. package/src/core/utils/url/getAbsoluteUrl.test.ts +5 -5
  64. package/src/core/utils/url/isAbsoluteUrl.test.ts +7 -7
  65. package/src/core/ws/WebSocketClientManager.ts +1 -2
  66. package/src/node/SetupServerCommonApi.ts +7 -1
package/lib/iife/index.js CHANGED
@@ -145,6 +145,12 @@ var MockServiceWorker = (() => {
145
145
  warn,
146
146
  error
147
147
  };
148
+ var InternalError = class extends Error {
149
+ constructor(message3) {
150
+ super(message3);
151
+ this.name = "InternalError";
152
+ }
153
+ };
148
154
 
149
155
  // src/core/utils/internal/checkGlobals.ts
150
156
  function checkGlobals() {
@@ -345,8 +351,11 @@ var MockServiceWorker = (() => {
345
351
  // src/core/utils/internal/Disposable.ts
346
352
  var Disposable = class {
347
353
  subscriptions = [];
348
- async dispose() {
349
- await Promise.all(this.subscriptions.map((subscription) => subscription()));
354
+ dispose() {
355
+ let subscription;
356
+ while (subscription = this.subscriptions.shift()) {
357
+ subscription();
358
+ }
350
359
  }
351
360
  };
352
361
 
@@ -1129,7 +1138,7 @@ var MockServiceWorker = (() => {
1129
1138
  return stringToRegexp(path, keys, options);
1130
1139
  }
1131
1140
 
1132
- // node_modules/.pnpm/@mswjs+interceptors@0.27.1/node_modules/@mswjs/interceptors/lib/browser/chunk-UJZOJSMP.mjs
1141
+ // node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/chunk-6HYIRFX2.mjs
1133
1142
  var encoder = new TextEncoder();
1134
1143
  function encodeBuffer(text) {
1135
1144
  return encoder.encode(text);
@@ -1144,6 +1153,17 @@ var MockServiceWorker = (() => {
1144
1153
  array.byteOffset + array.byteLength
1145
1154
  );
1146
1155
  }
1156
+
1157
+ // node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/chunk-OMISYKWR.mjs
1158
+ var IS_PATCHED_MODULE = Symbol("isPatchedModule");
1159
+ function isPropertyAccessible(obj, key) {
1160
+ try {
1161
+ obj[key];
1162
+ return true;
1163
+ } catch (e) {
1164
+ return false;
1165
+ }
1166
+ }
1147
1167
  var RESPONSE_STATUS_CODES_WITHOUT_BODY = /* @__PURE__ */ new Set([
1148
1168
  101,
1149
1169
  103,
@@ -1154,9 +1174,27 @@ var MockServiceWorker = (() => {
1154
1174
  function isResponseWithoutBody(status) {
1155
1175
  return RESPONSE_STATUS_CODES_WITHOUT_BODY.has(status);
1156
1176
  }
1157
-
1158
- // node_modules/.pnpm/@mswjs+interceptors@0.27.1/node_modules/@mswjs/interceptors/lib/browser/chunk-HAGW22AN.mjs
1159
- var IS_PATCHED_MODULE = Symbol("isPatchedModule");
1177
+ function createServerErrorResponse(body) {
1178
+ return new Response(
1179
+ JSON.stringify(
1180
+ body instanceof Error ? {
1181
+ name: body.name,
1182
+ message: body.message,
1183
+ stack: body.stack
1184
+ } : body
1185
+ ),
1186
+ {
1187
+ status: 500,
1188
+ statusText: "Unhandled Exception",
1189
+ headers: {
1190
+ "Content-Type": "application/json"
1191
+ }
1192
+ }
1193
+ );
1194
+ }
1195
+ function isResponseError(response) {
1196
+ return isPropertyAccessible(response, "type") && response.type === "error";
1197
+ }
1160
1198
 
1161
1199
  // node_modules/.pnpm/is-node-process@1.2.0/node_modules/is-node-process/lib/index.mjs
1162
1200
  function isNodeProcess() {
@@ -1445,7 +1483,7 @@ var MockServiceWorker = (() => {
1445
1483
  return message3.toString();
1446
1484
  }
1447
1485
 
1448
- // node_modules/.pnpm/@mswjs+interceptors@0.27.1/node_modules/@mswjs/interceptors/lib/browser/chunk-QED3Q6Z2.mjs
1486
+ // node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/chunk-QED3Q6Z2.mjs
1449
1487
  var INTERNAL_REQUEST_ID_HEADER_NAME = "x-interceptors-internal-request-id";
1450
1488
  function getGlobalSymbol(symbol) {
1451
1489
  return (
@@ -1593,7 +1631,7 @@ var MockServiceWorker = (() => {
1593
1631
  return Math.random().toString(16).slice(2);
1594
1632
  }
1595
1633
 
1596
- // node_modules/.pnpm/@mswjs+interceptors@0.27.1/node_modules/@mswjs/interceptors/lib/browser/index.mjs
1634
+ // node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/index.mjs
1597
1635
  var BatchInterceptor = class extends Interceptor {
1598
1636
  constructor(options) {
1599
1637
  BatchInterceptor.symbol = Symbol(options.name);
@@ -1645,6 +1683,9 @@ var MockServiceWorker = (() => {
1645
1683
  return new URL(`/${path}`, "http://localhost").searchParams;
1646
1684
  }
1647
1685
  function cleanUrl(path) {
1686
+ if (path.endsWith("?")) {
1687
+ return path;
1688
+ }
1648
1689
  return path.replace(REDUNDANT_CHARACTERS_EXP, "");
1649
1690
  }
1650
1691
 
@@ -2087,7 +2128,7 @@ var MockServiceWorker = (() => {
2087
2128
  return false;
2088
2129
  }
2089
2130
  }
2090
- function isPropertyAccessible(object, method) {
2131
+ function isPropertyAccessible2(object, method) {
2091
2132
  try {
2092
2133
  object[method];
2093
2134
  return true;
@@ -2100,7 +2141,7 @@ var MockServiceWorker = (() => {
2100
2141
  this.store = /* @__PURE__ */ new Map();
2101
2142
  }
2102
2143
  add(request, response) {
2103
- if (isPropertyAccessible(request, "credentials") && request.credentials === "omit") {
2144
+ if (isPropertyAccessible2(request, "credentials") && request.credentials === "omit") {
2104
2145
  return;
2105
2146
  }
2106
2147
  const requestUrl = new URL(request.url);
@@ -2125,7 +2166,7 @@ var MockServiceWorker = (() => {
2125
2166
  this.deleteExpiredCookies();
2126
2167
  const requestUrl = new URL(request.url);
2127
2168
  const originCookies = this.store.get(requestUrl.origin) || /* @__PURE__ */ new Map();
2128
- if (!isPropertyAccessible(request, "credentials")) {
2169
+ if (!isPropertyAccessible2(request, "credentials")) {
2129
2170
  return originCookies;
2130
2171
  }
2131
2172
  switch (request.credentials) {
@@ -5652,8 +5693,7 @@ Consider naming this operation or using "graphql.operation()" request handler to
5652
5693
  const parsedResult = this.parse({ event });
5653
5694
  const connection = event.data;
5654
5695
  const resolvedConnection = {
5655
- client: connection.client,
5656
- server: connection.server,
5696
+ ...connection,
5657
5697
  params: parsedResult.match.params || {}
5658
5698
  };
5659
5699
  this[kEmitter].emit("connection", resolvedConnection);
@@ -5881,7 +5921,7 @@ Consider naming this operation or using "graphql.operation()" request handler to
5881
5921
  // src/core/utils/request/onUnhandledRequest.ts
5882
5922
  async function onUnhandledRequest(request, strategy = "warn") {
5883
5923
  const url = new URL(request.url);
5884
- const publicUrl = toPublicUrl(url);
5924
+ const publicUrl = toPublicUrl(url) + url.search;
5885
5925
  const unhandledRequestMessage = `intercepted a request without a matching request handler:
5886
5926
 
5887
5927
  \u2022 ${request.method} ${publicUrl}
@@ -5892,7 +5932,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`;
5892
5932
  switch (strategy2) {
5893
5933
  case "error": {
5894
5934
  devUtils.error("Error: %s", unhandledRequestMessage);
5895
- throw new Error(
5935
+ throw new InternalError(
5896
5936
  devUtils.formatMessage(
5897
5937
  'Cannot bypass a request when using the "error" strategy for the "onUnhandledRequest" option.'
5898
5938
  )
@@ -5905,7 +5945,7 @@ Read more: https://mswjs.io/docs/getting-started/mocks`;
5905
5945
  case "bypass":
5906
5946
  break;
5907
5947
  default:
5908
- throw new Error(
5948
+ throw new InternalError(
5909
5949
  devUtils.formatMessage(
5910
5950
  'Failed to react to an unhandled request: unknown strategy "%s". Please provide one of the supported strategies ("bypass", "warn", "error") or a custom callback function as the value of the "onUnhandledRequest" option.',
5911
5951
  strategy2
@@ -6545,6 +6585,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
6545
6585
  context.workerChannel.send("CLIENT_CLOSED");
6546
6586
  }
6547
6587
  window.clearInterval(context.keepAliveInterval);
6588
+ localStorage.removeItem(MSW_WEBSOCKET_CLIENTS_KEY);
6548
6589
  });
6549
6590
  await checkWorkerIntegrity(context).catch((error3) => {
6550
6591
  devUtils.error(
@@ -6714,7 +6755,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
6714
6755
  }
6715
6756
  };
6716
6757
 
6717
- // node_modules/.pnpm/@mswjs+interceptors@0.27.1/node_modules/@mswjs/interceptors/lib/browser/chunk-OUWBQF3Z.mjs
6758
+ // node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/chunk-OUWBQF3Z.mjs
6718
6759
  var RequestController = class {
6719
6760
  constructor(request) {
6720
6761
  this.request = request;
@@ -6752,15 +6793,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
6752
6793
  }
6753
6794
  }
6754
6795
 
6755
- // node_modules/.pnpm/@mswjs+interceptors@0.27.1/node_modules/@mswjs/interceptors/lib/browser/chunk-3FNUI33J.mjs
6756
- function isPropertyAccessible2(obj, key) {
6757
- try {
6758
- obj[key];
6759
- return true;
6760
- } catch (e) {
6761
- return false;
6762
- }
6763
- }
6796
+ // node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/chunk-MAEPOYB6.mjs
6764
6797
  function canParseUrl(url) {
6765
6798
  try {
6766
6799
  new URL(url);
@@ -6813,64 +6846,113 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
6813
6846
  { once: true }
6814
6847
  );
6815
6848
  }
6816
- const resolverResult = await until(async () => {
6817
- const listenersFinished = emitAsync(this.emitter, "request", {
6818
- request: interactiveRequest,
6819
- requestId
6849
+ const responsePromise = new DeferredPromise();
6850
+ const respondWith = (response) => {
6851
+ this.logger.info("responding with a mock response:", response);
6852
+ if (this.emitter.listenerCount("response") > 0) {
6853
+ this.logger.info('emitting the "response" event...');
6854
+ const responseClone = response.clone();
6855
+ this.emitter.emit("response", {
6856
+ response: responseClone,
6857
+ isMockedResponse: true,
6858
+ request: interactiveRequest,
6859
+ requestId
6860
+ });
6861
+ }
6862
+ Object.defineProperty(response, "url", {
6863
+ writable: false,
6864
+ enumerable: true,
6865
+ configurable: false,
6866
+ value: request.url
6820
6867
  });
6821
- await Promise.race([
6822
- requestAborted,
6823
- // Put the listeners invocation Promise in the same race condition
6824
- // with the request abort Promise because otherwise awaiting the listeners
6825
- // would always yield some response (or undefined).
6826
- listenersFinished,
6827
- requestController.responsePromise
6828
- ]);
6829
- this.logger.info("all request listeners have been resolved!");
6830
- const mockedResponse2 = await requestController.responsePromise;
6831
- this.logger.info("event.respondWith called with:", mockedResponse2);
6832
- return mockedResponse2;
6833
- });
6868
+ responsePromise.resolve(response);
6869
+ };
6870
+ const errorWith = (reason) => {
6871
+ responsePromise.reject(reason);
6872
+ };
6873
+ const resolverResult = await until(
6874
+ async () => {
6875
+ const listenersFinished = emitAsync(this.emitter, "request", {
6876
+ request: interactiveRequest,
6877
+ requestId
6878
+ });
6879
+ await Promise.race([
6880
+ requestAborted,
6881
+ // Put the listeners invocation Promise in the same race condition
6882
+ // with the request abort Promise because otherwise awaiting the listeners
6883
+ // would always yield some response (or undefined).
6884
+ listenersFinished,
6885
+ requestController.responsePromise
6886
+ ]);
6887
+ this.logger.info("all request listeners have been resolved!");
6888
+ const mockedResponse2 = await requestController.responsePromise;
6889
+ this.logger.info("event.respondWith called with:", mockedResponse2);
6890
+ return mockedResponse2;
6891
+ }
6892
+ );
6834
6893
  if (requestAborted.state === "rejected") {
6835
- return Promise.reject(requestAborted.rejectionReason);
6894
+ this.logger.info(
6895
+ "request has been aborted:",
6896
+ requestAborted.rejectionReason
6897
+ );
6898
+ responsePromise.reject(requestAborted.rejectionReason);
6899
+ return responsePromise;
6836
6900
  }
6837
6901
  if (resolverResult.error) {
6838
- return Promise.reject(createNetworkError(resolverResult.error));
6902
+ this.logger.info(
6903
+ "request listerner threw an error:",
6904
+ resolverResult.error
6905
+ );
6906
+ if (resolverResult.error instanceof Response) {
6907
+ if (isResponseError(resolverResult.error)) {
6908
+ errorWith(createNetworkError(resolverResult.error));
6909
+ } else {
6910
+ respondWith(resolverResult.error);
6911
+ }
6912
+ }
6913
+ if (this.emitter.listenerCount("unhandledException") > 0) {
6914
+ await emitAsync(this.emitter, "unhandledException", {
6915
+ error: resolverResult.error,
6916
+ request,
6917
+ requestId,
6918
+ controller: {
6919
+ respondWith,
6920
+ errorWith
6921
+ }
6922
+ });
6923
+ if (responsePromise.state !== "pending") {
6924
+ return responsePromise;
6925
+ }
6926
+ }
6927
+ respondWith(createServerErrorResponse(resolverResult.error));
6928
+ return responsePromise;
6839
6929
  }
6840
6930
  const mockedResponse = resolverResult.data;
6841
6931
  if (mockedResponse && !((_a2 = request.signal) == null ? void 0 : _a2.aborted)) {
6842
6932
  this.logger.info("received mocked response:", mockedResponse);
6843
- if (isPropertyAccessible2(mockedResponse, "type") && mockedResponse.type === "error") {
6933
+ if (isResponseError(mockedResponse)) {
6844
6934
  this.logger.info(
6845
6935
  "received a network error response, rejecting the request promise..."
6846
6936
  );
6847
- return Promise.reject(createNetworkError(mockedResponse));
6937
+ errorWith(createNetworkError(mockedResponse));
6938
+ } else {
6939
+ respondWith(mockedResponse);
6848
6940
  }
6849
- const responseClone = mockedResponse.clone();
6850
- this.emitter.emit("response", {
6851
- response: responseClone,
6852
- isMockedResponse: true,
6853
- request: interactiveRequest,
6854
- requestId
6855
- });
6856
- Object.defineProperty(mockedResponse, "url", {
6857
- writable: false,
6858
- enumerable: true,
6859
- configurable: false,
6860
- value: request.url
6861
- });
6862
- return mockedResponse;
6941
+ return responsePromise;
6863
6942
  }
6864
6943
  this.logger.info("no mocked response received!");
6865
6944
  return pureFetch(request).then((response) => {
6866
- const responseClone = response.clone();
6867
- this.logger.info("original fetch performed", responseClone);
6868
- this.emitter.emit("response", {
6869
- response: responseClone,
6870
- isMockedResponse: false,
6871
- request: interactiveRequest,
6872
- requestId
6873
- });
6945
+ this.logger.info("original fetch performed", response);
6946
+ if (this.emitter.listenerCount("response") > 0) {
6947
+ this.logger.info('emitting the "response" event...');
6948
+ const responseClone = response.clone();
6949
+ this.emitter.emit("response", {
6950
+ response: responseClone,
6951
+ isMockedResponse: false,
6952
+ request: interactiveRequest,
6953
+ requestId
6954
+ });
6955
+ }
6874
6956
  return response;
6875
6957
  });
6876
6958
  };
@@ -6899,7 +6981,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
6899
6981
  });
6900
6982
  }
6901
6983
 
6902
- // node_modules/.pnpm/@mswjs+interceptors@0.27.1/node_modules/@mswjs/interceptors/lib/browser/chunk-VYFS2IF2.mjs
6984
+ // node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/chunk-732REFPX.mjs
6903
6985
  function concatArrayBuffer(left, right) {
6904
6986
  const result = new Uint8Array(left.byteLength + right.byteLength);
6905
6987
  result.set(left, 0);
@@ -7550,7 +7632,31 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
7550
7632
  "request listener threw an exception, aborting request...",
7551
7633
  resolverResult.error
7552
7634
  );
7553
- xhrRequestController.errorWith(resolverResult.error);
7635
+ if (resolverResult.error instanceof Response) {
7636
+ if (isResponseError(resolverResult.error)) {
7637
+ xhrRequestController.errorWith(new TypeError("Network error"));
7638
+ } else {
7639
+ this.respondWith(resolverResult.error);
7640
+ }
7641
+ return;
7642
+ }
7643
+ if (emitter.listenerCount("unhandledException") > 0) {
7644
+ await emitAsync(emitter, "unhandledException", {
7645
+ error: resolverResult.error,
7646
+ request,
7647
+ requestId,
7648
+ controller: {
7649
+ respondWith: xhrRequestController.respondWith.bind(xhrRequestController),
7650
+ errorWith: xhrRequestController.errorWith.bind(xhrRequestController)
7651
+ }
7652
+ });
7653
+ if (originalRequest.readyState > XMLHttpRequest.OPENED) {
7654
+ return;
7655
+ }
7656
+ }
7657
+ xhrRequestController.respondWith(
7658
+ createServerErrorResponse(resolverResult.error)
7659
+ );
7554
7660
  return;
7555
7661
  }
7556
7662
  const mockedResponse = resolverResult.data;
@@ -7560,7 +7666,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
7560
7666
  mockedResponse.status,
7561
7667
  mockedResponse.statusText
7562
7668
  );
7563
- if (mockedResponse.type === "error") {
7669
+ if (isResponseError(mockedResponse)) {
7564
7670
  this.logger.info(
7565
7671
  "received a network error response, rejecting the request promise..."
7566
7672
  );
@@ -7724,7 +7830,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
7724
7830
  }
7725
7831
  }
7726
7832
 
7727
- // node_modules/.pnpm/@mswjs+interceptors@0.27.1/node_modules/@mswjs/interceptors/lib/browser/interceptors/WebSocket/index.mjs
7833
+ // node_modules/.pnpm/@mswjs+interceptors@0.30.0/node_modules/@mswjs/interceptors/lib/browser/interceptors/WebSocket/index.mjs
7728
7834
  function bindEvent(target, event) {
7729
7835
  Object.defineProperties(event, {
7730
7836
  target: {
@@ -7775,6 +7881,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
7775
7881
  }
7776
7882
  };
7777
7883
  var kEmitter2 = Symbol("kEmitter");
7884
+ var kBoundListener = Symbol("kBoundListener");
7778
7885
  var WebSocketClientConnection = class {
7779
7886
  constructor(socket, transport) {
7780
7887
  this.socket = socket;
@@ -7806,7 +7913,16 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
7806
7913
  * Listen for the outgoing events from the connected WebSocket client.
7807
7914
  */
7808
7915
  addEventListener(type, listener, options) {
7809
- this[kEmitter2].addEventListener(type, listener, options);
7916
+ const boundListener = listener.bind(this.socket);
7917
+ Object.defineProperty(listener, kBoundListener, {
7918
+ value: boundListener,
7919
+ enumerable: false
7920
+ });
7921
+ this[kEmitter2].addEventListener(
7922
+ type,
7923
+ boundListener,
7924
+ options
7925
+ );
7810
7926
  }
7811
7927
  /**
7812
7928
  * Removes the listener for the given event.
@@ -7814,7 +7930,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
7814
7930
  removeEventListener(event, listener, options) {
7815
7931
  this[kEmitter2].removeEventListener(
7816
7932
  event,
7817
- listener,
7933
+ Reflect.get(listener, kBoundListener),
7818
7934
  options
7819
7935
  );
7820
7936
  }
@@ -7856,7 +7972,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
7856
7972
  Reflect.set(this, "readyState", this.CONNECTING);
7857
7973
  queueMicrotask(() => {
7858
7974
  Reflect.set(this, "readyState", this.OPEN);
7859
- this.protocol = protocols ? protocols[0] : "ws";
7975
+ this.protocol = typeof protocols === "string" ? protocols : Array.isArray(protocols) && protocols.length > 0 ? protocols[0] : "";
7860
7976
  this.dispatchEvent(bindEvent(this, new Event("open")));
7861
7977
  });
7862
7978
  }
@@ -7980,6 +8096,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
7980
8096
  return data.byteLength;
7981
8097
  }
7982
8098
  var kEmitter22 = Symbol("kEmitter");
8099
+ var kBoundListener2 = Symbol("kBoundListener");
7983
8100
  var WebSocketServerConnection = class {
7984
8101
  constructor(socket, transport, createConnection) {
7985
8102
  this.socket = socket;
@@ -8057,9 +8174,14 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
8057
8174
  * Listen for the incoming events from the original WebSocket server.
8058
8175
  */
8059
8176
  addEventListener(event, listener, options) {
8177
+ const boundListener = listener.bind(this.socket);
8178
+ Object.defineProperty(listener, kBoundListener2, {
8179
+ value: boundListener,
8180
+ enumerable: false
8181
+ });
8060
8182
  this[kEmitter22].addEventListener(
8061
8183
  event,
8062
- listener.bind(this.realWebSocket),
8184
+ boundListener,
8063
8185
  options
8064
8186
  );
8065
8187
  }
@@ -8069,7 +8191,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
8069
8191
  removeEventListener(event, listener, options) {
8070
8192
  this[kEmitter22].removeEventListener(
8071
8193
  event,
8072
- listener,
8194
+ Reflect.get(listener, kBoundListener2),
8073
8195
  options
8074
8196
  );
8075
8197
  }
@@ -8246,7 +8368,10 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
8246
8368
  socket,
8247
8369
  transport,
8248
8370
  createConnection
8249
- )
8371
+ ),
8372
+ info: {
8373
+ protocols
8374
+ }
8250
8375
  });
8251
8376
  });
8252
8377
  return socket;