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
@@ -97,6 +97,72 @@ function isNodeProcess() {
97
97
  return false;
98
98
  }
99
99
 
100
+ // node_modules/.pnpm/@open-draft+deferred-promise@2.2.0/node_modules/@open-draft/deferred-promise/build/index.mjs
101
+ function createDeferredExecutor() {
102
+ const executor = (resolve, reject) => {
103
+ executor.state = "pending";
104
+ executor.resolve = (data) => {
105
+ if (executor.state !== "pending") {
106
+ return;
107
+ }
108
+ executor.result = data;
109
+ const onFulfilled = (value) => {
110
+ executor.state = "fulfilled";
111
+ return value;
112
+ };
113
+ return resolve(
114
+ data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled)
115
+ );
116
+ };
117
+ executor.reject = (reason) => {
118
+ if (executor.state !== "pending") {
119
+ return;
120
+ }
121
+ queueMicrotask(() => {
122
+ executor.state = "rejected";
123
+ });
124
+ return reject(executor.rejectionReason = reason);
125
+ };
126
+ };
127
+ return executor;
128
+ }
129
+ var DeferredPromise = class extends Promise {
130
+ #executor;
131
+ resolve;
132
+ reject;
133
+ constructor(executor = null) {
134
+ const deferredExecutor = createDeferredExecutor();
135
+ super((originalResolve, originalReject) => {
136
+ deferredExecutor(originalResolve, originalReject);
137
+ executor?.(deferredExecutor.resolve, deferredExecutor.reject);
138
+ });
139
+ this.#executor = deferredExecutor;
140
+ this.resolve = this.#executor.resolve;
141
+ this.reject = this.#executor.reject;
142
+ }
143
+ get state() {
144
+ return this.#executor.state;
145
+ }
146
+ get rejectionReason() {
147
+ return this.#executor.rejectionReason;
148
+ }
149
+ then(onFulfilled, onRejected) {
150
+ return this.#decorate(super.then(onFulfilled, onRejected));
151
+ }
152
+ catch(onRejected) {
153
+ return this.#decorate(super.catch(onRejected));
154
+ }
155
+ finally(onfinally) {
156
+ return this.#decorate(super.finally(onfinally));
157
+ }
158
+ #decorate(promise) {
159
+ return Object.defineProperties(promise, {
160
+ resolve: { configurable: true, value: this.resolve },
161
+ reject: { configurable: true, value: this.reject }
162
+ });
163
+ }
164
+ };
165
+
100
166
  // src/browser/setupWorker/start/utils/prepareStartHandler.ts
101
167
  import { mergeRight } from '../core/utils/internal/mergeRight.mjs';
