msw 0.47.0 → 0.47.1

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-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';
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-3d04462e.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-3d04462e.js';
3
3
  import * as cookieUtils from 'cookie';
4
4
  import { GraphQLError, OperationTypeNode, DocumentNode } from 'graphql';
5
5
  import { StrictEventEmitter } from 'strict-event-emitter';
@@ -170,7 +170,7 @@ declare class RestHandler<RequestType extends MockedRequest<DefaultBodyType> = M
170
170
  parse(request: RequestType, resolutionContext?: ResponseResolutionContext): Match;
171
171
  protected getPublicRequest(request: RequestType, parsedResult: ParsedRestRequest): RestRequest<any, PathParams>;
172
172
  predicate(request: RequestType, parsedResult: ParsedRestRequest): boolean;
173
- log(request: RequestType, response: SerializedResponse): void;
173
+ log(request: RequestType, response: SerializedResponse<any>): void;
174
174
  }
175
175
 
176
176
  declare const rest: {
@@ -236,7 +236,7 @@ declare class GraphQLHandler<Request extends GraphQLRequest<any> = GraphQLReques
236
236
  parse(request: MockedRequest): ParsedGraphQLRequest<GraphQLVariables>;
237
237
  protected getPublicRequest(request: Request, parsedResult: ParsedGraphQLRequest): GraphQLRequest<any>;
238
238
  predicate(request: MockedRequest, parsedResult: ParsedGraphQLRequest): boolean;
239
- log(request: Request, response: SerializedResponse, handler: this, parsedRequest: ParsedGraphQLRequest): void;
239
+ log(request: Request, response: SerializedResponse<any>, parsedRequest: ParsedGraphQLRequest): void;
240
240
  }
241
241
 
242
242
  interface TypedDocumentNode<Result = {
@@ -343,11 +343,6 @@ interface HandleRequestOptions<ResponseType> {
343
343
  * Invoked when the mocked response is ready to be sent.
344
344
  */
345
345
  onMockedResponse?(response: ResponseType, handler: RequiredDeep<ResponseLookupResult>): void;
346
- /**
347
- * Invoked when the mocked response is sent.
348
- * Respects the response delay duration.
349
- */
350
- onMockedResponseSent?(response: ResponseType, handler: RequiredDeep<ResponseLookupResult>): void;
351
346
  }
352
347
  declare function handleRequest<ResponseType extends Record<string, any> = MockedResponse<string>>(request: MockedRequest, handlers: RequestHandler[], options: RequiredDeep<SharedOptions>, emitter: StrictEventEmitter<ServerLifecycleEventsMap>, handleRequestOptions?: HandleRequestOptions<ResponseType>): Promise<ResponseType | undefined>;
353
348
 
package/lib/index.js CHANGED
@@ -1091,10 +1091,7 @@ var RestHandler = class extends RequestHandler {
1091
1091
  const statusColor = getStatusCodeColor(response2.status);
1092
1092
  console.groupCollapsed(devUtils.formatMessage("%s %s %s (%c%s%c)"), getTimestamp(), request.method, publicUrl, `color:${statusColor}`, `${response2.status} ${response2.statusText}`, "color:inherit");
1093
1093
  console.log("Request", loggedRequest);
1094
- console.log("Handler:", {
1095
- mask: this.info.path,
1096
- resolver: this.resolver
1097
- });
1094
+ console.log("Handler:", this);
1098
1095
  console.log("Response", loggedResponse);
1099
1096
  console.groupEnd();
1100
1097
  }
@@ -1196,7 +1193,7 @@ Consider naming this operation or using "graphql.operation" request handler to i
1196
1193
  const hasMatchingOperationName = this.info.operationName instanceof RegExp ? this.info.operationName.test(parsedResult.operationName || "") : parsedResult.operationName === this.info.operationName;
1197
1194
  return hasMatchingUrl.matches && hasMatchingOperationType && hasMatchingOperationName;
1198
1195
  }
