msw 2.11.2 → 2.11.4

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 (119) hide show
  1. package/lib/browser/index.js +129 -114
  2. package/lib/browser/index.js.map +1 -1
  3. package/lib/browser/index.mjs +129 -114
  4. package/lib/browser/index.mjs.map +1 -1
  5. package/lib/core/{HttpResponse-BbwAqLE_.d.ts → HttpResponse-BpT5A_2L.d.ts} +1 -0
  6. package/lib/core/{HttpResponse-B4YmE-GJ.d.mts → HttpResponse-DGUjNQHG.d.mts} +1 -0
  7. package/lib/core/HttpResponse.d.mts +1 -1
  8. package/lib/core/HttpResponse.d.ts +1 -1
  9. package/lib/core/HttpResponse.js.map +1 -1
  10. package/lib/core/HttpResponse.mjs.map +1 -1
  11. package/lib/core/SetupApi.d.mts +1 -1
  12. package/lib/core/SetupApi.d.ts +1 -1
  13. package/lib/core/getResponse.d.mts +1 -1
  14. package/lib/core/getResponse.d.ts +1 -1
  15. package/lib/core/graphql.d.mts +1 -1
  16. package/lib/core/graphql.d.ts +1 -1
  17. package/lib/core/handlers/GraphQLHandler.d.mts +1 -1
  18. package/lib/core/handlers/GraphQLHandler.d.ts +1 -1
  19. package/lib/core/handlers/HttpHandler.d.mts +1 -1
  20. package/lib/core/handlers/HttpHandler.d.ts +1 -1
  21. package/lib/core/handlers/HttpHandler.js +0 -5
  22. package/lib/core/handlers/HttpHandler.js.map +1 -1
  23. package/lib/core/handlers/HttpHandler.mjs +1 -6
  24. package/lib/core/handlers/HttpHandler.mjs.map +1 -1
  25. package/lib/core/handlers/RequestHandler.d.mts +1 -1
  26. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  27. package/lib/core/http.d.mts +1 -1
  28. package/lib/core/http.d.ts +1 -1
  29. package/lib/core/index.d.mts +1 -1
  30. package/lib/core/index.d.ts +1 -1
  31. package/lib/core/passthrough.d.mts +1 -1
  32. package/lib/core/passthrough.d.ts +1 -1
  33. package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
  34. package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
  35. package/lib/core/utils/HttpResponse/decorators.js +1 -1
  36. package/lib/core/utils/HttpResponse/decorators.js.map +1 -1
  37. package/lib/core/utils/HttpResponse/decorators.mjs +1 -1
  38. package/lib/core/utils/HttpResponse/decorators.mjs.map +1 -1
  39. package/lib/core/utils/executeHandlers.d.mts +1 -1
  40. package/lib/core/utils/executeHandlers.d.ts +1 -1
  41. package/lib/core/utils/handleRequest.d.mts +1 -1
  42. package/lib/core/utils/handleRequest.d.ts +1 -1
  43. package/lib/core/utils/handleRequest.js +8 -8
  44. package/lib/core/utils/handleRequest.js.map +1 -1
  45. package/lib/core/utils/handleRequest.mjs +8 -8
  46. package/lib/core/utils/handleRequest.mjs.map +1 -1
  47. package/lib/core/utils/internal/isHandlerKind.d.mts +1 -1
  48. package/lib/core/utils/internal/isHandlerKind.d.ts +1 -1
  49. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +1 -1
  50. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +1 -1
  51. package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
  52. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  53. package/lib/core/utils/internal/requestHandlerUtils.d.mts +1 -1
  54. package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
  55. package/lib/core/utils/logging/serializeResponse.js +1 -1
  56. package/lib/core/utils/logging/serializeResponse.js.map +1 -1
  57. package/lib/core/utils/logging/serializeResponse.mjs +1 -1
  58. package/lib/core/utils/logging/serializeResponse.mjs.map +1 -1
  59. package/lib/core/utils/request/getRequestCookies.js +3 -13
  60. package/lib/core/utils/request/getRequestCookies.js.map +1 -1
  61. package/lib/core/utils/request/getRequestCookies.mjs +6 -3
  62. package/lib/core/utils/request/getRequestCookies.mjs.map +1 -1
  63. package/lib/core/utils/url/cleanUrl.d.mts +1 -2
  64. package/lib/core/utils/url/cleanUrl.d.ts +1 -2
  65. package/lib/core/utils/url/cleanUrl.js +1 -5
  66. package/lib/core/utils/url/cleanUrl.js.map +1 -1
  67. package/lib/core/utils/url/cleanUrl.mjs +1 -5
  68. package/lib/core/utils/url/cleanUrl.mjs.map +1 -1
  69. package/lib/core/ws/WebSocketIndexedDBClientStore.d.mts +1 -2
  70. package/lib/core/ws/WebSocketIndexedDBClientStore.d.ts +1 -2
  71. package/lib/core/ws/WebSocketIndexedDBClientStore.js.map +1 -1
  72. package/lib/core/ws/WebSocketIndexedDBClientStore.mjs.map +1 -1
  73. package/lib/core/ws/WebSocketMemoryClientStore.d.mts +1 -2
  74. package/lib/core/ws/WebSocketMemoryClientStore.d.ts +1 -2
  75. package/lib/core/ws/WebSocketMemoryClientStore.js.map +1 -1
  76. package/lib/core/ws/WebSocketMemoryClientStore.mjs.map +1 -1
  77. package/lib/core/ws/handleWebSocketEvent.d.mts +2 -3
  78. package/lib/core/ws/handleWebSocketEvent.d.ts +2 -3
  79. package/lib/core/ws/handleWebSocketEvent.js.map +1 -1
  80. package/lib/core/ws/handleWebSocketEvent.mjs.map +1 -1
  81. package/lib/core/ws/utils/getMessageLength.d.mts +1 -1
  82. package/lib/core/ws/utils/getMessageLength.d.ts +1 -1
  83. package/lib/core/ws/utils/getMessageLength.js.map +1 -1
  84. package/lib/core/ws/utils/getMessageLength.mjs.map +1 -1
  85. package/lib/iife/index.js +595 -636
  86. package/lib/iife/index.js.map +1 -1
  87. package/lib/mockServiceWorker.js +2 -1
  88. package/lib/shims/cookie.d.mts +7 -0
  89. package/lib/shims/cookie.d.ts +7 -0
  90. package/lib/shims/cookie.js +204 -0
  91. package/lib/shims/cookie.mjs +196 -0
  92. package/lib/shims/statuses.d.mts +6 -0
  93. package/lib/shims/statuses.d.ts +6 -0
  94. package/lib/shims/statuses.js +195 -0
  95. package/lib/shims/statuses.mjs +187 -0
  96. package/package.json +7 -8
  97. package/src/browser/setupWorker/glossary.ts +1 -5
  98. package/src/browser/setupWorker/setupWorker.ts +4 -9
  99. package/src/browser/setupWorker/start/createRequestListener.ts +4 -1
  100. package/src/browser/setupWorker/start/utils/getWorkerInstance.ts +17 -16
  101. package/src/browser/utils/{supportsReadableStreamTransfer.ts → supports.ts} +13 -0
  102. package/src/browser/utils/workerChannel.ts +13 -0
  103. package/src/core/HttpResponse.ts +1 -0
  104. package/src/core/handlers/HttpHandler.ts +1 -8
  105. package/src/core/utils/HttpResponse/decorators.ts +1 -1
  106. package/src/core/utils/handleRequest.ts +8 -8
  107. package/src/core/utils/logging/serializeResponse.ts +1 -1
  108. package/src/core/utils/request/getRequestCookies.ts +6 -3
  109. package/src/core/utils/url/cleanUrl.ts +0 -4
  110. package/src/core/ws/WebSocketIndexedDBClientStore.ts +1 -1
  111. package/src/core/ws/WebSocketMemoryClientStore.ts +1 -1
  112. package/src/core/ws/handleWebSocketEvent.ts +1 -1
  113. package/src/core/ws/utils/getMessageLength.ts +1 -1
  114. package/src/mockServiceWorker.js +1 -0
  115. package/src/shims/cookie.ts +7 -0
  116. package/src/shims/statuses.ts +6 -0
  117. package/src/tsconfig.src.json +1 -6
  118. package/src/browser/utils/deferNetworkRequestsUntil.test.ts +0 -48
  119. package/src/browser/utils/deferNetworkRequestsUntil.ts +0 -29
