msw 0.42.1 → 0.43.0

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.
package/lib/index.js CHANGED
@@ -424,17 +424,18 @@ async function enableMocking(context, options) {
424
424
  });
425
425
  }
426
426
 
427
- // src/utils/createBroadcastChannel.ts
428
- var createBroadcastChannel = (event) => {
427
+ // src/setupWorker/start/utils/createMessageChannel.ts
428
+ function createMessageChannel(event) {
429
429
  const port = event.ports[0];
430
430
  return {
431
431
  send(message) {
432
- if (port) {
433
- port.postMessage(message);
432
+ if (!port) {
433
+ return;
434
434
  }
435
+ port.postMessage(message);
435
436
  }
436
437
  };
437
- };
438
+ }
438
439
 
439
440
  // src/utils/NetworkError.ts
440
441
  var NetworkError = class extends Error {
@@ -1309,7 +1310,7 @@ function readResponseCookies(request, response2) {
1309
1310
 
1310
1311
  // src/utils/handleRequest.ts
1311
1312
  async function handleRequest(request, handlers, options, emitter, handleRequestOptions) {
1312
- var _a, _b, _c, _d;
1313
+ var _a, _b, _c, _d, _e, _f, _g;
1313
1314
  emitter.emit("request:start", request);
1314
1315
  if (request.headers.get("x-msw-bypass") === "true") {
1315
1316
  emitter.emit("request:end", request);
@@ -1347,38 +1348,77 @@ async function handleRequest(request, handlers, options, emitter, handleRequestO
1347
1348
  }
1348
1349
  readResponseCookies(request, response2);
1349
1350
  emitter.emit("request:match", request);
1350
- return new Promise((resolve) => {
1351
- var _a2, _b2, _c2;
1352
- const requiredLookupResult = lookupResult;
1353
- const transformedResponse = ((_a2 = handleRequestOptions == null ? void 0 : handleRequestOptions.transformResponse) == null ? void 0 : _a2.call(handleRequestOptions, response2)) || response2;
1354
- (_b2 = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponse) == null ? void 0 : _b2.call(handleRequestOptions, transformedResponse, requiredLookupResult);
1355
- setTimeout(() => {
1356
- var _a3;
1357
- (_a3 = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponseSent) == null ? void 0 : _a3.call(handleRequestOptions, transformedResponse, requiredLookupResult);
1358
- emitter.emit("request:end", request);
1359
- resolve(transformedResponse);
1360
- }, (_c2 = response2.delay) != null ? _c2 : 0);
1351
+ const requiredLookupResult = lookupResult;
1352
+ const transformedResponse = ((_e = handleRequestOptions == null ? void 0 : handleRequestOptions.transformResponse) == null ? void 0 : _e.call(handleRequestOptions, response2)) || response2;
1353
+ (_f = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponse) == null ? void 0 : _f.call(handleRequestOptions, transformedResponse, requiredLookupResult);
1354
+ (_g = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponseSent) == null ? void 0 : _g.call(handleRequestOptions, transformedResponse, requiredLookupResult);
1355
+ emitter.emit("request:end", request);
1356
+ return transformedResponse;
1357
+ }
1358
+
1359
+ // src/setupWorker/start/utils/streamResponse.ts
1360
+ var import_outvariant3 = require("outvariant");
1361
+ async function streamResponse(operationChannel, messageChannel, mockedResponse) {
1362
+ const response2 = new Response(mockedResponse.body, mockedResponse);
1363
+ delete mockedResponse.body;
1364
+ messageChannel.send({
1365
+ type: "MOCK_RESPONSE_START",
1366
+ payload: mockedResponse
1361
1367
  });
1368
+ (0, import_outvariant3.invariant)(response2.body, "Failed to stream mocked response with no body");
1369
+ const reader = response2.body.getReader();
1370
+ while (true) {
1371
+ const { done, value } = await reader.read();
1372
+ if (!done) {
1373
+ operationChannel.postMessage({
1374
+ type: "MOCK_RESPONSE_CHUNK",
1375
+ payload: value
1376
+ });
1377
+ continue;
1378
+ }
1379
+ operationChannel.postMessage({
1380
+ type: "MOCK_RESPONSE_END"
1381
+ });
1382
+ operationChannel.close();
1383
+ reader.releaseLock();
1384
+ break;
1385
+ }
1362
1386
  }
1363
1387
 
1364
- // src/utils/worker/createRequestListener.ts
1388
+ // src/utils/internal/StrictBroadcastChannel.ts
1389
+ var ParentClass = typeof BroadcastChannel == "undefined" ? class UnsupportedEnvironment {
1390
+ constructor() {
1391
+ throw new Error("Cannot construct BroadcastChannel in a non-browser environment");
1392
+ }
1393
+ } : BroadcastChannel;
1394
+ var StrictBroadcastChannel = class extends ParentClass {
1395
+ postMessage(message) {
1396
+ return super.postMessage(message);
1397
+ }
1398
+ };
1399
+
1400
+ // src/setupWorker/start/createRequestListener.ts
1365
1401
  var createRequestListener = (context, options) => {
1366
1402
  return async (event, message) => {
1367
- const channel = createBroadcastChannel(event);
1403
+ const messageChannel = createMessageChannel(event);
1368
1404
  try {
1369
1405
  const request = parseWorkerRequest(message.payload);
1406
+ const operationChannel = new StrictBroadcastChannel(`msw-response-stream-${request.id}`);
1370
1407
  await handleRequest(request, context.requestHandlers, options, context.emitter, {
1371
1408
  transformResponse,
1372
1409
  onPassthroughResponse() {
1373
- return channel.send({
1410
+ return messageChannel.send({
1374
1411
  type: "MOCK_NOT_FOUND"
1375
1412
  });
1376
1413
  },
1377
1414
  onMockedResponse(response2) {
1378
- channel.send({
1379
- type: "MOCK_SUCCESS",
1380
- payload: response2
1381
- });
1415
+ if (response2.body == null) {
1416
+ return messageChannel.send({
1417
+ type: "MOCK_RESPONSE",
1418
+ payload: response2
1419
+ });
1420
+ }
1421
+ streamResponse(operationChannel, messageChannel, response2);
1382
1422
  },
1383
1423
  onMockedResponseSent(response2, { handler, publicRequest, parsedRequest }) {
1384
1424
  if (options.quiet) {
@@ -1389,7 +1429,7 @@ var createRequestListener = (context, options) => {
1389
1429
  });
1390
1430
  } catch (error2) {
1391
1431
  if (error2 instanceof NetworkError) {
1392
- return channel.send({
1432
+ return messageChannel.send({
1393
1433
  type: "NETWORK_ERROR",
1394
1434
  payload: {
1395
1435
  name: error2.name,
@@ -1398,7 +1438,7 @@ var createRequestListener = (context, options) => {
1398
1438
  });
1399
1439
  }
1400
1440
  if (error2 instanceof Error) {
1401
- channel.send({
1441
+ messageChannel.send({
1402
1442
  type: "INTERNAL_ERROR",
1403
1443
  payload: {
1404
1444
  status: 500,
@@ -1427,8 +1467,8 @@ function transformResponse(response2) {
1427
1467
  async function requestIntegrityCheck(context, serviceWorker) {
1428
1468
  context.workerChannel.send("INTEGRITY_CHECK_REQUEST");
1429
1469
  const { payload: actualChecksum } = await context.events.once("INTEGRITY_CHECK_RESPONSE");
1430
- if (actualChecksum !== "02f4ad4a2797f85668baf196e553d929") {
1431
- throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"02f4ad4a2797f85668baf196e553d929"}).`);
1470
+ if (actualChecksum !== "c9450df6e4dc5e45740c3b0b640727a2") {
1471
+ throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"c9450df6e4dc5e45740c3b0b640727a2"}).`);
1432
1472
  }
1433
1473
  return serviceWorker;
1434
1474
  }
@@ -1451,7 +1491,7 @@ function deferNetworkRequestsUntil(predicatePromise) {
1451
1491
  };
1452
1492
  }
1453
1493
 
1454
- // src/utils/worker/createResponseListener.ts
1494
+ // src/setupWorker/start/createResponseListener.ts
1455
1495
  function createResponseListener(context) {
1456
1496
  return (_, message) => {
1457
1497
  var _a;
@@ -1605,7 +1645,7 @@ function prepareStartHandler(handler, context) {
1605
1645
  };
1606
1646
  }
1607
1647
 
1608
- // src/utils/worker/createFallbackRequestListener.ts
1648
+ // src/setupWorker/start/createFallbackRequestListener.ts
1609
1649
  var import_interceptors = require("@mswjs/interceptors");
1610
1650
  var import_fetch3 = require("@mswjs/interceptors/lib/interceptors/fetch");
1611
1651
  var import_XMLHttpRequest = require("@mswjs/interceptors/lib/interceptors/XMLHttpRequest");
@@ -1635,7 +1675,7 @@ function parseIsomorphicRequest(request) {
1635
1675
  return mockedRequest;
1636
1676
  }
1637
1677
 
1638
- // src/utils/worker/createFallbackRequestListener.ts
1678
+ // src/setupWorker/start/createFallbackRequestListener.ts
1639
1679
  function createFallbackRequestListener(context, options) {
1640
1680
  const interceptor = new import_interceptors.BatchInterceptor({
1641
1681
  name: "fallback",