1199
- log(request, response2, handler, parsedRequest) {
1196
+ log(request, response2, parsedRequest) {
1200
1197
  const loggedRequest = prepareRequest(request);
1201
1198
  const loggedResponse = prepareResponse(response2);
1202
1199
  const statusColor = getStatusCodeColor(response2.status);
@@ -1327,7 +1324,7 @@ function readResponseCookies(request, response2) {
1327
1324
 
1328
1325
  // src/utils/handleRequest.ts
1329
1326
  async function handleRequest(request, handlers, options, emitter, handleRequestOptions) {
1330
- var _a, _b, _c, _d, _e, _f, _g;
1327
+ var _a, _b, _c, _d, _e, _f;
1331
1328
  emitter.emit("request:start", request);
1332
1329
  if (request.headers.get("x-msw-bypass") === "true") {
1333
1330
  emitter.emit("request:end", request);
@@ -1368,11 +1365,21 @@ async function handleRequest(request, handlers, options, emitter, handleRequestO
1368
1365
  const requiredLookupResult = lookupResult;
1369
1366
  const transformedResponse = ((_e = handleRequestOptions == null ? void 0 : handleRequestOptions.transformResponse) == null ? void 0 : _e.call(handleRequestOptions, response2)) || response2;
1370
1367
  (_f = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponse) == null ? void 0 : _f.call(handleRequestOptions, transformedResponse, requiredLookupResult);
1371
- (_g = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponseSent) == null ? void 0 : _g.call(handleRequestOptions, transformedResponse, requiredLookupResult);
1372
1368
  emitter.emit("request:end", request);
1373
1369
  return transformedResponse;
1374
1370
  }
1375
1371
 
1372
+ // src/utils/logging/serializeResponse.ts
1373
+ var import_headers_polyfill8 = require("headers-polyfill");
1374
+ function serializeResponse(source) {
1375
+ return {
1376
+ status: source.status,
1377
+ statusText: source.statusText,
1378
+ headers: (0, import_headers_polyfill8.flattenHeadersObject)((0, import_headers_polyfill8.headersToObject)(source.headers)),
1379
+ body: source.body
1380
+ };
1381
+ }
1382
+
1376
1383
  // src/setupWorker/start/createRequestListener.ts
1377
1384
  var createRequestListener = (context, options) => {
1378
1385
  return async (event, message) => {
@@ -1384,7 +1391,7 @@ var createRequestListener = (context, options) => {
1384
1391
  onPassthroughResponse() {
1385
1392
  messageChannel.postMessage("NOT_FOUND");
1386
1393
  },
1387
- async onMockedResponse(response2) {
1394
+ async onMockedResponse(response2, { handler, publicRequest, parsedRequest }) {
1388
1395
  if (response2.body instanceof ReadableStream) {
1389
1396
  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.'));
1390
1397
  }
@@ -1394,12 +1401,11 @@ var createRequestListener = (context, options) => {
1394
1401
  messageChannel.postMessage("MOCK_RESPONSE", __spreadProps(__spreadValues({}, response2), {
1395
1402
  body: responseBody
1396
1403
  }), [responseBodyBuffer]);
1397
- },
1398
- onMockedResponseSent(response2, { handler, publicRequest, parsedRequest }) {
1399
- if (options.quiet) {
1400
- return;
1404
+ if (!options.quiet) {
1405
+ context.emitter.once("response:mocked", (response3) => {
1406
+ handler.log(publicRequest, serializeResponse(response3), parsedRequest);
1407
+ });
1401
1408
  }
1402
- handler.log(publicRequest, response2, handler, parsedRequest);
1403
1409
  }
1404
1410
  });
1405
1411
  } catch (error2) {
@@ -1625,11 +1631,44 @@ function prepareStartHandler(handler, context) {
1625
1631
  }
1626
1632
 
1627
1633
  // src/setupWorker/start/createFallbackRequestListener.ts
1628
- var import_interceptors3 = require("@mswjs/interceptors");
1634
+ var import_interceptors4 = require("@mswjs/interceptors");
1629
1635
  var import_fetch3 = require("@mswjs/interceptors/lib/interceptors/fetch");
1630
1636
  var import_XMLHttpRequest = require("@mswjs/interceptors/lib/interceptors/XMLHttpRequest");
1637
+
1638
+ // src/utils/request/createResponseFromIsomorphicResponse.ts
1639
+ var import_interceptors3 = require("@mswjs/interceptors");
1640
+ var noop = () => {
1641
+ throw new Error("Not implemented");
1642
+ };
1643
+ function createResponseFromIsomorphicResponse(response2) {
1644
+ return __spreadProps(__spreadValues({}, response2), {
1645
+ ok: response2.status >= 200 && response2.status < 300,
1646
+ url: "",
1647
+ type: "default",
1648
+ status: response2.status,
1649
+ statusText: response2.statusText,
1650
+ headers: response2.headers,
1651
+ body: new ReadableStream(),
1652
+ redirected: response2.headers.get("Location") != null,
1653
+ async text() {
1654
+ return response2.body || "";
1655
+ },
1656
+ async json() {
1657
+ return JSON.parse(response2.body || "");
1658
+ },
1659
+ async arrayBuffer() {
1660
+ return (0, import_interceptors3.encodeBuffer)(response2.body || "");
1661
+ },
1662
+ bodyUsed: false,
1663
+ formData: noop,
1664
+ blob: noop,
1665
+ clone: noop
1666
+ });
1667
+ }
1668
+
1669
+ // src/setupWorker/start/createFallbackRequestListener.ts
1631
1670
  function createFallbackRequestListener(context, options) {
1632
- const interceptor = new import_interceptors3.BatchInterceptor({
1671
+ const interceptor = new import_interceptors4.BatchInterceptor({
1633
1672
  name: "fallback",
1634
1673
  interceptors: [new import_fetch3.FetchInterceptor(), new import_XMLHttpRequest.XMLHttpRequestInterceptor()]
1635
1674
  });
@@ -1647,9 +1686,11 @@ function createFallbackRequestListener(context, options) {
1647
1686
  delay: response3.delay
1648
1687
  };
1649
1688
  },
1650
- onMockedResponseSent(response3, { handler, publicRequest, parsedRequest }) {
1689
+ onMockedResponse(_, { handler, publicRequest, parsedRequest }) {
1651
1690
  if (!options.quiet) {
1652
- handler.log(publicRequest, response3, handler, parsedRequest);
1691
+ context.emitter.once("response:mocked", (response3) => {
1692
+ handler.log(publicRequest, serializeResponse(response3), parsedRequest);
1693
+ });
1653
1694
  }
1654
1695
  }
1655
1696
  });
@@ -1657,6 +1698,17 @@ function createFallbackRequestListener(context, options) {
1657
1698
  request.respondWith(response2);
1658
1699
  }
1659
1700
  });
1701
+ interceptor.on("response", (request, response2) => {
1702
+ if (!request.id) {
1703
+ return;
1704
+ }
1705
+ const browserResponse = createResponseFromIsomorphicResponse(response2);
1706
+ if (response2.headers.get("x-powered-by") === "msw") {
1707
+ context.emitter.emit("response:mocked", browserResponse, request.id);
1708
+ } else {
1709
+ context.emitter.emit("response:bypass", browserResponse, request.id);
1710
+ }
1711
+ });
1660
1712
  interceptor.apply();
1661
1713
  return interceptor;
1662
1714
  }