102
168
  var DEFAULT_START_OPTIONS = {
@@ -115,17 +181,16 @@ var DEFAULT_START_OPTIONS = {
115
181
  // src/browser/setupWorker/start/createStartHandler.ts
116
182
  import { devUtils as devUtils6 } from '../core/utils/internal/devUtils.mjs';
117
183
 
118
- // node_modules/.pnpm/@open-draft+until@2.1.0/node_modules/@open-draft/until/lib/index.mjs
119
- var until = async (promise) => {
184
+ // node_modules/.pnpm/until-async@3.0.2/node_modules/until-async/lib/index.js
185
+ async function until(callback) {
120
186
  try {
121
- const data = await promise().catch((error2) => {
187
+ return [null, await callback().catch((error2) => {
122
188
  throw error2;
123
- });
124
- return { error: null, data };
189
+ })];
125
190
  } catch (error2) {
126
- return { error: error2, data: null };
191
+ return [error2, null];
127
192
  }
128
- };
193
+ }
129
194
 
130
195
  // src/browser/setupWorker/start/utils/getWorkerInstance.ts
131
196
  import { devUtils } from '../core/utils/internal/devUtils.mjs';
@@ -174,19 +239,17 @@ var getWorkerInstance = async (url, options = {}, findWorker) => {
174
239
  existingRegistration
175
240
  ];
176
241
  }
177
- const registrationResult = await until(
178
- async () => {
179
- const registration = await navigator.serviceWorker.register(url, options);
180
- return [
181
- // Compare existing worker registration by its worker URL,
182
- // to prevent irrelevant workers to resolve here (such as Codesandbox worker).
183
- getWorkerByRegistration(registration, absoluteWorkerUrl, findWorker),
184
- registration
185
- ];
186
- }
187
- );
188
- if (registrationResult.error) {
189
- const isWorkerMissing = registrationResult.error.message.includes("(404)");
242
+ const [registrationError, registrationResult] = await until(async () => {
243
+ const registration = await navigator.serviceWorker.register(url, options);
244
+ return [
245
+ // Compare existing worker registration by its worker URL,
246
+ // to prevent irrelevant workers to resolve here (such as Codesandbox worker).
247
+ getWorkerByRegistration(registration, absoluteWorkerUrl, findWorker),
248
+ registration
249
+ ];
250
+ });
251
+ if (registrationError) {
252
+ const isWorkerMissing = registrationError.message.includes("(404)");
190
253
  if (isWorkerMissing) {
191
254
  const scopeUrl = new URL(options?.scope || "/", location.href);
192
255
  throw new Error(
@@ -200,77 +263,11 @@ Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/i
200
263
  throw new Error(
201
264
  devUtils.formatMessage(
202
265
  "Failed to register the Service Worker:\n\n%s",
203
- registrationResult.error.message
266
+ registrationError.message
204
267
  )
205
268
  );
206
269
  }
207
- return registrationResult.data;
208
- };
209
-
210
- // node_modules/.pnpm/@open-draft+deferred-promise@2.2.0/node_modules/@open-draft/deferred-promise/build/index.mjs
211
- function createDeferredExecutor() {
212
- const executor = (resolve, reject) => {
213
- executor.state = "pending";
214
- executor.resolve = (data) => {
215
- if (executor.state !== "pending") {
216
- return;
217
- }
218
- executor.result = data;
219
- const onFulfilled = (value) => {
220
- executor.state = "fulfilled";
221
- return value;
222
- };
223
- return resolve(
224
- data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled)
225
- );
226
- };
227
- executor.reject = (reason) => {
228
- if (executor.state !== "pending") {
229
- return;
230
- }
231
- queueMicrotask(() => {
232
- executor.state = "rejected";
233
- });
234
- return reject(executor.rejectionReason = reason);
235
- };
236
- };
237
- return executor;
238
- }
239
- var DeferredPromise = class extends Promise {
240
- #executor;
241
- resolve;
242
- reject;
243
- constructor(executor = null) {
244
- const deferredExecutor = createDeferredExecutor();
245
- super((originalResolve, originalReject) => {
246
- deferredExecutor(originalResolve, originalReject);
247
- executor?.(deferredExecutor.resolve, deferredExecutor.reject);
248
- });
249
- this.#executor = deferredExecutor;
250
- this.resolve = this.#executor.resolve;
251
- this.reject = this.#executor.reject;
252
- }
253
- get state() {
254
- return this.#executor.state;
255
- }
256
- get rejectionReason() {
257
- return this.#executor.rejectionReason;
258
- }
259
- then(onFulfilled, onRejected) {
260
- return this.#decorate(super.then(onFulfilled, onRejected));
261
- }
262
- catch(onRejected) {
263
- return this.#decorate(super.catch(onRejected));
264
- }
265
- finally(onfinally) {
266
- return this.#decorate(super.finally(onfinally));
267
- }
268
- #decorate(promise) {
269
- return Object.defineProperties(promise, {
270
- resolve: { configurable: true, value: this.resolve },
271
- reject: { configurable: true, value: this.reject }
272
- });
273
- }
270
+ return registrationResult;
274
271
  };
275
272
 
276
273
  // src/browser/setupWorker/start/utils/printStartMessage.ts
@@ -336,12 +333,30 @@ function deserializeRequest(serializedRequest) {
336
333
  });
