msw 0.44.1 → 0.46.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.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as ResponseTransformer, s as status, a as set, d as delay, f as fetch, b as RequestHandler, S as SetupWorkerApi, D as DefaultContext, c as DefaultBodyType, M as MockedRequest, e as ResponseResolver, g as ResponseResolutionContext, h as SerializedResponse, i as RequestHandlerDefaultInfo, j as MockedResponse, k as ResponseLookupResult, l as SharedOptions, m as ServerLifecycleEventsMap } from './glossary-297d38ba.js';
2
- export { A as AsyncResponseResolverReturnType, c as DefaultBodyType, u as DefaultRequestMultipartBody, y as DelayMode, M as MockedRequest, H as MockedRequestInit, j as MockedResponse, z as RequestCache, E as RequestDestination, b as RequestHandler, B as RequestMode, F as RequestPriority, C as RequestRedirect, G as RequestReferrerPolicy, v as ResponseComposition, w as ResponseCompositionOptions, x as ResponseFunction, e as ResponseResolver, t as ResponseResolverReturnType, R as ResponseTransformer, S as SetupWorkerApi, l as SharedOptions, q as StartOptions, o as createResponseComposition, p as defaultContext, n as defaultResponse, r as response } from './glossary-297d38ba.js';
1
+ import { R as ResponseTransformer, s as status, a as set, d as delay, f as fetch, b as RequestHandler, S as SetupWorkerApi, D as DefaultContext, c as DefaultBodyType, M as MockedRequest, e as ResponseResolver, g as ResponseResolutionContext, h as SerializedResponse, i as RequestHandlerDefaultInfo, j as MockedResponse, k as ResponseLookupResult, l as SharedOptions, m as ServerLifecycleEventsMap } from './glossary-c690f512.js';
2
+ export { A as AsyncResponseResolverReturnType, c as DefaultBodyType, u as DefaultRequestMultipartBody, y as DelayMode, M as MockedRequest, H as MockedRequestInit, j as MockedResponse, z as RequestCache, E as RequestDestination, b as RequestHandler, B as RequestMode, F as RequestPriority, C as RequestRedirect, G as RequestReferrerPolicy, v as ResponseComposition, w as ResponseCompositionOptions, x as ResponseFunction, e as ResponseResolver, t as ResponseResolverReturnType, R as ResponseTransformer, S as SetupWorkerApi, l as SharedOptions, q as StartOptions, o as createResponseComposition, p as defaultContext, n as defaultResponse, r as response } from './glossary-c690f512.js';
3
3
  import * as cookieUtils from 'cookie';
4
4
  import { GraphQLError, OperationTypeNode, DocumentNode } from 'graphql';
5
5
  import { StrictEventEmitter } from 'strict-event-emitter';
package/lib/index.js CHANGED
@@ -425,17 +425,15 @@ async function enableMocking(context, options) {
425
425
  }
426
426
 
427
427
  // src/setupWorker/start/utils/createMessageChannel.ts
428
- function createMessageChannel(event) {
429
- const port = event.ports[0];
430
- return {
431
- send(message) {
432
- if (!port) {
433
- return;
434
- }
435
- port.postMessage(message);
436
- }
437
- };
438
- }
428
+ var WorkerChannel = class {
429
+ constructor(port) {
430
+ this.port = port;
431
+ }
432
+ postMessage(event, ...rest2) {
433
+ const [data2, transfer] = rest2;
434
+ this.port.postMessage({ type: event, data: data2 }, { transfer });
435
+ }
436
+ };
439
437
 
440
438
  // src/utils/NetworkError.ts
