msw 0.43.1 → 0.44.2

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
@@ -52,6 +52,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
52
52
  var src_exports = {};
53
53
  __export(src_exports, {
54
54
  GraphQLHandler: () => GraphQLHandler,
55
+ MockedRequest: () => MockedRequest,
55
56
  RESTMethods: () => RESTMethods,
56
57
  RequestHandler: () => RequestHandler,
57
58
  RestHandler: () => RestHandler,
@@ -65,7 +66,6 @@ __export(src_exports, {
65
66
  graphqlContext: () => graphqlContext,
66
67
  handleRequest: () => handleRequest,
67
68
  matchRequestUrl: () => matchRequestUrl,
68
- parseIsomorphicRequest: () => parseIsomorphicRequest,
69
69
  response: () => response,
70
70
  rest: () => rest,
71
71
  restContext: () => restContext,
@@ -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 {
@@ -446,166 +444,15 @@ var NetworkError = class extends Error {
446
444
  };
447
445
 
448
446
  // src/utils/request/parseWorkerRequest.ts
449
- var import_headers_polyfill6 = require("headers-polyfill");
450
-
451
- // src/handlers/RequestHandler.ts
447
+ var import_interceptors2 = require("@mswjs/interceptors");
452
448
  var import_headers_polyfill4 = require("headers-polyfill");
453
449
 
454
- // src/response.ts
455
- var import_headers_polyfill3 = require("headers-polyfill");
456
-
457
- // src/utils/internal/compose.ts
458
- function compose(...fns) {
459
- return (...args) => {
460
- return fns.reduceRight((leftFn, rightFn) => {
461
- return leftFn instanceof Promise ? Promise.resolve(leftFn).then(rightFn) : rightFn(leftFn);
462
- }, args[0]);
463
- };
464
- }
465
-
466
- // src/response.ts
467
- var defaultResponse = {
468
- status: 200,
469
- statusText: "OK",
470
- body: null,
471
- delay: 0,
472
- once: false,
473
- passthrough: false
474
- };
475
- var defaultResponseTransformers = [];
476
- function createResponseComposition(responseOverrides, defaultTransformers = defaultResponseTransformers) {
477
- return async (...transformers) => {
478
- const initialResponse = Object.assign({}, defaultResponse, {
479
- headers: new import_headers_polyfill3.Headers({
480
- "x-powered-by": "msw"
481
- })
482
- }, responseOverrides);
483
- const resolvedTransformers = [
484
- ...defaultTransformers,
485
- ...transformers
486
- ].filter(Boolean);
487
- const resolvedResponse = resolvedTransformers.length > 0 ? compose(...resolvedTransformers)(initialResponse) : initialResponse;
488
- return resolvedResponse;
489
- };
490
- }
491
- var response = Object.assign(createResponseComposition(), {
492
- once: createResponseComposition({ once: true }),
493
- networkError(message) {
494
- throw new NetworkError(message);
495
- }
496
- });
497
-
498
- // src/utils/internal/getCallFrame.ts
499
- var SOURCE_FRAME = /\/msw\/src\/(.+)/;
500
- var BUILD_FRAME = /(node_modules)?[\/\\]lib[\/\\](umd|esm|iief|cjs)[\/\\]|^[^\/\\]*$/;
501
- function getCallFrame(error2) {
502
- const stack = error2.stack;
503
- if (!stack) {
504
- return;
505
- }
506
- const frames = stack.split("\n").slice(1);
507
- const declarationFrame = frames.find((frame) => {
508
- return !(SOURCE_FRAME.test(frame) || BUILD_FRAME.test(frame));
509
- });
510
- if (!declarationFrame) {
511
- return;
512
- }
513
- const declarationPath = declarationFrame.replace(/\s*at [^()]*\(([^)]+)\)/, "$1").replace(/^@/, "");
514
- return declarationPath;
515
- }
516
-
517
- // src/utils/internal/isIterable.ts
518
- function isIterable(fn) {
519
- if (!fn) {
520
- return false;
521
- }
522
- return typeof fn[Symbol.iterator] == "function";
523
- }
524
-
525
- // src/handlers/RequestHandler.ts
526
- var defaultContext = {
527
- status,
528
- set,
529
- delay,
530
- fetch
531
- };
532
- var RequestHandler = class {
533
- constructor(options) {
534
- this.shouldSkip = false;
535
- this.ctx = options.ctx || defaultContext;
536
- this.resolver = options.resolver;
537
- const callFrame = getCallFrame(new Error());
538
- this.info = __spreadProps(__spreadValues({}, options.info), {
539
- callFrame
540
- });
541
- }
542
- parse(_request, _resolutionContext) {
543
- return null;
544
- }
545
- test(request, resolutionContext) {
546
- return this.predicate(request, this.parse(request, resolutionContext), resolutionContext);
547
- }
548
- getPublicRequest(request, _parsedResult) {
549
- return request;
550
- }
551
- markAsSkipped(shouldSkip = true) {
552
- this.shouldSkip = shouldSkip;
553
- }
554
- async run(request, resolutionContext) {
555
- if (this.shouldSkip) {
556
- return null;
557
- }
558
- const parsedResult = this.parse(request, resolutionContext);
559
- const shouldIntercept = this.predicate(request, parsedResult, resolutionContext);
560
- if (!shouldIntercept) {
561
- return null;
562
- }
563
- const publicRequest = this.getPublicRequest(request, parsedResult);
564
- const executeResolver = this.wrapResolver(this.resolver);
565
- const mockedResponse = await executeResolver(publicRequest, response, this.ctx);
566
- return this.createExecutionResult(parsedResult, publicRequest, mockedResponse);
567
- }
568
- wrapResolver(resolver) {
569
- return async (req, res, ctx) => {
570
- const result = this.resolverGenerator || await resolver(req, res, ctx);
571
- if (isIterable(result)) {
572
- const { value, done } = result[Symbol.iterator]().next();
573
- const nextResponse = await value;
574
- if (!nextResponse && done) {
575
- return this.resolverGeneratorResult;
576
- }
577
- if (!this.resolverGenerator) {
578
- this.resolverGenerator = result;
579
- }
580
- this.resolverGeneratorResult = nextResponse;
581
- return nextResponse;
582
- }
583
- return result;
584
- };
585
- }
586
- createExecutionResult(parsedResult, request, response2) {
587
- return {
588
- handler: this,
589
- parsedResult: parsedResult || null,
590
- request,
591
- response: response2 || null
592
- };
593
- }
594
- };
595
- function passthrough() {
596
- return {
597
- status: 101,
598
- statusText: "Continue",
599
- headers: new import_headers_polyfill4.Headers(),
600
- body: null,
601
- passthrough: true,
602
- once: false
603
- };
604
- }
605
-
606
- // src/utils/request/setRequestCookies.ts
450
+ // src/utils/request/MockedRequest.ts
607
451
  var cookieUtils3 = __toESM(require("cookie"));
608
452
  var import_cookies = require("@mswjs/cookies");
453
+ var import_interceptors = require("@mswjs/interceptors");
454
+ var import_bufferUtils = require("@mswjs/interceptors/lib/utils/bufferUtils");
455
+ var import_lib = require("headers-polyfill/lib");
609
456
 
610
457
  // src/utils/request/getRequestCookies.ts
611
458
  var cookieUtils2 = __toESM(require("cookie"));
@@ -629,28 +476,11 @@ function getRequestCookies(request) {
629
476
  }
630
477
  }
631
478
 
632
- // src/utils/request/setRequestCookies.ts
633
- function setRequestCookies(request) {
634
- var _a;
635
- const requestCookiesString = request.headers.get("cookie");
636
- import_cookies.store.hydrate();
637
- const cookiesFromStore = Array.from((_a = import_cookies.store.get(__spreadProps(__spreadValues({}, request), { url: request.url.toString() }))) == null ? void 0 : _a.entries()).reduce((cookies, [name, { value }]) => {
638
- return Object.assign(cookies, { [name.trim()]: value });
639
- }, {});
640
- const cookiesFromDocument = getRequestCookies(request);
641
- const forwardedCookies = __spreadValues(__spreadValues({}, cookiesFromDocument), cookiesFromStore);
642
- for (const [name, value] of Object.entries(forwardedCookies)) {
643
- request.headers.append("cookie", `${name}=${value}`);
644
- }
645
- const ownCookies = requestCookiesString ? cookieUtils3.parse(requestCookiesString) : {};
646
- request.cookies = __spreadValues(__spreadValues(__spreadValues({}, request.cookies), forwardedCookies), ownCookies);
647
- }
648
-
649
479
  // src/utils/internal/parseMultipartData.ts
650
- var import_headers_polyfill5 = require("headers-polyfill");
480
+ var import_headers_polyfill3 = require("headers-polyfill");
651
481
  function parseContentHeaders(headersString) {
652
482
  var _a, _b;
653
- const headers = (0, import_headers_polyfill5.stringToHeaders)(headersString);
483
+ const headers = (0, import_headers_polyfill3.stringToHeaders)(headersString);
654
484
  const contentType = headers.get("content-type") || "text/plain";
655
485
  const disposition = headers.get("content-disposition");
656
486
  if (!disposition) {
@@ -729,39 +559,67 @@ function isStringEqual(actual, expected) {
729
559
  return actual.toLowerCase() === expected.toLowerCase();
730
560
  }
731
561
 
732
- // src/utils/request/pruneGetRequestBody.ts
733
- function pruneGetRequestBody(request) {
734
- if (request.method && isStringEqual(request.method, "GET") && request.body === "") {
735
- return void 0;
562
+ // src/utils/request/MockedRequest.ts
563
+ var MockedRequest = class extends import_interceptors.IsomorphicRequest {
564
+ constructor(url, init = {}) {
565
+ super(url, init);
566
+ if (init.id) {
567
+ this.id = init.id;
568
+ }
569
+ this.cache = init.cache || "default";
570
+ this.destination = init.destination || "";
571
+ this.integrity = init.integrity || "";
572
+ this.keepalive = init.keepalive || false;
573
+ this.mode = init.mode || "cors";
574
+ this.priority = init.priority || "auto";
575
+ this.redirect = init.redirect || "follow";
576
+ this.referrer = init.referrer || "";
577
+ this.referrerPolicy = init.referrerPolicy || "no-referrer";
578
+ this.cookies = init.cookies || this.getCookies();
579
+ }
580
+ get body() {
581
+ const text2 = (0, import_bufferUtils.decodeBuffer)(this["_body"]);
582
+ const body2 = parseBody(text2, this.headers);
583
+ if (isStringEqual(this.method, "GET") && body2 === "") {
584
+ return void 0;
585
+ }
586
+ return body2;
736
587
  }
737
- return request.body;
738
- }
588
+ passthrough() {
589
+ return {
590
+ status: 101,
591
+ statusText: "Continue",
592
+ headers: new import_lib.Headers(),
593
+ body: null,
594
+ passthrough: true,
595
+ once: false
596
+ };
597
+ }
598
+ getCookies() {
599
+ var _a;
600
+ const requestCookiesString = this.headers.get("cookie");
601
+ const ownCookies = requestCookiesString ? cookieUtils3.parse(requestCookiesString) : {};
602
+ import_cookies.store.hydrate();
603
+ const cookiesFromStore = Array.from((_a = import_cookies.store.get(__spreadProps(__spreadValues({}, this), { url: this.url.href }))) == null ? void 0 : _a.entries()).reduce((cookies, [name, { value }]) => {
604
+ return Object.assign(cookies, { [name.trim()]: value });
605
+ }, {});
606
+ const cookiesFromDocument = getRequestCookies(this);
607
+ const forwardedCookies = __spreadValues(__spreadValues({}, cookiesFromDocument), cookiesFromStore);
608
+ for (const [name, value] of Object.entries(forwardedCookies)) {
609
+ this.headers.append("cookie", `${name}=${value}`);
610
+ }
611
+ return __spreadValues(__spreadValues({}, forwardedCookies), ownCookies);
612
+ }
613
+ };
739
614
 
740
615
  // src/utils/request/parseWorkerRequest.ts
741
616
  function parseWorkerRequest(rawRequest) {
742
- const request = {
743
- id: rawRequest.id,
744
- cache: rawRequest.cache,
745
- credentials: rawRequest.credentials,
746
- method: rawRequest.method,
747
- url: new URL(rawRequest.url),
748
- referrer: rawRequest.referrer,
749
- referrerPolicy: rawRequest.referrerPolicy,
750
- redirect: rawRequest.redirect,
751
- mode: rawRequest.mode,
752
- params: {},
753
- cookies: {},
754
- integrity: rawRequest.integrity,
755
- keepalive: rawRequest.keepalive,
756
- destination: rawRequest.destination,
757
- body: pruneGetRequestBody(rawRequest),
758
- bodyUsed: rawRequest.bodyUsed,
759
- headers: new import_headers_polyfill6.Headers(rawRequest.headers),
760
- passthrough
761
- };
762
- setRequestCookies(request);
763
- request.body = parseBody(request.body, request.headers);
764
- return request;
617
+ const url = new URL(rawRequest.url);
618
+ const headers = new import_headers_polyfill4.Headers(rawRequest.headers);
619
+ return new MockedRequest(url, __spreadProps(__spreadValues({}, rawRequest), {
620
+ body: (0, import_interceptors2.encodeBuffer)(rawRequest.body || ""),
621
+ headers
622
+ }));
765
623
  }
766
624
 
767
625
  // src/utils/handleRequest.ts
@@ -940,14 +798,15 @@ function getTimestamp() {
940
798
  // src/utils/logging/prepareRequest.ts
941
799
  function prepareRequest(request) {
942
800
  return __spreadProps(__spreadValues({}, request), {
801
+ body: request.body,
943
802
  headers: request.headers.all()
944
803
  });
945
804
  }
946
805
 
947
806
  // src/utils/logging/prepareResponse.ts
948
- var import_headers_polyfill7 = require("headers-polyfill");
807
+ var import_headers_polyfill5 = require("headers-polyfill");
949
808
  function prepareResponse(res) {
950
- const responseHeaders = (0, import_headers_polyfill7.objectToHeaders)(res.headers);
809
+ const responseHeaders = (0, import_headers_polyfill5.objectToHeaders)(res.headers);
951
810
  return __spreadProps(__spreadValues({}, res), {
952
811
  body: parseBody(res.body, responseHeaders)
953
812
  });
@@ -1014,6 +873,151 @@ function matchRequestUrl(url, path, baseUrl) {
1014
873
  };
1015
874
  }
1016
875
 
876
+ // src/handlers/RequestHandler.ts
877
+ var import_headers_polyfill7 = require("headers-polyfill");
878
+
879
+ // src/response.ts
880
+ var import_headers_polyfill6 = require("headers-polyfill");
881
+
882
+ // src/utils/internal/compose.ts
883
+ function compose(...fns) {
884
+ return (...args) => {
885
+ return fns.reduceRight((leftFn, rightFn) => {
886
+ return leftFn instanceof Promise ? Promise.resolve(leftFn).then(rightFn) : rightFn(leftFn);
887
+ }, args[0]);
888
+ };
889
+ }
890
+
891
+ // src/response.ts
892
+ var defaultResponse = {
893
+ status: 200,
894
+ statusText: "OK",
895
+ body: null,
896
+ delay: 0,
897
+ once: false,
898
+ passthrough: false
899
+ };
900
+ var defaultResponseTransformers = [];
901
+ function createResponseComposition(responseOverrides, defaultTransformers = defaultResponseTransformers) {
902
+ return async (...transformers) => {
903
+ const initialResponse = Object.assign({}, defaultResponse, {
904
+ headers: new import_headers_polyfill6.Headers({
905
+ "x-powered-by": "msw"
906
+ })
907
+ }, responseOverrides);
908
+ const resolvedTransformers = [
909
+ ...defaultTransformers,
910
+ ...transformers
911
+ ].filter(Boolean);
912
+ const resolvedResponse = resolvedTransformers.length > 0 ? compose(...resolvedTransformers)(initialResponse) : initialResponse;
913
+ return resolvedResponse;
914
+ };
915
+ }
916
+ var response = Object.assign(createResponseComposition(), {
917
+ once: createResponseComposition({ once: true }),
918
+ networkError(message) {
919
+ throw new NetworkError(message);
920
+ }
921
+ });
922
+
923
+ // src/utils/internal/getCallFrame.ts
924
+ var SOURCE_FRAME = /\/msw\/src\/(.+)/;
925
+ var BUILD_FRAME = /(node_modules)?[\/\\]lib[\/\\](umd|esm|iief|cjs)[\/\\]|^[^\/\\]*$/;
926
+ function getCallFrame(error2) {
927
+ const stack = error2.stack;
928
+ if (!stack) {
929
+ return;
930
+ }
931
+ const frames = stack.split("\n").slice(1);
932
+ const declarationFrame = frames.find((frame) => {
933
+ return !(SOURCE_FRAME.test(frame) || BUILD_FRAME.test(frame));
934
+ });
935
+ if (!declarationFrame) {
936
+ return;
937
+ }
938
+ const declarationPath = declarationFrame.replace(/\s*at [^()]*\(([^)]+)\)/, "$1").replace(/^@/, "");
939
+ return declarationPath;
940
+ }
941
+
942
+ // src/utils/internal/isIterable.ts
943
+ function isIterable(fn) {
944
+ if (!fn) {
945
+ return false;
946
+ }
947
+ return typeof fn[Symbol.iterator] == "function";
948
+ }
949
+
950
+ // src/handlers/RequestHandler.ts
951
+ var defaultContext = {
952
+ status,
953
+ set,
954
+ delay,
955
+ fetch
956
+ };
957
+ var RequestHandler = class {
958
+ constructor(options) {
959
+ this.shouldSkip = false;
960
+ this.ctx = options.ctx || defaultContext;
961
+ this.resolver = options.resolver;
962
+ const callFrame = getCallFrame(new Error());
963
+ this.info = __spreadProps(__spreadValues({}, options.info), {
964
+ callFrame
965
+ });
966
+ }
967
+ parse(_request, _resolutionContext) {
968
+ return null;
969
+ }
970
+ test(request, resolutionContext) {
971
+ return this.predicate(request, this.parse(request, resolutionContext), resolutionContext);
972
+ }
973
+ getPublicRequest(request, _parsedResult) {
974
+ return request;
975
+ }
976
+ markAsSkipped(shouldSkip = true) {
977
+ this.shouldSkip = shouldSkip;
978
+ }
979
+ async run(request, resolutionContext) {
980
+ if (this.shouldSkip) {
981
+ return null;
982
+ }
983
+ const parsedResult = this.parse(request, resolutionContext);
984
+ const shouldIntercept = this.predicate(request, parsedResult, resolutionContext);
985
+ if (!shouldIntercept) {
986
+ return null;
987
+ }
988
+ const publicRequest = this.getPublicRequest(request, parsedResult);
989
+ const executeResolver = this.wrapResolver(this.resolver);
990
+ const mockedResponse = await executeResolver(publicRequest, response, this.ctx);
991
+ return this.createExecutionResult(parsedResult, publicRequest, mockedResponse);
992
+ }
993
+ wrapResolver(resolver) {
994
+ return async (req, res, ctx) => {
995
+ const result = this.resolverGenerator || await resolver(req, res, ctx);
996
+ if (isIterable(result)) {
997
+ const { value, done } = result[Symbol.iterator]().next();
998
+ const nextResponse = await value;
999
+ if (!nextResponse && done) {
1000
+ return this.resolverGeneratorResult;
1001
+ }
1002
+ if (!this.resolverGenerator) {
1003
+ this.resolverGenerator = result;
1004
+ }
1005
+ this.resolverGeneratorResult = nextResponse;
1006
+ return nextResponse;
1007
+ }
1008
+ return result;
1009
+ };
1010
+ }
1011
+ createExecutionResult(parsedResult, request, response2) {
1012
+ return {
1013
+ handler: this,
1014
+ parsedResult: parsedResult || null,
1015
+ request,
1016
+ response: response2 || null
1017
+ };
1018
+ }
1019
+ };
1020
+
1017
1021
  // src/handlers/RestHandler.ts
1018
1022
  var RESTMethods = /* @__PURE__ */ ((RESTMethods2) => {
1019
1023
  RESTMethods2["HEAD"] = "HEAD";
@@ -1032,6 +1036,15 @@ var restContext = __spreadProps(__spreadValues({}, defaultContext), {
1032
1036
  json,
1033
1037
  xml
1034
1038
  });
1039
+ var RestRequest = class extends MockedRequest {
1040
+ constructor(request, params) {
1041
+ super(request.url, __spreadProps(__spreadValues({}, request), {
1042
+ body: request["_body"]
1043
+ }));
1044
+ this.params = params;
1045
+ this.id = request.id;
1046
+ }
1047
+ };
1035
1048
  var RestHandler = class extends RequestHandler {
1036
1049
  constructor(method, path, resolver) {
1037
1050
  super({
@@ -1065,9 +1078,7 @@ var RestHandler = class extends RequestHandler {
1065
1078
  return matchRequestUrl(request.url, this.info.path, resolutionContext == null ? void 0 : resolutionContext.baseUrl);
1066
1079
  }
1067
1080
  getPublicRequest(request, parsedResult) {
1068
- return __spreadProps(__spreadValues({}, request), {
1069
- params: parsedResult.params || {}
1070
- });
1081
+ return new RestRequest(request, parsedResult.params || {});
1071
1082
  }
1072
1083
  predicate(request, parsedResult) {
1073
1084
  const matchesMethod = this.info.method instanceof RegExp ? this.info.method.test(request.method) : isStringEqual(this.info.method, request.method);
@@ -1130,6 +1141,14 @@ function isDocumentNode(value) {
1130
1141
  }
1131
1142
  return typeof value === "object" && "kind" in value && "definitions" in value;
1132
1143
  }
1144
+ var GraphQLRequest = class extends MockedRequest {
1145
+ constructor(request, variables) {
1146
+ super(request.url, __spreadProps(__spreadValues({}, request), {
1147
+ body: request["_body"]
1148
+ }));
1149
+ this.variables = variables;
1150
+ }
1151
+ };
1133
1152
  var GraphQLHandler = class extends RequestHandler {
1134
1153
  constructor(operationType, operationName, endpoint, resolver) {
1135
1154
  let resolvedOperationName = operationName;
@@ -1159,9 +1178,7 @@ var GraphQLHandler = class extends RequestHandler {
1159
1178
  return tryCatch(() => parseGraphQLRequest(request), (error2) => console.error(error2.message));
1160
1179
  }
1161
1180
  getPublicRequest(request, parsedResult) {
1162
- return __spreadProps(__spreadValues({}, request), {
1163
- variables: (parsedResult == null ? void 0 : parsedResult.variables) || {}
1164
- });
1181
+ return new GraphQLRequest(request, (parsedResult == null ? void 0 : parsedResult.variables) || {});
1165
1182
  }
1166
1183
  predicate(request, parsedResult) {
1167
1184
  if (!parsedResult) {
@@ -1356,69 +1373,27 @@ async function handleRequest(request, handlers, options, emitter, handleRequestO
1356
1373
  return transformedResponse;
1357
1374
  }
1358
1375
 
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
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
- }
1386
- }
1387
-
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
1376
  // src/setupWorker/start/createRequestListener.ts
1401
1377
  var createRequestListener = (context, options) => {
1402
1378
  return async (event, message) => {
1403
- const messageChannel = createMessageChannel(event);
1379
+ const messageChannel = new WorkerChannel(event.ports[0]);
1380
+ const request = parseWorkerRequest(message.payload);
1404
1381
  try {
1405
- const request = parseWorkerRequest(message.payload);
1406
- const operationChannel = new StrictBroadcastChannel(`msw-response-stream-${request.id}`);
1407
1382
  await handleRequest(request, context.requestHandlers, options, context.emitter, {
1408
1383
  transformResponse,
1409
1384
  onPassthroughResponse() {
1410
- return messageChannel.send({
1411
- type: "MOCK_NOT_FOUND"
1412
- });
1385
+ messageChannel.postMessage("NOT_FOUND");
1413
1386
  },
1414
- onMockedResponse(response2) {
1415
- if (response2.body == null) {
1416
- return messageChannel.send({
1417
- type: "MOCK_RESPONSE",
1418
- payload: response2
1419
- });
1387
+ async onMockedResponse(response2) {
1388
+ if (response2.body instanceof ReadableStream) {
1389
+ 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.'));
1420
1390
  }
1421
- streamResponse(operationChannel, messageChannel, response2);
1391
+ const responseInstance = new Response(response2.body, response2);
1392
+ const responseBodyBuffer = await responseInstance.arrayBuffer();
1393
+ const responseBody = response2.body == null ? null : responseBodyBuffer;
1394
+ messageChannel.postMessage("MOCK_RESPONSE", __spreadProps(__spreadValues({}, response2), {
1395
+ body: responseBody
1396
+ }), [responseBodyBuffer]);
1422
1397
  },
1423
1398
  onMockedResponseSent(response2, { handler, publicRequest, parsedRequest }) {
1424
1399
  if (options.quiet) {
@@ -1429,25 +1404,29 @@ var createRequestListener = (context, options) => {
1429
1404
  });
1430
1405
  } catch (error2) {
1431
1406
  if (error2 instanceof NetworkError) {
1432
- return messageChannel.send({
1433
- type: "NETWORK_ERROR",
1434
- payload: {
1435
- name: error2.name,
1436
- message: error2.message
1437
- }
1407
+ messageChannel.postMessage("NETWORK_ERROR", {
1408
+ name: error2.name,
1409
+ message: error2.message
1438
1410
  });
1411
+ return;
1439
1412
  }
1440
1413
  if (error2 instanceof Error) {
1441
- messageChannel.send({
1442
- type: "INTERNAL_ERROR",
1443
- payload: {
1444
- status: 500,
1445
- body: JSON.stringify({
1446
- errorType: error2.constructor.name,
1447
- message: error2.message,
1448
- location: error2.stack
1449
- })
1450
- }
1414
+ devUtils.error(`Uncaught exception in the request handler for "%s %s":
1415
+
1416
+ %s
1417
+
1418
+ 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);
1419
+ messageChannel.postMessage("MOCK_RESPONSE", {
1420
+ status: 500,
1421
+ statusText: "Request Handler Error",
1422
+ headers: {
1423
+ "Content-Type": "application/json"
1424
+ },
1425
+ body: JSON.stringify({
1426
+ name: error2.name,
1427
+ message: error2.message,
1428
+ stack: error2.stack
1429
+ })
1451
1430
  });
1452
1431
  }
1453
1432
  }
@@ -1467,8 +1446,8 @@ function transformResponse(response2) {
1467
1446
  async function requestIntegrityCheck(context, serviceWorker) {
1468
1447
  context.workerChannel.send("INTEGRITY_CHECK_REQUEST");
1469
1448
  const { payload: actualChecksum } = await context.events.once("INTEGRITY_CHECK_RESPONSE");
1470
- if (actualChecksum !== "c9450df6e4dc5e45740c3b0b640727a2") {
1471
- throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"c9450df6e4dc5e45740c3b0b640727a2"}).`);
1449
+ if (actualChecksum !== "b3066ef78c2f9090b4ce87e874965995") {
1450
+ throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"b3066ef78c2f9090b4ce87e874965995"}).`);
1472
1451
  }
1473
1452
  return serviceWorker;
1474
1453
  }
@@ -1646,43 +1625,18 @@ function prepareStartHandler(handler, context) {
1646
1625
  }
1647
1626
 
1648
1627
  // src/setupWorker/start/createFallbackRequestListener.ts
1649
- var import_interceptors = require("@mswjs/interceptors");
1628
+ var import_interceptors3 = require("@mswjs/interceptors");
1650
1629
  var import_fetch3 = require("@mswjs/interceptors/lib/interceptors/fetch");
1651
1630
  var import_XMLHttpRequest = require("@mswjs/interceptors/lib/interceptors/XMLHttpRequest");
1652
-
1653
- // src/utils/request/parseIsomorphicRequest.ts
1654
- function parseIsomorphicRequest(request) {
1655
- const mockedRequest = {
1656
- id: request.id,
1657
- url: request.url,
1658
- method: request.method,
1659
- body: parseBody(request.body, request.headers),
1660
- credentials: request.credentials || "same-origin",
1661
- headers: request.headers,
1662
- cookies: {},
1663
- redirect: "manual",
1664
- referrer: "",
1665
- keepalive: false,
1666
- cache: "default",
1667
- mode: "cors",
1668
- referrerPolicy: "no-referrer",
1669
- integrity: "",
1670
- destination: "document",
1671
- bodyUsed: false,
1672
- passthrough
1673
- };
1674
- setRequestCookies(mockedRequest);
1675
- return mockedRequest;
1676
- }
1677
-
1678
- // src/setupWorker/start/createFallbackRequestListener.ts
1679
1631
  function createFallbackRequestListener(context, options) {
1680
- const interceptor = new import_interceptors.BatchInterceptor({
1632
+ const interceptor = new import_interceptors3.BatchInterceptor({
1681
1633
  name: "fallback",
1682
1634
  interceptors: [new import_fetch3.FetchInterceptor(), new import_XMLHttpRequest.XMLHttpRequestInterceptor()]
1683
1635
  });
1684
1636
  interceptor.on("request", async (request) => {
1685
- const mockedRequest = parseIsomorphicRequest(request);
1637
+ const mockedRequest = new MockedRequest(request.url, __spreadProps(__spreadValues({}, request), {
1638
+ body: await request.arrayBuffer()
1639
+ }));
1686
1640
  const response2 = await handleRequest(mockedRequest, context.requestHandlers, options, context.emitter, {
1687
1641
  transformResponse(response3) {
1688
1642
  return {
@@ -1767,7 +1721,7 @@ function setupWorker(...requestHandlers) {
1767
1721
  if (event.source !== context.worker) {
1768
1722
  return;
1769
1723
  }
1770
- const message = jsonParse(event.data);
1724
+ const message = event.data;
1771
1725
  if (!message) {
1772
1726
  return;
1773
1727
  }
@@ -1800,7 +1754,7 @@ function setupWorker(...requestHandlers) {
1800
1754
  return new Promise((resolve, reject) => {
1801
1755
  const handleIncomingMessage = (event) => {
1802
1756
  try {
1803
- const message = JSON.parse(event.data);
1757
+ const message = event.data;
1804
1758
  if (message.type === eventType) {
1805
1759
  resolve(message);
1806
1760
  }
@@ -1911,6 +1865,7 @@ var graphql = __spreadProps(__spreadValues({}, standardGraphQLHandlers), {
1911
1865
  // Annotate the CommonJS export names for ESM import in node:
1912
1866
  0 && (module.exports = {
1913
1867
  GraphQLHandler,
1868
+ MockedRequest,
1914
1869
  RESTMethods,
1915
1870
  RequestHandler,
1916
1871
  RestHandler,
@@ -1924,7 +1879,6 @@ var graphql = __spreadProps(__spreadValues({}, standardGraphQLHandlers), {
1924
1879
  graphqlContext,
1925
1880
  handleRequest,
1926
1881
  matchRequestUrl,
1927
- parseIsomorphicRequest,
1928
1882
  response,
1929
1883
  rest,
1930
1884
  restContext,