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
@@ -534,7 +534,7 @@ var _Emitter = class {
534
534
  var Emitter = _Emitter;
535
535
  Emitter.defaultMaxListeners = 10;
536
536
 
537
- // node_modules/.pnpm/@mswjs+interceptors@0.41.3/node_modules/@mswjs/interceptors/lib/browser/createRequestId-DQcIlohW.mjs
537
+ // node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/createRequestId-DYCsFHOi.mjs
538
538
  var INTERNAL_REQUEST_ID_HEADER_NAME = "x-interceptors-internal-request-id";
539
539
  function getGlobalSymbol(symbol) {
540
540
  return globalThis[symbol] || void 0;
@@ -683,7 +683,7 @@ function createRequestId() {
683
683
  return Math.random().toString(16).slice(2);
684
684
  }
685
685
 
686
- // node_modules/.pnpm/@mswjs+interceptors@0.41.3/node_modules/@mswjs/interceptors/lib/browser/resolveWebSocketUrl-C83-x9iE.mjs
686
+ // node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/resolveWebSocketUrl-C83-x9iE.mjs
687
687
  function resolveWebSocketUrl(url) {
688
688
  if (typeof url === "string") return resolveWebSocketUrl(new URL(url, typeof location !== "undefined" ? location.href : void 0));
689
689
  if (url.protocol === "http:") url.protocol = "ws:";
@@ -694,15 +694,72 @@ function resolveWebSocketUrl(url) {
694
694
  return url.href;
695
695
  }
696
696
 
697
- // node_modules/.pnpm/@mswjs+interceptors@0.41.3/node_modules/@mswjs/interceptors/lib/browser/hasConfigurableGlobal-npXitu1-.mjs
697
+ // node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/hasConfigurableGlobal-C8zq1MCg.mjs
698
698
  async function emitAsync(emitter, eventName, ...data) {
699
699
  const listeners = emitter.listeners(eventName);
700
700
  if (listeners.length === 0) return;
701
701
  for (const listener of listeners) await listener.apply(emitter, data);
702
702
  }
703
+ var PatchesRegistry = class {
704
+ #replacements = /* @__PURE__ */ new Map();
705
+ applyPatch(owner, key, getNextValue) {
706
+ const ownerReplacements = this.#replacements.get(owner);
707
+ invariant(!ownerReplacements?.has(key), `Failed to replace a global value at "${String(key)}": already replaced.`);
708
+ const match = getDeepPropertyDescriptor(owner, key);
709
+ if (typeof match === "undefined") {
710
+ console.warn(`Failed to replace a global value at "${String(key)}": not a global value.`);
711
+ return () => {
712
+ };
713
+ }
714
+ if (match.descriptor.configurable) Object.defineProperty(owner, key, {
715
+ value: getNextValue(owner[key]),
716
+ enumerable: true,
717
+ configurable: true
718
+ });
719
+ else if (match.descriptor.writable) owner[key] = getNextValue(owner[key]);
720
+ else throw new Error(`Failed to patch a non-configurable non-writable property "${key.toString()}"`);
721
+ const restorePatch = () => {
722
+ const currentReplacements = this.#replacements.get(owner);
723
+ if (!currentReplacements?.has(key)) return;
724
+ if (match.owner === owner)
725
+ Object.defineProperty(match.owner, key, match.descriptor);
726
+ else
727
+ Reflect.deleteProperty(owner, key);
728
+ currentReplacements.delete(key);
729
+ if (currentReplacements.size === 0) this.#replacements.delete(owner);
730
+ };
731
+ if (ownerReplacements) ownerReplacements.set(key, restorePatch);
732
+ else this.#replacements.set(owner, /* @__PURE__ */ new Map([[key, restorePatch]]));
733
+ return restorePatch;
734
+ }
735
+ restoreAllPatches() {
736
+ const errors = [];
737
+ for (const [, ownerReplacements] of this.#replacements) for (const [, restorePatch] of ownerReplacements) try {
738
+ restorePatch();
739
+ } catch (error2) {
740
+ if (error2 instanceof Error) errors.push(error2);
741
+ else throw error2;
742
+ }
743
+ if (errors.length > 0) throw new AggregateError(errors, "FOO!");
744
+ }
745
+ };
746
+ var patchesRegistry = new PatchesRegistry();
747
+ function getDeepPropertyDescriptor(owner, key) {
748
+ let currentOwner = owner;
749
+ let descriptor;
750
+ while (currentOwner) {
751
+ descriptor = Object.getOwnPropertyDescriptor(currentOwner, key);
752
+ if (descriptor) return {
753
+ owner: currentOwner,
754
+ descriptor
755
+ };
756
+ currentOwner = Object.getPrototypeOf(currentOwner);
757
+ }
758
+ }
703
759
  function hasConfigurableGlobal(propertyName) {
704
- const descriptor = Object.getOwnPropertyDescriptor(globalThis, propertyName);
705
- if (typeof descriptor === "undefined") return false;
760
+ const match = getDeepPropertyDescriptor(globalThis, propertyName);
761
+ if (typeof match === "undefined") return false;
762
+ const { descriptor } = match;
706
763
  if (typeof descriptor.get === "function" && typeof descriptor.get() === "undefined") return false;
707
764
  if (typeof descriptor.get === "undefined" && descriptor.value == null) return false;
708
765
  if (typeof descriptor.set === "undefined" && !descriptor.configurable) {
@@ -778,7 +835,7 @@ var DeferredPromise = class extends Promise {
778
835
  }
779
836
  };
780
837
 
781
- // node_modules/.pnpm/@mswjs+interceptors@0.41.3/node_modules/@mswjs/interceptors/lib/browser/interceptors/WebSocket/index.mjs
838
+ // node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/interceptors/WebSocket/index.mjs
782
839
  function bindEvent(target, event) {
783
840
  Object.defineProperties(event, {
784
841
  target: {
@@ -794,8 +851,8 @@ function bindEvent(target, event) {
794
851
  });
795
852
  return event;
796
853
  }
797
- var kCancelable = Symbol("kCancelable");
798
- var kDefaultPrevented = Symbol("kDefaultPrevented");
854
+ var kCancelable = /* @__PURE__ */ Symbol("kCancelable");
855
+ var kDefaultPrevented = /* @__PURE__ */ Symbol("kDefaultPrevented");
799
856
  var CancelableMessageEvent = class extends MessageEvent {
800
857
  constructor(type, init) {
801
858
  super(type, init);
@@ -848,8 +905,8 @@ var CancelableCloseEvent = class extends CloseEvent {
848
905
  if (this.cancelable && !this[kDefaultPrevented]) this[kDefaultPrevented] = true;
849
906
  }
850
907
  };
851
- var kEmitter$1 = Symbol("kEmitter");
852
- var kBoundListener$1 = Symbol("kBoundListener");
908
+ var kEmitter$1 = /* @__PURE__ */ Symbol("kEmitter");
909
+ var kBoundListener$1 = /* @__PURE__ */ Symbol("kBoundListener");
853
910
  var WebSocketClientConnection = class {
854
911
  constructor(socket, transport) {
855
912
  this.socket = socket;
@@ -906,9 +963,9 @@ var WebSocketClientConnection = class {
906
963
  }
907
964
  };
908
965
  var WEBSOCKET_CLOSE_CODE_RANGE_ERROR = "InvalidAccessError: close code out of user configurable range";
909
- var kPassthroughPromise = Symbol("kPassthroughPromise");
910
- var kOnSend = Symbol("kOnSend");
911
- var kClose = Symbol("kClose");
966
+ var kPassthroughPromise = /* @__PURE__ */ Symbol("kPassthroughPromise");
967
+ var kOnSend = /* @__PURE__ */ Symbol("kOnSend");
968
+ var kClose = /* @__PURE__ */ Symbol("kClose");
912
969
  var WebSocketOverride = class extends EventTarget {
913
970
  static {
914
971
  this.CONNECTING = 0;
@@ -1028,9 +1085,9 @@ function getDataSize(data) {
1028
1085
  if (data instanceof Blob) return data.size;
1029
1086
  return data.byteLength;
1030
1087
  }
1031
- var kEmitter = Symbol("kEmitter");
1032
- var kBoundListener = Symbol("kBoundListener");
1033
- var kSend = Symbol("kSend");
1088
+ var kEmitter = /* @__PURE__ */ Symbol("kEmitter");
1089
+ var kBoundListener = /* @__PURE__ */ Symbol("kBoundListener");
1090
+ var kSend = /* @__PURE__ */ Symbol("kSend");
1034
1091
  var WebSocketServerConnection = class {
1035
1092
  constructor(client, transport, createConnection) {
1036
1093
  this.client = client;
@@ -1230,7 +1287,7 @@ var WebSocketClassTransport = class extends EventTarget {
1230
1287
  };
1231
1288
  var WebSocketInterceptor = class WebSocketInterceptor2 extends Interceptor {
1232
1289
  static {
1233
- this.symbol = Symbol("websocket");
1290
+ this.symbol = /* @__PURE__ */ Symbol.for("websocket-interceptor");
1234
1291
  }
1235
1292
  constructor() {
1236
1293
  super(WebSocketInterceptor2.symbol);
@@ -1239,7 +1296,7 @@ var WebSocketInterceptor = class WebSocketInterceptor2 extends Interceptor {
1239
1296
  return hasConfigurableGlobal("WebSocket");
1240
1297
  }
1241
1298
  setup() {
1242
- const originalWebSocketDescriptor = Object.getOwnPropertyDescriptor(globalThis, "WebSocket");
1299
+ const logger = this.logger.extend("setup");
1243
1300
  const WebSocketProxy = new Proxy(globalThis.WebSocket, { construct: (target, args, newTarget) => {
1244
1301
  const [url, protocols] = args;
1245
1302
  const createConnection = () => {
@@ -1275,13 +1332,9 @@ var WebSocketInterceptor = class WebSocketInterceptor2 extends Interceptor {
1275
1332
  });
1276
1333
  return socket;
1277
1334
  } });
1278
- Object.defineProperty(globalThis, "WebSocket", {
1279
- value: WebSocketProxy,
1280
- configurable: true
1281
- });
1282
- this.subscriptions.push(() => {
1283
- Object.defineProperty(globalThis, "WebSocket", originalWebSocketDescriptor);
1284
- });
1335
+ logger.info("patching global WebSocket...");
1336
+ this.subscriptions.push(patchesRegistry.applyPatch(globalThis, "WebSocket", () => WebSocketProxy));
1337
+ logger.info("global WebSocket patched!", globalThis.WebSocket.name);
1285
1338
  }
1286
1339
  };
1287
1340
 
@@ -1377,8 +1430,7 @@ var DeferredPromise2 = class extends Promise {
1377
1430
  }
1378
1431
  };
1379
1432
 
1380
- // node_modules/.pnpm/@mswjs+interceptors@0.41.3/node_modules/@mswjs/interceptors/lib/browser/getRawRequest-BTaNLFr0.mjs
1381
- var IS_PATCHED_MODULE = Symbol("isPatchedModule");
1433
+ // node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/getRawRequest-B1BqgWG6.mjs
1382
1434
  var InterceptorError = class InterceptorError2 extends Error {
1383
1435
  constructor(message) {
1384
1436
  super(message);
@@ -1460,6 +1512,68 @@ function getValueBySymbol(symbolName, source) {
1460
1512
  });
1461
1513
  if (symbol) return Reflect.get(source, symbol);
1462
1514
  }
1515
+ var FetchRequest = class FetchRequest2 extends Request {
1516
+ static #resolveProperty(input, init = {}, key) {
1517
+ return init[key] ?? (input instanceof Request ? input[key] : void 0);
1518
+ }
1519
+ /**
1520
+ * Check if the given request method is configurable.
1521
+ * @see https://fetch.spec.whatwg.org/#methods
1522
+ */
1523
+ static isConfigurableMethod(method) {
1524
+ return method !== "CONNECT" && method !== "TRACE" && method !== "TRACK";
1525
+ }
1526
+ static isMethodWithBody(method) {
1527
+ return method !== "HEAD" && method !== "GET" && FetchRequest2.isConfigurableMethod(method);
1528
+ }
1529
+ /**
1530
+ * Check if the given request `mode` is configurable.
1531
+ * @see https://fetch.spec.whatwg.org/#concept-request-mode
1532
+ */
1533
+ static isConfigurableMode(mode) {
1534
+ return mode !== "navigate" && mode !== "websocket" && mode !== "webtransport";
1535
+ }
1536
+ constructor(input, init) {
1537
+ const method = FetchRequest2.#resolveProperty(input, init, "method") || "GET";
1538
+ const safeMethod = FetchRequest2.isConfigurableMethod(method) ? method : "GET";
1539
+ const hasExplicitBody = init != null && "body" in init;
1540
+ const bodyInit = !FetchRequest2.isMethodWithBody(method) ? { body: void 0 } : hasExplicitBody ? { body: init.body } : {};
1541
+ const mode = FetchRequest2.#resolveProperty(input, init, "mode") ?? void 0;
1542
+ const safeMode = FetchRequest2.isConfigurableMode(mode) ? mode : void 0;
1543
+ super(input, {
1544
+ ...init || {},
1545
+ method: safeMethod,
1546
+ mode: safeMode,
1547
+ duplex: init?.duplex ?? (FetchRequest2.isMethodWithBody(method) ? "half" : void 0),
1548
+ ...bodyInit
1549
+ });
1550
+ if (method !== safeMethod) this.#setInternalProperty("method", method);
1551
+ if (method === "CONNECT") {
1552
+ const url = new URL(input instanceof Request ? input.url : input);
1553
+ let authority;
1554
+ if (url.protocol === "localhost:") authority = url.href;
1555
+ else authority = url.pathname.replace(/^\/+/, "");
1556
+ Object.defineProperty(this, "url", {
1557
+ get: () => authority,
1558
+ enumerable: true,
1559
+ configurable: true
1560
+ });
1561
+ }
1562
+ if (mode != null && mode !== safeMode) this.#setInternalProperty("mode", mode);
1563
+ }
1564
+ #setInternalProperty(key, value) {
1565
+ const internalState = getValueBySymbol("state", this);
1566
+ if (internalState) Reflect.set(internalState, key, value);
1567
+ else Object.defineProperty(this, key, {
1568
+ value,
1569
+ enumerable: true,
1570
+ configurable: true,
1571
+ writable: false
1572
+ });
1573
+ }
1574
+ };
1575
+ var kStatus = /* @__PURE__ */ Symbol("kStatus");
1576
+ var kUrl = /* @__PURE__ */ Symbol("kUrl");
1463
1577
  var FetchResponse = class FetchResponse2 extends Response {
1464
1578
  static {
1465
1579
  this.STATUS_CODES_WITHOUT_BODY = [
@@ -1492,6 +1606,20 @@ var FetchResponse = class FetchResponse2 extends Response {
1492
1606
  static isResponseWithBody(status) {
1493
1607
  return !FetchResponse2.STATUS_CODES_WITHOUT_BODY.includes(status);
1494
1608
  }
1609
+ static setStatus(status, response) {
1610
+ const internalState = getValueBySymbol("state", response);
1611
+ if (internalState) internalState.status = status;
1612
+ else Object.defineProperty(response, "status", {
1613
+ value: status,
1614
+ enumerable: true,
1615
+ configurable: true,
1616
+ writable: false
1617
+ });
1618
+ Object.defineProperty(response, kStatus, {
1619
+ value: status,
1620
+ enumerable: false
1621
+ });
1622
+ }
1495
1623
  static setUrl(url, response) {
1496
1624
  if (!url || url === "about:" || !canParseUrl(url)) return;
1497
1625
  const state = getValueBySymbol("state", response);
@@ -1502,6 +1630,10 @@ var FetchResponse = class FetchResponse2 extends Response {
1502
1630
  configurable: true,
1503
1631
  writable: false
1504
1632
  });
1633
+ Object.defineProperty(response, kUrl, {
1634
+ value: url,
1635
+ enumerable: false
1636
+ });
1505
1637
  }
1506
1638
  /**
1507
1639
  * Parses the given raw HTTP headers into a Fetch API `Headers` instance.
@@ -1511,6 +1643,27 @@ var FetchResponse = class FetchResponse2 extends Response {
1511
1643
  for (let line = 0; line < rawHeaders.length; line += 2) headers.append(rawHeaders[line], rawHeaders[line + 1]);
1512
1644
  return headers;
1513
1645
  }
1646
+ /**
1647
+ * Safely clones the given `Response`.
1648
+ * Coerces response clone exceptions into 500 mocked responses.
1649
+ * Handy in the environments that introduce arbitrary response
1650
+ * cloning restrictions, like "101 Switching Protocols" cloning
1651
+ * in "miniflare".
1652
+ */
1653
+ static clone(response) {
1654
+ try {
1655
+ return response.clone();
1656
+ } catch (error2) {
1657
+ return Response.json(error2 instanceof Error ? {
1658
+ name: error2.name,
1659
+ message: error2.message,
1660
+ stack: error2.stack
1661
+ } : {}, {
1662
+ status: 500,
1663
+ statusText: "Unclonable Response"
1664
+ });
1665
+ }
1666
+ }
1514
1667
  constructor(body, init = {}) {
1515
1668
  const status = init.status ?? 200;
1516
1669
  const safeStatus = FetchResponse2.isConfigurableStatusCode(status) ? status : 200;
@@ -1520,25 +1673,24 @@ var FetchResponse = class FetchResponse2 extends Response {
1520
1673
  statusText: init.statusText,
1521
1674
  headers: init.headers
1522
1675
  });
1523
- if (status !== safeStatus) {
1524
- const state = getValueBySymbol("state", this);
1525
- if (state) state.status = status;
1526
- else Object.defineProperty(this, "status", {
1527
- value: status,
1528
- enumerable: true,
1529
- configurable: true,
1530
- writable: false
1531
- });
1532
- }
1676
+ if (status !== safeStatus) FetchResponse2.setStatus(status, this);
1533
1677
  FetchResponse2.setUrl(init.url, this);
1534
1678
  }
1679
+ clone() {
1680
+ const clonedResponse = super.clone();
1681
+ const customStatus = Reflect.get(this, kStatus);
1682
+ if (customStatus) FetchResponse2.setStatus(customStatus, clonedResponse);
1683
+ const customUrl = Reflect.get(this, kUrl);
1684
+ if (customUrl) FetchResponse2.setUrl(customUrl, clonedResponse);
1685
+ return clonedResponse;
1686
+ }
1535
1687
  };
1536
- var kRawRequest = Symbol("kRawRequest");
1688
+ var kRawRequest = /* @__PURE__ */ Symbol("kRawRequest");
1537
1689
  function setRawRequest(request, rawRequest) {
1538
1690
  Reflect.set(request, kRawRequest, rawRequest);
1539
1691
  }
1540
1692
 
1541
- // node_modules/.pnpm/@mswjs+interceptors@0.41.3/node_modules/@mswjs/interceptors/lib/browser/bufferUtils-BiiO6HZv.mjs
1693
+ // node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/bufferUtils-BiiO6HZv.mjs
1542
1694
  var encoder = new TextEncoder();
1543
1695
  function encodeBuffer(text) {
1544
1696
  return encoder.encode(text);
@@ -1726,9 +1878,9 @@ var LensList = class {
1726
1878
  };
1727
1879
 
1728
1880
  // node_modules/.pnpm/rettime@0.11.11/node_modules/rettime/build/index.mjs
1729
- var kDefaultPrevented2 = Symbol("kDefaultPrevented");
1730
- var kPropagationStopped = Symbol("kPropagationStopped");
1731
- var kImmediatePropagationStopped = Symbol("kImmediatePropagationStopped");
1881
+ var kDefaultPrevented2 = /* @__PURE__ */ Symbol("kDefaultPrevented");
1882
+ var kPropagationStopped = /* @__PURE__ */ Symbol("kPropagationStopped");
1883
+ var kImmediatePropagationStopped = /* @__PURE__ */ Symbol("kImmediatePropagationStopped");
1732
1884
  var TypedEvent = class extends MessageEvent {
1733
1885
  /**
1734
1886
  * @note Keep a placeholder property with the return type
@@ -2492,7 +2644,7 @@ var until2 = async (promise) => {
2492
2644
  }
2493
2645
  };
2494
2646
 
2495
- // node_modules/.pnpm/@mswjs+interceptors@0.41.3/node_modules/@mswjs/interceptors/lib/browser/handleRequest-D7kpTI5U.mjs
2647
+ // node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/handleRequest-CPPgsG7s.mjs
2496
2648
  function isObject2(value, loose = false) {
2497
2649
  return loose ? Object.prototype.toString.call(value).startsWith("[object ") : Object.prototype.toString.call(value) === "[object Object]";
2498
2650
  }
@@ -2556,14 +2708,15 @@ async function handleRequest(options) {
2556
2708
  return false;
2557
2709
  };
2558
2710
  const requestAbortPromise = new DeferredPromise();
2711
+ const onAbort = () => {
2712
+ requestAbortPromise.reject(options.request.signal?.reason);
2713
+ };
2559
2714
  if (options.request.signal) {
2560
2715
  if (options.request.signal.aborted) {
2561
2716
  await options.controller.errorWith(options.request.signal.reason);
2562
2717
  return;
2563
2718
  }
2564
- options.request.signal.addEventListener("abort", () => {
2565
- requestAbortPromise.reject(options.request.signal.reason);
2566
- }, { once: true });
2719
+ options.request.signal.addEventListener("abort", onAbort, { once: true });
2567
2720
  }
2568
2721
  const result = await until2(async () => {
2569
2722
  const requestListenersPromise = emitAsync(options.emitter, "request", {
@@ -2577,6 +2730,7 @@ async function handleRequest(options) {
2577
2730
  options.controller.handled
2578
2731
  ]);
2579
2732
  });
2733
+ options.request.signal?.removeEventListener("abort", onAbort);
2580
2734
  if (requestAbortPromise.state === "rejected") {
2581
2735
  await options.controller.errorWith(requestAbortPromise.rejectionReason);
2582
2736
  return;
@@ -2609,7 +2763,7 @@ async function handleRequest(options) {
2609
2763
  return options.controller.handled;
2610
2764
  }
2611
2765
 
2612
- // node_modules/.pnpm/@mswjs+interceptors@0.41.3/node_modules/@mswjs/interceptors/lib/browser/fetch-DdKEdDOR.mjs
2766
+ // node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/fetch-5IMPqr9e.mjs
2613
2767
  function createNetworkError(cause) {
2614
2768
  return Object.assign(/* @__PURE__ */ new TypeError("Failed to fetch"), { cause });
2615
2769
  }
@@ -2620,7 +2774,7 @@ var REQUEST_BODY_HEADERS = [
2620
2774
  "content-type",
2621
2775
  "content-length"
2622
2776
  ];
2623
- var kRedirectCount = Symbol("kRedirectCount");
2777
+ var kRedirectCount = /* @__PURE__ */ Symbol("kRedirectCount");
2624
2778
  async function followFetchRedirect(request, response) {
2625
2779
  if (response.status !== 303 && request.body != null) return Promise.reject(createNetworkError());
2626
2780
  const requestUrl = new URL(request.url);
@@ -2702,7 +2856,7 @@ function decompressResponse(response) {
2702
2856
  }
2703
2857
  var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
2704
2858
  static {
2705
- this.symbol = Symbol("fetch");
2859
+ this.symbol = /* @__PURE__ */ Symbol.for("fetch-interceptor");
2706
2860
  }
2707
2861
  constructor() {
2708
2862
  super(FetchInterceptor2.symbol);
@@ -2711,12 +2865,11 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
2711
2865
  return hasConfigurableGlobal("fetch");
2712
2866
  }
2713
2867
  async setup() {
2868
+ const logger = this.logger.extend("setup");
2714
2869
  const pureFetch = globalThis.fetch;
2715
- invariant(!pureFetch[IS_PATCHED_MODULE], 'Failed to patch the "fetch" module: already patched.');
2716
- globalThis.fetch = async (input, init) => {
2870
+ const fetchProxy = async (input, init) => {
2717
2871
  const requestId = createRequestId();
2718
- const resolvedInput = typeof input === "string" && typeof location !== "undefined" && !canParseUrl(input) ? new URL(input, location.href) : input;
2719
- const request = new Request(resolvedInput, init);
2872
+ const request = new FetchRequest(typeof input === "string" && typeof location !== "undefined" && !canParseUrl(input) ? new URL(input, location.href) : input, init);
2720
2873
  if (input instanceof Request) setRawRequest(request, input);
2721
2874
  const responsePromise = new DeferredPromise();
2722
2875
  const controller = new RequestController(request, {
@@ -2728,7 +2881,7 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
2728
2881
  this.logger.info("original fetch performed", originalResponse);
2729
2882
  if (this.emitter.listenerCount("response") > 0) {
2730
2883
  this.logger.info('emitting the "response" event...');
2731
- const responseClone = originalResponse.clone();
2884
+ const responseClone = FetchResponse.clone(originalResponse);
2732
2885
  await emitAsync(this.emitter, "response", {
2733
2886
  response: responseClone,
2734
2887
  isMockedResponse: false,
@@ -2745,9 +2898,12 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
2745
2898
  return;
2746
2899
  }
2747
2900
  this.logger.info("received mocked response!", { rawResponse });
2748
- const decompressedStream = decompressResponse(rawResponse);
2749
- const response = decompressedStream === null ? rawResponse : new FetchResponse(decompressedStream, rawResponse);
2750
- FetchResponse.setUrl(request.url, response);
2901
+ const response = new FetchResponse(decompressResponse(rawResponse) || rawResponse.body, {
2902
+ url: request.url,
2903
+ status: rawResponse.status,
2904
+ statusText: rawResponse.statusText,
2905
+ headers: rawResponse.headers
2906
+ });
2751
2907
  if (FetchResponse.isRedirectResponse(response.status)) {
2752
2908
  if (request.redirect === "error") {
2753
2909
  responsePromise.reject(createNetworkError("unexpected redirect"));
@@ -2765,7 +2921,7 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
2765
2921
  if (this.emitter.listenerCount("response") > 0) {
2766
2922
  this.logger.info('emitting the "response" event...');
2767
2923
  await emitAsync(this.emitter, "response", {
2768
- response: response.clone(),
2924
+ response: FetchResponse.clone(response),
2769
2925
  isMockedResponse: true,
2770
2926
  request,
2771
2927
  requestId
@@ -2789,20 +2945,13 @@ var FetchInterceptor = class FetchInterceptor2 extends Interceptor {
2789
2945
  });
2790
2946
  return responsePromise;
2791
2947
  };
2792
- Object.defineProperty(globalThis.fetch, IS_PATCHED_MODULE, {
2793
- enumerable: true,
2794
- configurable: true,
2795
- value: true
2796
- });
2797
- this.subscriptions.push(() => {
2798
- Object.defineProperty(globalThis.fetch, IS_PATCHED_MODULE, { value: void 0 });
2799
- globalThis.fetch = pureFetch;
2800
- this.logger.info('restored native "globalThis.fetch"!', globalThis.fetch.name);
2801
- });
2948
+ logger.info("patching global fetch...");
2949
+ this.subscriptions.push(patchesRegistry.applyPatch(globalThis, "fetch", () => fetchProxy));
2950
+ logger.info("global fetch patched!", globalThis.fetch.name);
2802
2951
  }
2803
2952
  };
2804
2953
 
2805
- // node_modules/.pnpm/@mswjs+interceptors@0.41.3/node_modules/@mswjs/interceptors/lib/browser/XMLHttpRequest-BvxZV0WU.mjs
2954
+ // node_modules/.pnpm/@mswjs+interceptors@0.41.9/node_modules/@mswjs/interceptors/lib/browser/XMLHttpRequest-DrZAf3w6.mjs
2806
2955
  function concatArrayBuffer(left, right) {
2807
2956
  const result = new Uint8Array(left.byteLength + right.byteLength);
2808
2957
  result.set(left, 0);
@@ -2968,9 +3117,9 @@ async function getBodyByteLength(input) {
2968
3117
  if (explicitContentLength != null && explicitContentLength !== "") return Number(explicitContentLength);
2969
3118
  return (await input.arrayBuffer()).byteLength;
2970
3119
  }
2971
- var kIsRequestHandled = Symbol("kIsRequestHandled");
3120
+ var kIsRequestHandled = /* @__PURE__ */ Symbol("kIsRequestHandled");
2972
3121
  var IS_NODE2 = isNodeProcess();
2973
- var kFetchRequest = Symbol("kFetchRequest");
3122
+ var kFetchRequest = /* @__PURE__ */ Symbol("kFetchRequest");
2974
3123
  var XMLHttpRequestController = class {
2975
3124
  constructor(initialRequest, logger) {
2976
3125
  this.initialRequest = initialRequest;
@@ -3308,7 +3457,7 @@ var XMLHttpRequestController = class {
3308
3457
  toFetchApiRequest(body) {
3309
3458
  this.logger.info("converting request to a Fetch API Request...");
3310
3459
  const resolvedBody = body instanceof Document ? body.documentElement.innerText : body;
3311
- const fetchRequest = new Request(this.url.href, {
3460
+ const fetchRequest = new FetchRequest(this.url.href, {
3312
3461
  method: this.method,
3313
3462
  headers: this.requestHeaders,
3314
3463
  credentials: this.request.withCredentials ? "include" : "same-origin",
@@ -3393,34 +3542,24 @@ function createXMLHttpRequestProxy({ emitter, logger }) {
3393
3542
  }
3394
3543
  var XMLHttpRequestInterceptor = class XMLHttpRequestInterceptor2 extends Interceptor {
3395
3544
  static {
3396
- this.interceptorSymbol = Symbol("xhr");
3545
+ this.symbol = /* @__PURE__ */ Symbol.for("xhr-interceptor");
3397
3546
  }
3398
3547
  constructor() {
3399
- super(XMLHttpRequestInterceptor2.interceptorSymbol);
3548
+ super(XMLHttpRequestInterceptor2.symbol);
3400
3549
  }
3401
3550
  checkEnvironment() {
3402
3551
  return hasConfigurableGlobal("XMLHttpRequest");
3403
3552
  }
3404
3553
  setup() {
3405
3554
  const logger = this.logger.extend("setup");
3406
- logger.info('patching "XMLHttpRequest" module...');
3407
- const PureXMLHttpRequest = globalThis.XMLHttpRequest;
3408
- invariant(!PureXMLHttpRequest[IS_PATCHED_MODULE], 'Failed to patch the "XMLHttpRequest" module: already patched.');
3409
- globalThis.XMLHttpRequest = createXMLHttpRequestProxy({
3410
- emitter: this.emitter,
3411
- logger: this.logger
3412
- });
3413
- logger.info('native "XMLHttpRequest" module patched!', globalThis.XMLHttpRequest.name);
3414
- Object.defineProperty(globalThis.XMLHttpRequest, IS_PATCHED_MODULE, {
3415
- enumerable: true,
3416
- configurable: true,
3417
- value: true
3418
- });
3419
- this.subscriptions.push(() => {
3420
- Object.defineProperty(globalThis.XMLHttpRequest, IS_PATCHED_MODULE, { value: void 0 });
3421
- globalThis.XMLHttpRequest = PureXMLHttpRequest;
3422
- logger.info('native "XMLHttpRequest" module restored!', globalThis.XMLHttpRequest.name);
3423
- });
3555
+ logger.info("patching global XMLHttpRequest...");
3556
+ this.subscriptions.push(patchesRegistry.applyPatch(globalThis, "XMLHttpRequest", () => {
3557
+ return createXMLHttpRequestProxy({
3558
+ emitter: this.emitter,
3559
+ logger: this.logger
3560
+ });
3561
+ }));
3562
+ logger.info("global XMLHttpRequest patched!", globalThis.XMLHttpRequest.name);
3424
3563
  }
3425
3564
  };
3426
3565
 
@@ -3434,6 +3573,7 @@ var FallbackHttpSource = class extends InterceptorSource {
3434
3573
  });
3435
3574
  this.options = options;
3436
3575
  }
3576
+ options;
3437
3577
  enable() {
3438
3578
  super.enable();
3439
3579
  if (!this.options.quiet) {