@@ -124,6 +124,72 @@ function isNodeProcess() {
124
124
  return false;
125
125
  }
126
126
 
127
+ // node_modules/.pnpm/@open-draft+deferred-promise@2.2.0/node_modules/@open-draft/deferred-promise/build/index.mjs
128
+ function createDeferredExecutor() {
129
+ const executor = (resolve, reject) => {
130
+ executor.state = "pending";
131
+ executor.resolve = (data) => {
132
+ if (executor.state !== "pending") {
133
+ return;
134
+ }
135
+ executor.result = data;
136
+ const onFulfilled = (value) => {
137
+ executor.state = "fulfilled";
138
+ return value;
139
+ };
140
+ return resolve(
141
+ data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled)
142
+ );
143
+ };
144
+ executor.reject = (reason) => {
145
+ if (executor.state !== "pending") {
146
+ return;
147
+ }
148
+ queueMicrotask(() => {
149
+ executor.state = "rejected";
150
+ });
151
+ return reject(executor.rejectionReason = reason);
152
+ };
153
+ };
154
+ return executor;
155
+ }
156
+ var DeferredPromise = class extends Promise {
157
+ #executor;
158
+ resolve;
159
+ reject;
160
+ constructor(executor = null) {
161
+ const deferredExecutor = createDeferredExecutor();
162
+ super((originalResolve, originalReject) => {
163
+ deferredExecutor(originalResolve, originalReject);
164
+ executor?.(deferredExecutor.resolve, deferredExecutor.reject);
165
+ });
166
+ this.#executor = deferredExecutor;
167
+ this.resolve = this.#executor.resolve;
168
+ this.reject = this.#executor.reject;
169
+ }
170
+ get state() {
171
+ return this.#executor.state;
172
+ }
173
+ get rejectionReason() {
174
+ return this.#executor.rejectionReason;
175
+ }
176
+ then(onFulfilled, onRejected) {
177
+ return this.#decorate(super.then(onFulfilled, onRejected));
178
+ }
179
+ catch(onRejected) {
180
+ return this.#decorate(super.catch(onRejected));
181
+ }
182
+ finally(onfinally) {
183
+ return this.#decorate(super.finally(onfinally));
184
+ }
185
+ #decorate(promise) {
186
+ return Object.defineProperties(promise, {
187
+ resolve: { configurable: true, value: this.resolve },
188
+ reject: { configurable: true, value: this.reject }
189
+ });
190
+ }
191
+ };
192
+
127
193
  // src/browser/setupWorker/start/utils/prepareStartHandler.ts