441
439
  var NetworkError = class extends Error {
@@ -677,9 +675,6 @@ var getResponse = async (request, handlers, resolutionContext) => {
677
675
  // src/utils/request/onUnhandledRequest.ts
678
676
  var import_js_levenshtein = __toESM(require("js-levenshtein"));
679
677
 
680
- // src/utils/internal/parseGraphQLRequest.ts
681
- var import_graphql = require("graphql");
682
-
683
678
  // src/utils/request/getPublicUrlFromRequest.ts
684
679
  var getPublicUrlFromRequest = (request) => {
685
680
  return request.referrer.startsWith(request.url.origin) ? request.url.pathname : new URL(request.url.pathname, `${request.url.protocol}//${request.url.host}`).href;
@@ -698,7 +693,8 @@ function parseDocumentNode(node) {
698
693
  }
699
694
  function parseQuery(query) {
700
695
  try {
701
- const ast = (0, import_graphql.parse)(query);
696
+ const { parse: parse3 } = require("graphql");
697
+ const ast = parse3(query);
702
698
  return parseDocumentNode(ast);
703
699
  } catch (error2) {
704
700
  return error2;
@@ -1375,69 +1371,27 @@ async function handleRequest(request, handlers, options, emitter, handleRequestO
1375
1371
  return transformedResponse;
1376
1372
  }
1377
1373
 
1378
- // src/setupWorker/start/utils/streamResponse.ts
1379
- var import_outvariant3 = require("outvariant");
1380
- async function streamResponse(operationChannel, messageChannel, mockedResponse) {
1381
- const response2 = new Response(mockedResponse.body, mockedResponse);
1382
- delete mockedResponse.body;
1383
- messageChannel.send({
1384
- type: "MOCK_RESPONSE_START",
1385
- payload: mockedResponse
1386
- });
1387
- (0, import_outvariant3.invariant)(response2.body, "Failed to stream mocked response with no body");
1388
- const reader = response2.body.getReader();
1389
- while (true) {
1390
- const { done, value } = await reader.read();
1391
- if (!done) {
1392
- operationChannel.postMessage({
1393
- type: "MOCK_RESPONSE_CHUNK",
1394
- payload: value
1395
- });
1396
- continue;
1397
- }
1398
- operationChannel.postMessage({
1399
- type: "MOCK_RESPONSE_END"
1400
- });
1401
- operationChannel.close();
1402
- reader.releaseLock();
1403
- break;
1404
- }
1405
- }
1406
-
1407
- // src/utils/internal/StrictBroadcastChannel.ts
1408
- var ParentClass = typeof BroadcastChannel == "undefined" ? class UnsupportedEnvironment {
1409
- constructor() {
1410
- throw new Error("Cannot construct BroadcastChannel in a non-browser environment");
1411
- }
1412
- } : BroadcastChannel;
1413
- var StrictBroadcastChannel = class extends ParentClass {
1414
- postMessage(message) {
1415
- return super.postMessage(message);
1416
- }
1417
- };
1418
-
1419
1374
  // src/setupWorker/start/createRequestListener.ts
1420
1375
  var createRequestListener = (context, options) => {
1421
1376
  return async (event, message) => {
1422
- const messageChannel = createMessageChannel(event);
1377
+ const messageChannel = new WorkerChannel(event.ports[0]);
1378
+ const request = parseWorkerRequest(message.payload);
1423
1379
  try {
1424
- const request = parseWorkerRequest(message.payload);
1425
- const operationChannel = new StrictBroadcastChannel(`msw-response-stream-${request.id}`);
1426
1380
  await handleRequest(request, context.requestHandlers, options, context.emitter, {
1427
1381
  transformResponse,
1428
1382
  onPassthroughResponse() {
1429
- return messageChannel.send({
1430
- type: "MOCK_NOT_FOUND"
1431
- });
1383
+ messageChannel.postMessage("NOT_FOUND");
1432
1384
  },
1433
- onMockedResponse(response2) {
1434
- if (response2.body == null) {
1435
- return messageChannel.send({
1436
- type: "MOCK_RESPONSE",
1437
- payload: response2
1438
- });
1385
+ async onMockedResponse(response2) {
1386
+ if (response2.body instanceof ReadableStream) {
1387
+ throw new Error(devUtils.formatMessage('Failed to construct a mocked response with a "ReadableStream" body: mocked streams are not supported. Follow https://github.com/mswjs/msw/issues/1336 for more details.'));
1439
1388
  }
1440
- streamResponse(operationChannel, messageChannel, response2);
1389
+ const responseInstance = new Response(response2.body, response2);
1390
+ const responseBodyBuffer = await responseInstance.arrayBuffer();
1391
+ const responseBody = response2.body == null ? null : responseBodyBuffer;
1392
+ messageChannel.postMessage("MOCK_RESPONSE", __spreadProps(__spreadValues({}, response2), {
1393
+ body: responseBody
1394
+ }), [responseBodyBuffer]);
1441
1395
  },
1442
1396
  onMockedResponseSent(response2, { handler, publicRequest, parsedRequest }) {
1443
1397
  if (options.quiet) {
@@ -1448,25 +1402,29 @@ var createRequestListener = (context, options) => {
1448
1402
  });
1449
1403
  } catch (error2) {
1450
1404
  if (error2 instanceof NetworkError) {
1451
- return messageChannel.send({
1452
- type: "NETWORK_ERROR",
1453
- payload: {
1454
- name: error2.name,
1455
- message: error2.message
1456
- }
1405
+ messageChannel.postMessage("NETWORK_ERROR", {
1406
+ name: error2.name,
1407
+ message: error2.message
1457
1408
  });
1409
+ return;
1458
1410
  }
1459
1411
  if (error2 instanceof Error) {
1460
- messageChannel.send({
1461
- type: "INTERNAL_ERROR",
1462
- payload: {
1463
- status: 500,
1464
- body: JSON.stringify({
1465
- errorType: error2.constructor.name,
1466
- message: error2.message,
1467
- location: error2.stack
1468
- })
1469
- }
1412
+ devUtils.error(`Uncaught exception in the request handler for "%s %s":
1413
+
1414
+ %s
1415
+
1416
+ This exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error, as it indicates a mistake in your code. If you wish to mock an error response, please see this guide: https://mswjs.io/docs/recipes/mocking-error-responses`, request.method, request.url, error2);
1417
+ messageChannel.postMessage("MOCK_RESPONSE", {
1418
+ status: 500,
1419
+ statusText: "Request Handler Error",
1420
+ headers: {
1421
+ "Content-Type": "application/json"
1422
+ },
1423
+ body: JSON.stringify({
1424
+ name: error2.name,
1425
+ message: error2.message,
1426
+ stack: error2.stack
1427
+ })
1470
1428
  });
1471
1429
  }
1472
1430
  }
@@ -1486,8 +1444,8 @@ function transformResponse(response2) {
1486
1444
  async function requestIntegrityCheck(context, serviceWorker) {
1487
1445
  context.workerChannel.send("INTEGRITY_CHECK_REQUEST");
1488
1446
  const { payload: actualChecksum } = await context.events.once("INTEGRITY_CHECK_RESPONSE");
1489
- if (actualChecksum !== "df0d85222361310ecbe1792c606e08f2") {
1490
- throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"df0d85222361310ecbe1792c606e08f2"}).`);
1447
+ if (actualChecksum !== "b3066ef78c2f9090b4ce87e874965995") {
1448
+ throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"b3066ef78c2f9090b4ce87e874965995"}).`);
1491
1449
  }
1492
1450
  return serviceWorker;
1493
1451
  }
@@ -1735,6 +1693,13 @@ function pipeEvents(source, destination) {
1735
1693
  source.emit._isPiped = true;
1736
1694
  }
1737
1695
 
1696
+ // src/utils/internal/toReadonlyArray.ts
1697
+ function toReadonlyArray(source) {
1698
+ const clone = [...source];
1699
+ Object.freeze(clone);
1700
+ return clone;
1701
+ }
1702
+
1738
1703
  // src/setupWorker/setupWorker.ts
1739
1704
  var listeners = [];
1740
1705
  function setupWorker(...requestHandlers) {
@@ -1829,8 +1794,12 @@ function setupWorker(...requestHandlers) {
1829
1794
  resetHandlers(...nextHandlers) {
1830
1795
  context.requestHandlers = resetHandlers(requestHandlers, ...nextHandlers);
1831
1796
  },
1797
+ listHandlers() {
1798
+ return toReadonlyArray(context.requestHandlers);
1799
+ },
1832
1800
  printHandlers() {
1833
- context.requestHandlers.forEach((handler) => {
1801
+ const handlers = this.listHandlers();
1802
+ handlers.forEach((handler) => {
1834
1803
  const { header, callFrame } = handler.info;
1835
1804
  const pragma = handler.info.hasOwnProperty("operationType") ? "[graphql]" : "[rest]";
1836
1805
  console.groupCollapsed(`${pragma} ${header}`);
@@ -1876,7 +1845,6 @@ var rest = {
1876
1845
  };
1877
1846
 
1878
1847
  // src/graphql.ts
1879
- var import_graphql2 = require("graphql");
1880
1848
  function createScopedGraphQLHandler(operationType, url) {
1881
1849
  return (operationName, resolver) => {
1882
1850
  return new GraphQLHandler(operationType, operationName, url, resolver);
@@ -1889,14 +1857,14 @@ function createGraphQLOperationHandler(url) {
1889
1857
  }
1890
1858
  var standardGraphQLHandlers = {
1891
1859
  operation: createGraphQLOperationHandler("*"),
1892
- query: createScopedGraphQLHandler(import_graphql2.OperationTypeNode.QUERY, "*"),
1893
- mutation: createScopedGraphQLHandler(import_graphql2.OperationTypeNode.MUTATION, "*")
1860
+ query: createScopedGraphQLHandler("query", "*"),
1861
+ mutation: createScopedGraphQLHandler("mutation", "*")
1894
1862
  };
1895
1863
  function createGraphQLLink(url) {
1896
1864
  return {
1897
1865
  operation: createGraphQLOperationHandler(url),
1898
- query: createScopedGraphQLHandler(import_graphql2.OperationTypeNode.QUERY, url),
1899
- mutation: createScopedGraphQLHandler(import_graphql2.OperationTypeNode.MUTATION, url)
1866
+ query: createScopedGraphQLHandler("query", url),
1867
+ mutation: createScopedGraphQLHandler("mutation", url)
1900
1868
  };
1901
1869
  }
1902
1870
  var graphql = __spreadProps(__spreadValues({}, standardGraphQLHandlers), {