337
334
  }
338
335
 
336
+ // src/browser/utils/supports.ts
337
+ function supportsServiceWorker() {
338
+ return typeof navigator !== "undefined" && "serviceWorker" in navigator && typeof location !== "undefined" && location.protocol !== "file:";
339
+ }
340
+ function supportsReadableStreamTransfer() {
341
+ try {
342
+ const stream = new ReadableStream({
343
+ start: (controller) => controller.close()
344
+ });
345
+ const message = new MessageChannel();
346
+ message.port1.postMessage(stream, [stream]);
347
+ return true;
348
+ } catch {
349
+ return false;
350
+ }
351
+ }
352
+
339
353
  // src/browser/setupWorker/start/createRequestListener.ts
340
354
  import { RequestHandler } from '../core/handlers/RequestHandler.mjs';
341
355
  import { handleRequest } from '../core/utils/handleRequest.mjs';
342
356
  import { devUtils as devUtils3 } from '../core/utils/internal/devUtils.mjs';
343
357
  import { toResponseInit } from '../core/utils/toResponseInit.mjs';
344
358
  import { isHandlerKind } from '../core/utils/internal/isHandlerKind.mjs';
359
+ var SUPPORTS_READABLE_STREAM_TRANSFER = supportsReadableStreamTransfer();
345
360
  var createRequestListener = (context, options) => {
346
361
  return async (event) => {
347
362
  if (!context.isMockingEnabled && context.workerStoppedAt && event.data.interceptedAt > context.workerStoppedAt) {
@@ -368,7 +383,7 @@ var createRequestListener = (context, options) => {
368
383
  const responseClone = response.clone();
369
384
  const responseCloneForLogs = response.clone();
370
385
  const responseInit = toResponseInit(response);
371
- if (context.supports.readableStreamTransfer) {
386
+ if (SUPPORTS_READABLE_STREAM_TRANSFER) {
372
387
  const responseStreamOrNull = response.body;
373
388
  event.postMessage(
374
389
  "MOCK_RESPONSE",
@@ -1323,22 +1338,6 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
1323
1338
  import { devUtils as devUtils8 } from '../core/utils/internal/devUtils.mjs';
1324
1339
  import { SetupApi } from '../core/SetupApi.mjs';
1325
1340
  import { mergeRight as mergeRight2 } from '../core/utils/internal/mergeRight.mjs';
1326
-
1327
- // src/browser/utils/supportsReadableStreamTransfer.ts
1328
- function supportsReadableStreamTransfer() {
1329
- try {
1330
- const stream = new ReadableStream({
1331
- start: (controller) => controller.close()
1332
- });
1333
- const message = new MessageChannel();
1334
- message.port1.postMessage(stream, [stream]);
1335
- return true;
1336
- } catch {
1337
- return false;
1338
- }
1339
- }
1340
-
1341
- // src/browser/setupWorker/setupWorker.ts
1342
1341
  import { webSocketInterceptor } from '../core/ws/webSocketInterceptor.mjs';
1343
1342
  import { handleWebSocketEvent } from '../core/ws/handleWebSocketEvent.mjs';
1344
1343
  import { attachWebSocketLogger } from '../core/ws/utils/attachWebSocketLogger.mjs';
@@ -1578,6 +1577,7 @@ var Emitter2 = class {
1578
1577
 
1579
1578
  // src/browser/utils/workerChannel.ts
1580
1579
  import { isObject } from '../core/utils/internal/isObject.mjs';
1580
+ var SUPPORTS_SERVICE_WORKER = supportsServiceWorker();
1581
1581
  var WorkerEvent = class extends TypedEvent {
1582
1582
  #workerEvent;
1583
1583
  constructor(workerEvent) {
@@ -1607,6 +1607,9 @@ var WorkerChannel = class extends Emitter2 {
1607
1607
  constructor(options) {
1608
1608
  super();
1609
1609
  this.options = options;
1610
+ if (!SUPPORTS_SERVICE_WORKER) {
1611
+ return;
1612
+ }
1610
1613
  navigator.serviceWorker.addEventListener("message", async (event) => {
1611
1614
  const worker = await this.options.worker;
1612
1615
  if (event.source != null && event.source !== worker) {
@@ -1622,12 +1625,28 @@ var WorkerChannel = class extends Emitter2 {
1622
1625
  * This triggers the `message` event listener on ServiceWorkerGlobalScope.
1623
1626
  */
1624
1627
  postMessage(type) {
1628
+ invariant(
1629
+ SUPPORTS_SERVICE_WORKER,
1630
+ "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"
1631
+ );
1625
1632
  this.options.worker.then((worker) => {
1626
1633
  worker.postMessage(type);
1627
1634
  });
1628
1635
  }
1629
1636
  };
1630
1637
 
1638
+ // node_modules/.pnpm/@open-draft+until@2.1.0/node_modules/@open-draft/until/lib/index.mjs
1639
+ var until2 = async (promise) => {
1640
+ try {
1641
+ const data = await promise().catch((error2) => {
1642
+ throw error2;
1643
+ });
1644
+ return { error: null, data };
1645
+ } catch (error2) {
1646
+ return { error: error2, data: null };
1647
+ }
1648
+ };
1649
+
1631
1650
  // node_modules/.pnpm/@mswjs+interceptors@0.39.1/node_modules/@mswjs/interceptors/lib/browser/chunk-L37TY7LC.mjs
1632
1651
  var InterceptorError = class extends Error {
1633
1652
  constructor(message) {
@@ -1790,7 +1809,7 @@ async function handleRequest2(options) {
1790
1809
  );
1791
1810
  }
1792
1811
  }
1793
- const result = await until(async () => {
1812
+ const result = await until2(async () => {
1794
1813
  const requestListenersPromise = emitAsync(options.emitter, "request", {
1795
1814
  requestId: options.requestId,
1796
1815
  request: options.request,
@@ -1826,7 +1845,7 @@ async function handleRequest2(options) {
1826
1845
  unhandledExceptionController[kResponsePromise].resolve(void 0);
1827
1846
  }
1828
1847
  });
1829
- const nextResult = await until(
1848
+ const nextResult = await until2(
1830
1849
  () => unhandledExceptionController[kResponsePromise]
1831
1850
  );
1832
1851
  if (nextResult.error) {
@@ -3000,11 +3019,7 @@ var SetupWorkerApi = class extends SetupApi {
3000
3019
  emitter: this.emitter,
3001
3020
  workerChannel: new WorkerChannel({
3002
3021
  worker: workerPromise
3003
- }),
3004
- supports: {
3005
- serviceWorkerApi: "serviceWorker" in navigator && location.protocol !== "file:",
3006
- readableStreamTransfer: supportsReadableStreamTransfer()
3007
- }
3022
+ })
3008
3023
  };
3009
3024
  }
3010
3025
  async start(options = {}) {
@@ -3043,7 +3058,7 @@ var SetupWorkerApi = class extends SetupApi {
3043
3058
  this.subscriptions.push(() => {
3044
3059
  webSocketInterceptor.dispose();
3045
3060
  });
3046
- if (!this.context.supports.serviceWorkerApi) {
3061
+ if (!supportsServiceWorker()) {
3047
3062
  const fallbackInterceptor = createFallbackRequestListener(
3048
3063
  this.context,
3049
3064
  this.context.startOptions
@@ -3074,7 +3089,7 @@ var SetupWorkerApi = class extends SetupApi {
3074
3089
  this.context.isMockingEnabled = false;
3075
3090
  this.context.workerStoppedAt = Date.now();
3076
3091
  this.context.emitter.removeAllListeners();
3077
- if (this.context.supports.serviceWorkerApi) {
3092
+ if (supportsServiceWorker()) {
3078
3093
  this.context.workerChannel.removeAllListeners("RESPONSE");
3079
3094
  window.clearInterval(this.context.keepAliveInterval);
3080
3095
  }