128
194
  var import_mergeRight = require("../core/utils/internal/mergeRight");
129
195
  var DEFAULT_START_OPTIONS = {
@@ -142,17 +208,16 @@ var DEFAULT_START_OPTIONS = {
142
208
  // src/browser/setupWorker/start/createStartHandler.ts
143
209
  var import_devUtils6 = require("../core/utils/internal/devUtils");
144
210
 
145
- // node_modules/.pnpm/@open-draft+until@2.1.0/node_modules/@open-draft/until/lib/index.mjs
146
- var until = async (promise) => {
211
+ // node_modules/.pnpm/until-async@3.0.2/node_modules/until-async/lib/index.js
212
+ async function until(callback) {
147
213
  try {
148
- const data = await promise().catch((error2) => {
214
+ return [null, await callback().catch((error2) => {
149
215
  throw error2;
150
- });
151
- return { error: null, data };
216
+ })];
152
217
  } catch (error2) {
153
- return { error: error2, data: null };
218
+ return [error2, null];
154
219
  }
155
- };
220
+ }
156
221
 
157
222
  // src/browser/setupWorker/start/utils/getWorkerInstance.ts
158
223
  var import_devUtils = require("../core/utils/internal/devUtils");
@@ -201,19 +266,17 @@ var getWorkerInstance = async (url, options = {}, findWorker) => {
201
266
  existingRegistration
202
267
  ];
203
268
  }
204
- const registrationResult = await until(
205
- async () => {
206
- const registration = await navigator.serviceWorker.register(url, options);
207
- return [
208
- // Compare existing worker registration by its worker URL,
209
- // to prevent irrelevant workers to resolve here (such as Codesandbox worker).
210
- getWorkerByRegistration(registration, absoluteWorkerUrl, findWorker),
211
- registration
212
- ];
213
- }
214
- );
215
- if (registrationResult.error) {
216
- const isWorkerMissing = registrationResult.error.message.includes("(404)");
269
+ const [registrationError, registrationResult] = await until(async () => {
270
+ const registration = await navigator.serviceWorker.register(url, options);
271
+ return [
272
+ // Compare existing worker registration by its worker URL,
273
+ // to prevent irrelevant workers to resolve here (such as Codesandbox worker).
274
+ getWorkerByRegistration(registration, absoluteWorkerUrl, findWorker),
275
+ registration
276
+ ];
277
+ });
278
+ if (registrationError) {
279
+ const isWorkerMissing = registrationError.message.includes("(404)");
217
280
  if (isWorkerMissing) {
218
281
  const scopeUrl = new URL(options?.scope || "/", location.href);
219
282
  throw new Error(
@@ -227,77 +290,11 @@ Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/i
227
290
  throw new Error(
228
291
  import_devUtils.devUtils.formatMessage(
229
292
  "Failed to register the Service Worker:\n\n%s",
230
- registrationResult.error.message
293
+ registrationError.message
231
294
  )
232
295
  );
233
296
  }
234
- return registrationResult.data;
235
- };
236
-
237
- // node_modules/.pnpm/@open-draft+deferred-promise@2.2.0/node_modules/@open-draft/deferred-promise/build/index.mjs
238
- function createDeferredExecutor() {
239
- const executor = (resolve, reject) => {
240
- executor.state = "pending";
241
- executor.resolve = (data) => {
242
- if (executor.state !== "pending") {
243
- return;
244
- }
245
- executor.result = data;
246
- const onFulfilled = (value) => {
247
- executor.state = "fulfilled";
248
- return value;
249
- };
250
- return resolve(
251
- data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled)
252
- );
253
- };
254
- executor.reject = (reason) => {
255
- if (executor.state !== "pending") {
256
- return;
257
- }
258
- queueMicrotask(() => {
259
- executor.state = "rejected";
260
- });
261
- return reject(executor.rejectionReason = reason);
262
- };
263
- };
264
- return executor;
265
- }
266
- var DeferredPromise = class extends Promise {
267
- #executor;
268
- resolve;
269
- reject;
270
- constructor(executor = null) {
271
- const deferredExecutor = createDeferredExecutor();
272
- super((originalResolve, originalReject) => {
273
- deferredExecutor(originalResolve, originalReject);
274
- executor?.(deferredExecutor.resolve, deferredExecutor.reject);
275
- });
276
- this.#executor = deferredExecutor;
277
- this.resolve = this.#executor.resolve;
278
- this.reject = this.#executor.reject;
279
- }
280
- get state() {
281
- return this.#executor.state;
282
- }
283
- get rejectionReason() {
284
- return this.#executor.rejectionReason;
285
- }
286
- then(onFulfilled, onRejected) {
287
- return this.#decorate(super.then(onFulfilled, onRejected));
288
- }
289
- catch(onRejected) {
290
- return this.#decorate(super.catch(onRejected));
291
- }
292
- finally(onfinally) {
293
- return this.#decorate(super.finally(onfinally));
294
- }
295
- #decorate(promise) {
296
- return Object.defineProperties(promise, {
297
- resolve: { configurable: true, value: this.resolve },
298
- reject: { configurable: true, value: this.reject }
299
- });
300
- }
297
+ return registrationResult;
301
298
  };
302
299
 
303
300
  // src/browser/setupWorker/start/utils/printStartMessage.ts
@@ -363,12 +360,30 @@ function deserializeRequest(serializedRequest) {
363
360
  });
364
361
  }
365
362
 
363
+ // src/browser/utils/supports.ts
364
+ function supportsServiceWorker() {
365
+ return typeof navigator !== "undefined" && "serviceWorker" in navigator && typeof location !== "undefined" && location.protocol !== "file:";
366
+ }
367
+ function supportsReadableStreamTransfer() {
368
+ try {
369
+ const stream = new ReadableStream({
370
+ start: (controller) => controller.close()
371
+ });
372
+ const message = new MessageChannel();
373
+ message.port1.postMessage(stream, [stream]);
374
+ return true;
375
+ } catch {
376
+ return false;
377
+ }
378
+ }
379
+
366
380
  // src/browser/setupWorker/start/createRequestListener.ts
367
381
  var import_RequestHandler = require("../core/handlers/RequestHandler");
368
382
  var import_handleRequest = require("../core/utils/handleRequest");
369
383
  var import_devUtils3 = require("../core/utils/internal/devUtils");
370
384
  var import_toResponseInit = require("../core/utils/toResponseInit");
371
385
  var import_isHandlerKind = require("../core/utils/internal/isHandlerKind");
386
+ var SUPPORTS_READABLE_STREAM_TRANSFER = supportsReadableStreamTransfer();
372
387
  var createRequestListener = (context, options) => {
373
388
  return async (event) => {
374
389
  if (!context.isMockingEnabled && context.workerStoppedAt && event.data.interceptedAt > context.workerStoppedAt) {
@@ -395,7 +410,7 @@ var createRequestListener = (context, options) => {
395
410
  const responseClone = response.clone();
396
411
  const responseCloneForLogs = response.clone();
397
412
  const responseInit = (0, import_toResponseInit.toResponseInit)(response);
398
- if (context.supports.readableStreamTransfer) {
413
+ if (SUPPORTS_READABLE_STREAM_TRANSFER) {
399
414
  const responseStreamOrNull = response.body;
400
415
  event.postMessage(
401
416
  "MOCK_RESPONSE",
@@ -1350,22 +1365,6 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
1350
1365
  var import_devUtils8 = require("../core/utils/internal/devUtils");
1351
1366
  var import_SetupApi = require("../core/SetupApi");
1352
1367
  var import_mergeRight2 = require("../core/utils/internal/mergeRight");
1353
-
1354
- // src/browser/utils/supportsReadableStreamTransfer.ts
1355
- function supportsReadableStreamTransfer() {
1356
- try {
1357
- const stream = new ReadableStream({
1358
- start: (controller) => controller.close()
1359
- });
1360
- const message = new MessageChannel();
1361
- message.port1.postMessage(stream, [stream]);
1362
- return true;
1363
- } catch {
1364
- return false;
1365
- }
1366
- }
1367
-
1368
- // src/browser/setupWorker/setupWorker.ts
1369
1368
  var import_webSocketInterceptor = require("../core/ws/webSocketInterceptor");
1370
1369
  var import_handleWebSocketEvent = require("../core/ws/handleWebSocketEvent");
1371
1370
  var import_attachWebSocketLogger = require("../core/ws/utils/attachWebSocketLogger");
@@ -1605,6 +1604,7 @@ var Emitter2 = class {
1605
1604
 
1606
1605
  // src/browser/utils/workerChannel.ts
1607
1606
  var import_isObject = require("../core/utils/internal/isObject");
1607
+ var SUPPORTS_SERVICE_WORKER = supportsServiceWorker();
1608
1608
  var WorkerEvent = class extends TypedEvent {
1609
1609
  #workerEvent;
1610
1610
  constructor(workerEvent) {
@@ -1634,6 +1634,9 @@ var WorkerChannel = class extends Emitter2 {
1634
1634
  constructor(options) {
1635
1635
  super();
1636
1636
  this.options = options;
1637
+ if (!SUPPORTS_SERVICE_WORKER) {
1638
+ return;
1639
+ }
1637
1640
  navigator.serviceWorker.addEventListener("message", async (event) => {
1638
1641
  const worker = await this.options.worker;
1639
1642
  if (event.source != null && event.source !== worker) {
@@ -1649,12 +1652,28 @@ var WorkerChannel = class extends Emitter2 {
1649
1652
  * This triggers the `message` event listener on ServiceWorkerGlobalScope.
1650
1653
  */
1651
1654
  postMessage(type) {
1655
+ invariant(
1656
+ SUPPORTS_SERVICE_WORKER,
1657
+ "Failed to post message on a WorkerChannel: the Service Worker API is unavailable in this context. This is likely an issue with MSW. Please report it on GitHub: https://github.com/mswjs/msw/issues"
1658
+ );
1652
1659
  this.options.worker.then((worker) => {
1653
1660
  worker.postMessage(type);
1654
1661
  });
1655
1662
  }
1656
1663
  };
1657
1664
 
1665
+ // node_modules/.pnpm/@open-draft+until@2.1.0/node_modules/@open-draft/until/lib/index.mjs
1666
+ var until2 = async (promise) => {
1667
+ try {
1668
+ const data = await promise().catch((error2) => {
1669
+ throw error2;
1670
+ });
1671
+ return { error: null, data };
1672
+ } catch (error2) {
1673
+ return { error: error2, data: null };
1674
+ }
1675
+ };
1676
+
1658
1677
  // node_modules/.pnpm/@mswjs+interceptors@0.39.1/node_modules/@mswjs/interceptors/lib/browser/chunk-L37TY7LC.mjs
1659
1678
  var InterceptorError = class extends Error {
1660
1679
  constructor(message) {
@@ -1817,7 +1836,7 @@ async function handleRequest2(options) {
1817
1836
  );
1818
1837
  }
1819
1838
  }
1820
- const result = await until(async () => {
1839
+ const result = await until2(async () => {
1821
1840
  const requestListenersPromise = emitAsync(options.emitter, "request", {
1822
1841
  requestId: options.requestId,
1823
1842
  request: options.request,
@@ -1853,7 +1872,7 @@ async function handleRequest2(options) {
1853
1872
  unhandledExceptionController[kResponsePromise].resolve(void 0);
1854
1873
  }
1855
1874
  });
1856
- const nextResult = await until(
1875
+ const nextResult = await until2(
1857
1876
  () => unhandledExceptionController[kResponsePromise]
1858
1877
  );
1859
1878
  if (nextResult.error) {
@@ -3027,11 +3046,7 @@ var SetupWorkerApi = class extends import_SetupApi.SetupApi {
3027
3046
  emitter: this.emitter,
3028
3047
  workerChannel: new WorkerChannel({
3029
3048
  worker: workerPromise
3030
- }),
3031
- supports: {
3032
- serviceWorkerApi: "serviceWorker" in navigator && location.protocol !== "file:",
3033
- readableStreamTransfer: supportsReadableStreamTransfer()
3034
- }
3049
+ })
3035
3050
  };
3036
3051
  }
3037
3052
  async start(options = {}) {
@@ -3070,7 +3085,7 @@ var SetupWorkerApi = class extends import_SetupApi.SetupApi {
3070
3085
  this.subscriptions.push(() => {
3071
3086
  import_webSocketInterceptor.webSocketInterceptor.dispose();
3072
3087
  });
3073
- if (!this.context.supports.serviceWorkerApi) {
3088
+ if (!supportsServiceWorker()) {
3074
3089
  const fallbackInterceptor = createFallbackRequestListener(
3075
3090
  this.context,
3076
3091
  this.context.startOptions
@@ -3101,7 +3116,7 @@ var SetupWorkerApi = class extends import_SetupApi.SetupApi {
3101
3116
  this.context.isMockingEnabled = false;
3102
3117
  this.context.workerStoppedAt = Date.now();
3103
3118
  this.context.emitter.removeAllListeners();
3104
- if (this.context.supports.serviceWorkerApi) {
3119
+ if (supportsServiceWorker()) {
3105
3120
  this.context.workerChannel.removeAllListeners("RESPONSE");
3106
3121
  window.clearInterval(this.context.keepAliveInterval);
3107
3122
  }