msw 0.42.3 → 0.44.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
@@ -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,
@@ -122,7 +122,7 @@ var cookieUtils = __toESM(require("cookie"));
122
122
  var cookie = (name, value, options) => {
123
123
  return (res) => {
124
124
  const serializedCookie = cookieUtils.serialize(name, value, options);
125
- res.headers.set("Set-Cookie", serializedCookie);
125
+ res.headers.append("Set-Cookie", serializedCookie);
126
126
  if (typeof document !== "undefined") {
127
127
  document.cookie = serializedCookie;
128
128
  }
@@ -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 {
@@ -445,166 +446,15 @@ var NetworkError = class extends Error {
445
446
  };
446
447
 
447
448
  // src/utils/request/parseWorkerRequest.ts
448
- var import_headers_polyfill6 = require("headers-polyfill");
449
-
450
- // src/handlers/RequestHandler.ts
449
+ var import_interceptors2 = require("@mswjs/interceptors");
451
450
  var import_headers_polyfill4 = require("headers-polyfill");
452
451
 
453
- // src/response.ts
454
- var import_headers_polyfill3 = require("headers-polyfill");
455
-
456
- // src/utils/internal/compose.ts
457
- function compose(...fns) {
458
- return (...args) => {
459
- return fns.reduceRight((leftFn, rightFn) => {
460
- return leftFn instanceof Promise ? Promise.resolve(leftFn).then(rightFn) : rightFn(leftFn);
461
- }, args[0]);
462
- };
463
- }
464
-
465
- // src/response.ts
466
- var defaultResponse = {
467
- status: 200,
468
- statusText: "OK",
469
- body: null,
470
- delay: 0,
471
- once: false,
472
- passthrough: false
473
- };
474
- var defaultResponseTransformers = [];
475
- function createResponseComposition(responseOverrides, defaultTransformers = defaultResponseTransformers) {
476
- return async (...transformers) => {
477
- const initialResponse = Object.assign({}, defaultResponse, {
478
- headers: new import_headers_polyfill3.Headers({
479
- "x-powered-by": "msw"
480
- })
481
- }, responseOverrides);
482
- const resolvedTransformers = [
483
- ...defaultTransformers,
484
- ...transformers
485
- ].filter(Boolean);
486
- const resolvedResponse = resolvedTransformers.length > 0 ? compose(...resolvedTransformers)(initialResponse) : initialResponse;
487
- return resolvedResponse;
488
- };
489
- }
490
- var response = Object.assign(createResponseComposition(), {
491
- once: createResponseComposition({ once: true }),
492
- networkError(message) {
493
- throw new NetworkError(message);
494
- }
495
- });
496
-
497
- // src/utils/internal/getCallFrame.ts
498
- var SOURCE_FRAME = /\/msw\/src\/(.+)/;
499
- var BUILD_FRAME = /(node_modules)?[\/\\]lib[\/\\](umd|esm|iief|cjs)[\/\\]|^[^\/\\]*$/;
500
- function getCallFrame(error2) {
501
- const stack = error2.stack;
502
- if (!stack) {
503
- return;
504
- }
505
- const frames = stack.split("\n").slice(1);
506
- const declarationFrame = frames.find((frame) => {
507
- return !(SOURCE_FRAME.test(frame) || BUILD_FRAME.test(frame));
508
- });
509
- if (!declarationFrame) {
510
- return;
511
- }
512
- const declarationPath = declarationFrame.replace(/\s*at [^()]*\(([^)]+)\)/, "$1").replace(/^@/, "");
513
- return declarationPath;
514
- }
515
-
516
- // src/utils/internal/isIterable.ts
517
- function isIterable(fn) {
518
- if (!fn) {
519
- return false;
520
- }
521
- return typeof fn[Symbol.iterator] == "function";
522
- }
523
-
524
- // src/handlers/RequestHandler.ts
525
- var defaultContext = {
526
- status,
527
- set,
528
- delay,
529
- fetch
530
- };
531
- var RequestHandler = class {
532
- constructor(options) {
533
- this.shouldSkip = false;
534
- this.ctx = options.ctx || defaultContext;
535
- this.resolver = options.resolver;
536
- const callFrame = getCallFrame(new Error());
537
- this.info = __spreadProps(__spreadValues({}, options.info), {
538
- callFrame
539
- });
540
- }
541
- parse(_request, _resolutionContext) {
542
- return null;
543
- }
544
- test(request, resolutionContext) {
545
- return this.predicate(request, this.parse(request, resolutionContext), resolutionContext);
546
- }
547
- getPublicRequest(request, _parsedResult) {
548
- return request;
549
- }
550
- markAsSkipped(shouldSkip = true) {
551
- this.shouldSkip = shouldSkip;
552
- }
553
- async run(request, resolutionContext) {
554
- if (this.shouldSkip) {
555
- return null;
556
- }
557
- const parsedResult = this.parse(request, resolutionContext);
558
- const shouldIntercept = this.predicate(request, parsedResult, resolutionContext);
559
- if (!shouldIntercept) {
560
- return null;
561
- }
562
- const publicRequest = this.getPublicRequest(request, parsedResult);
563
- const executeResolver = this.wrapResolver(this.resolver);
564
- const mockedResponse = await executeResolver(publicRequest, response, this.ctx);
565
- return this.createExecutionResult(parsedResult, publicRequest, mockedResponse);
566
- }
567
- wrapResolver(resolver) {
568
- return async (req, res, ctx) => {
569
- const result = this.resolverGenerator || await resolver(req, res, ctx);
570
- if (isIterable(result)) {
571
- const { value, done } = result[Symbol.iterator]().next();
572
- const nextResponse = await value;
573
- if (!nextResponse && done) {
574
- return this.resolverGeneratorResult;
575
- }
576
- if (!this.resolverGenerator) {
577
- this.resolverGenerator = result;
578
- }
579
- this.resolverGeneratorResult = nextResponse;
580
- return nextResponse;
581
- }
582
- return result;
583
- };
584
- }
585
- createExecutionResult(parsedResult, request, response2) {
586
- return {
587
- handler: this,
588
- parsedResult: parsedResult || null,
589
- request,
590
- response: response2 || null
591
- };
592
- }
593
- };
594
- function passthrough() {
595
- return {
596
- status: 101,
597
- statusText: "Continue",
598
- headers: new import_headers_polyfill4.Headers(),
599
- body: null,
600
- passthrough: true,
601
- once: false
602
- };
603
- }
604
-
605
- // src/utils/request/setRequestCookies.ts
452
+ // src/utils/request/MockedRequest.ts
606
453
  var cookieUtils3 = __toESM(require("cookie"));
607
454
  var import_cookies = require("@mswjs/cookies");
455
+ var import_interceptors = require("@mswjs/interceptors");
456
+ var import_bufferUtils = require("@mswjs/interceptors/lib/utils/bufferUtils");
457
+ var import_lib = require("headers-polyfill/lib");
608
458
 
609
459
  // src/utils/request/getRequestCookies.ts
610
460
  var cookieUtils2 = __toESM(require("cookie"));
@@ -628,28 +478,11 @@ function getRequestCookies(request) {
628
478
  }
629
479
  }
630
480
 
631
- // src/utils/request/setRequestCookies.ts
632
- function setRequestCookies(request) {
633
- var _a;
634
- const requestCookiesString = request.headers.get("cookie");
635
- import_cookies.store.hydrate();
636
- 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 }]) => {
637
- return Object.assign(cookies, { [name.trim()]: value });
638
- }, {});
639
- const cookiesFromDocument = getRequestCookies(request);
640
- const forwardedCookies = __spreadValues(__spreadValues({}, cookiesFromDocument), cookiesFromStore);
641
- for (const [name, value] of Object.entries(forwardedCookies)) {
642
- request.headers.append("cookie", `${name}=${value}`);
643
- }
644
- const ownCookies = requestCookiesString ? cookieUtils3.parse(requestCookiesString) : {};
645
- request.cookies = __spreadValues(__spreadValues(__spreadValues({}, request.cookies), forwardedCookies), ownCookies);
646
- }
647
-
648
481
  // src/utils/internal/parseMultipartData.ts
649
- var import_headers_polyfill5 = require("headers-polyfill");
482
+ var import_headers_polyfill3 = require("headers-polyfill");
650
483
  function parseContentHeaders(headersString) {
651
484
  var _a, _b;
652
- const headers = (0, import_headers_polyfill5.stringToHeaders)(headersString);
485
+ const headers = (0, import_headers_polyfill3.stringToHeaders)(headersString);
653
486
  const contentType = headers.get("content-type") || "text/plain";
654
487
  const disposition = headers.get("content-disposition");
655
488
  if (!disposition) {
@@ -728,39 +561,74 @@ function isStringEqual(actual, expected) {
728
561
  return actual.toLowerCase() === expected.toLowerCase();
729
562
  }
730
563
 
731
- // src/utils/request/pruneGetRequestBody.ts
732
- function pruneGetRequestBody(request) {
733
- if (request.method && isStringEqual(request.method, "GET") && request.body === "") {
734
- return void 0;
564
+ // src/utils/request/MockedRequest.ts
565
+ var MockedRequest = class extends import_interceptors.IsomorphicRequest {
566
+ constructor(input, init = {}) {
567
+ var __super = (...args) => {
568
+ super(...args);
569
+ };
570
+ if (input instanceof import_interceptors.IsomorphicRequest) {
571
+ __super(input);
572
+ } else {
573
+ __super(input, init);
574
+ }
575
+ if (init.id) {
576
+ this.id = init.id;
577
+ }
578
+ this.cache = init.cache || "default";
579
+ this.destination = init.destination || "";
580
+ this.integrity = init.integrity || "";
581
+ this.keepalive = init.keepalive || false;
582
+ this.mode = init.mode || "cors";
583
+ this.priority = init.priority || "auto";
584
+ this.redirect = init.redirect || "follow";
585
+ this.referrer = init.referrer || "";
586
+ this.referrerPolicy = init.referrerPolicy || "no-referrer";
587
+ this.cookies = init.cookies || this.getCookies();
588
+ }
589
+ get body() {
590
+ const text2 = (0, import_bufferUtils.decodeBuffer)(this["_body"]);
591
+ const body2 = parseBody(text2, this.headers);
592
+ if (isStringEqual(this.method, "GET") && body2 === "") {
593
+ return void 0;
594
+ }
595
+ return body2;
735
596
  }
736
- return request.body;
737
- }
597
+ passthrough() {
598
+ return {
599
+ status: 101,
600
+ statusText: "Continue",
601
+ headers: new import_lib.Headers(),
602
+ body: null,
603
+ passthrough: true,
604
+ once: false
605
+ };
606
+ }
607
+ getCookies() {
608
+ var _a;
609
+ const requestCookiesString = this.headers.get("cookie");
610
+ const ownCookies = requestCookiesString ? cookieUtils3.parse(requestCookiesString) : {};
611
+ import_cookies.store.hydrate();
612
+ 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 }]) => {
613
+ return Object.assign(cookies, { [name.trim()]: value });
614
+ }, {});
615
+ const cookiesFromDocument = getRequestCookies(this);
616
+ const forwardedCookies = __spreadValues(__spreadValues({}, cookiesFromDocument), cookiesFromStore);
617
+ for (const [name, value] of Object.entries(forwardedCookies)) {
618
+ this.headers.append("cookie", `${name}=${value}`);
619
+ }
620
+ return __spreadValues(__spreadValues({}, forwardedCookies), ownCookies);
621
+ }
622
+ };
738
623
 
739
624
  // src/utils/request/parseWorkerRequest.ts
740
625
  function parseWorkerRequest(rawRequest) {
741
- const request = {
742
- id: rawRequest.id,
743
- cache: rawRequest.cache,
744
- credentials: rawRequest.credentials,
745
- method: rawRequest.method,
746
- url: new URL(rawRequest.url),
747
- referrer: rawRequest.referrer,
748
- referrerPolicy: rawRequest.referrerPolicy,
749
- redirect: rawRequest.redirect,
750
- mode: rawRequest.mode,
751
- params: {},
752
- cookies: {},
753
- integrity: rawRequest.integrity,
754
- keepalive: rawRequest.keepalive,
755
- destination: rawRequest.destination,
756
- body: pruneGetRequestBody(rawRequest),
757
- bodyUsed: rawRequest.bodyUsed,
758
- headers: new import_headers_polyfill6.Headers(rawRequest.headers),
759
- passthrough
760
- };
761
- setRequestCookies(request);
762
- request.body = parseBody(request.body, request.headers);
763
- return request;
626
+ const url = new URL(rawRequest.url);
627
+ const headers = new import_headers_polyfill4.Headers(rawRequest.headers);
628
+ return new MockedRequest(url, __spreadProps(__spreadValues({}, rawRequest), {
629
+ body: (0, import_interceptors2.encodeBuffer)(rawRequest.body || ""),
630
+ headers
631
+ }));
764
632
  }
765
633
 
766
634
  // src/utils/handleRequest.ts
@@ -939,14 +807,15 @@ function getTimestamp() {
939
807
  // src/utils/logging/prepareRequest.ts
940
808
  function prepareRequest(request) {
941
809
  return __spreadProps(__spreadValues({}, request), {
810
+ body: request.body,
942
811
  headers: request.headers.all()
943
812
  });
944
813
  }
945
814
 
946
815
  // src/utils/logging/prepareResponse.ts
947
- var import_headers_polyfill7 = require("headers-polyfill");
816
+ var import_headers_polyfill5 = require("headers-polyfill");
948
817
  function prepareResponse(res) {
949
- const responseHeaders = (0, import_headers_polyfill7.objectToHeaders)(res.headers);
818
+ const responseHeaders = (0, import_headers_polyfill5.objectToHeaders)(res.headers);
950
819
  return __spreadProps(__spreadValues({}, res), {
951
820
  body: parseBody(res.body, responseHeaders)
952
821
  });
@@ -1013,6 +882,151 @@ function matchRequestUrl(url, path, baseUrl) {
1013
882
  };
1014
883
  }
1015
884
 
885
+ // src/handlers/RequestHandler.ts
886
+ var import_headers_polyfill7 = require("headers-polyfill");
887
+
888
+ // src/response.ts
889
+ var import_headers_polyfill6 = require("headers-polyfill");
890
+
891
+ // src/utils/internal/compose.ts
892
+ function compose(...fns) {
893
+ return (...args) => {
894
+ return fns.reduceRight((leftFn, rightFn) => {
895
+ return leftFn instanceof Promise ? Promise.resolve(leftFn).then(rightFn) : rightFn(leftFn);
896
+ }, args[0]);
897
+ };
898
+ }
899
+
900
+ // src/response.ts
901
+ var defaultResponse = {
902
+ status: 200,
903
+ statusText: "OK",
904
+ body: null,
905
+ delay: 0,
906
+ once: false,
907
+ passthrough: false
908
+ };
909
+ var defaultResponseTransformers = [];
910
+ function createResponseComposition(responseOverrides, defaultTransformers = defaultResponseTransformers) {
911
+ return async (...transformers) => {
912
+ const initialResponse = Object.assign({}, defaultResponse, {
913
+ headers: new import_headers_polyfill6.Headers({
914
+ "x-powered-by": "msw"
915
+ })
916
+ }, responseOverrides);
917
+ const resolvedTransformers = [
918
+ ...defaultTransformers,
919
+ ...transformers
920
+ ].filter(Boolean);
921
+ const resolvedResponse = resolvedTransformers.length > 0 ? compose(...resolvedTransformers)(initialResponse) : initialResponse;
922
+ return resolvedResponse;
923
+ };
924
+ }
925
+ var response = Object.assign(createResponseComposition(), {
926
+ once: createResponseComposition({ once: true }),
927
+ networkError(message) {
928
+ throw new NetworkError(message);
929
+ }
930
+ });
931
+
932
+ // src/utils/internal/getCallFrame.ts
933
+ var SOURCE_FRAME = /\/msw\/src\/(.+)/;
934
+ var BUILD_FRAME = /(node_modules)?[\/\\]lib[\/\\](umd|esm|iief|cjs)[\/\\]|^[^\/\\]*$/;
935
+ function getCallFrame(error2) {
936
+ const stack = error2.stack;
937
+ if (!stack) {
938
+ return;
939
+ }
940
+ const frames = stack.split("\n").slice(1);
941
+ const declarationFrame = frames.find((frame) => {
942
+ return !(SOURCE_FRAME.test(frame) || BUILD_FRAME.test(frame));
943
+ });
944
+ if (!declarationFrame) {
945
+ return;
946
+ }
947
+ const declarationPath = declarationFrame.replace(/\s*at [^()]*\(([^)]+)\)/, "$1").replace(/^@/, "");
948
+ return declarationPath;
949
+ }
950
+
951
+ // src/utils/internal/isIterable.ts
952
+ function isIterable(fn) {
953
+ if (!fn) {
954
+ return false;
955
+ }
956
+ return typeof fn[Symbol.iterator] == "function";
957
+ }
958
+
959
+ // src/handlers/RequestHandler.ts
960
+ var defaultContext = {
961
+ status,
962
+ set,
963
+ delay,
964
+ fetch
965
+ };
966
+ var RequestHandler = class {
967
+ constructor(options) {
968
+ this.shouldSkip = false;
969
+ this.ctx = options.ctx || defaultContext;
970
+ this.resolver = options.resolver;
971
+ const callFrame = getCallFrame(new Error());
972
+ this.info = __spreadProps(__spreadValues({}, options.info), {
973
+ callFrame
974
+ });
975
+ }
976
+ parse(_request, _resolutionContext) {
977
+ return null;
978
+ }
979
+ test(request, resolutionContext) {
980
+ return this.predicate(request, this.parse(request, resolutionContext), resolutionContext);
981
+ }
982
+ getPublicRequest(request, _parsedResult) {
983
+ return request;
984
+ }
985
+ markAsSkipped(shouldSkip = true) {
986
+ this.shouldSkip = shouldSkip;
987
+ }
988
+ async run(request, resolutionContext) {
989
+ if (this.shouldSkip) {
990
+ return null;
991
+ }
992
+ const parsedResult = this.parse(request, resolutionContext);
993
+ const shouldIntercept = this.predicate(request, parsedResult, resolutionContext);
994
+ if (!shouldIntercept) {
995
+ return null;
996
+ }
997
+ const publicRequest = this.getPublicRequest(request, parsedResult);
998
+ const executeResolver = this.wrapResolver(this.resolver);
999
+ const mockedResponse = await executeResolver(publicRequest, response, this.ctx);
1000
+ return this.createExecutionResult(parsedResult, publicRequest, mockedResponse);
1001
+ }
1002
+ wrapResolver(resolver) {
1003
+ return async (req, res, ctx) => {
1004
+ const result = this.resolverGenerator || await resolver(req, res, ctx);
1005
+ if (isIterable(result)) {
1006
+ const { value, done } = result[Symbol.iterator]().next();
1007
+ const nextResponse = await value;
1008
+ if (!nextResponse && done) {
1009
+ return this.resolverGeneratorResult;
1010
+ }
1011
+ if (!this.resolverGenerator) {
1012
+ this.resolverGenerator = result;
1013
+ }
1014
+ this.resolverGeneratorResult = nextResponse;
1015
+ return nextResponse;
1016
+ }
1017
+ return result;
1018
+ };
1019
+ }
1020
+ createExecutionResult(parsedResult, request, response2) {
1021
+ return {
1022
+ handler: this,
1023
+ parsedResult: parsedResult || null,
1024
+ request,
1025
+ response: response2 || null
1026
+ };
1027
+ }
1028
+ };
1029
+
1016
1030
  // src/handlers/RestHandler.ts
1017
1031
  var RESTMethods = /* @__PURE__ */ ((RESTMethods2) => {
1018
1032
  RESTMethods2["HEAD"] = "HEAD";
@@ -1031,6 +1045,15 @@ var restContext = __spreadProps(__spreadValues({}, defaultContext), {
1031
1045
  json,
1032
1046
  xml
1033
1047
  });
1048
+ var RestRequest = class extends MockedRequest {
1049
+ constructor(request, params) {
1050
+ super(request.url, __spreadProps(__spreadValues({}, request), {
1051
+ body: request["_body"]
1052
+ }));
1053
+ this.params = params;
1054
+ this.id = request.id;
1055
+ }
1056
+ };
1034
1057
  var RestHandler = class extends RequestHandler {
1035
1058
  constructor(method, path, resolver) {
1036
1059
  super({
@@ -1064,9 +1087,7 @@ var RestHandler = class extends RequestHandler {
1064
1087
  return matchRequestUrl(request.url, this.info.path, resolutionContext == null ? void 0 : resolutionContext.baseUrl);
1065
1088
  }
1066
1089
  getPublicRequest(request, parsedResult) {
1067
- return __spreadProps(__spreadValues({}, request), {
1068
- params: parsedResult.params || {}
1069
- });
1090
+ return new RestRequest(request, parsedResult.params || {});
1070
1091
  }
1071
1092
  predicate(request, parsedResult) {
1072
1093
  const matchesMethod = this.info.method instanceof RegExp ? this.info.method.test(request.method) : isStringEqual(this.info.method, request.method);
@@ -1129,6 +1150,14 @@ function isDocumentNode(value) {
1129
1150
  }
1130
1151
  return typeof value === "object" && "kind" in value && "definitions" in value;
1131
1152
  }
1153
+ var GraphQLRequest = class extends MockedRequest {
1154
+ constructor(request, variables) {
1155
+ super(request.url, __spreadProps(__spreadValues({}, request), {
1156
+ body: request["_body"]
1157
+ }));
1158
+ this.variables = variables;
1159
+ }
1160
+ };
1132
1161
  var GraphQLHandler = class extends RequestHandler {
1133
1162
  constructor(operationType, operationName, endpoint, resolver) {
1134
1163
  let resolvedOperationName = operationName;
@@ -1158,9 +1187,7 @@ var GraphQLHandler = class extends RequestHandler {
1158
1187
  return tryCatch(() => parseGraphQLRequest(request), (error2) => console.error(error2.message));
1159
1188
  }
1160
1189
  getPublicRequest(request, parsedResult) {
1161
- return __spreadProps(__spreadValues({}, request), {
1162
- variables: (parsedResult == null ? void 0 : parsedResult.variables) || {}
1163
- });
1190
+ return new GraphQLRequest(request, (parsedResult == null ? void 0 : parsedResult.variables) || {});
1164
1191
  }
1165
1192
  predicate(request, parsedResult) {
1166
1193
  if (!parsedResult) {
@@ -1355,24 +1382,69 @@ async function handleRequest(request, handlers, options, emitter, handleRequestO
1355
1382
  return transformedResponse;
1356
1383
  }
1357
1384
 
1358
- // src/utils/worker/createRequestListener.ts
1385
+ // src/setupWorker/start/utils/streamResponse.ts
1386
+ var import_outvariant3 = require("outvariant");
1387
+ async function streamResponse(operationChannel, messageChannel, mockedResponse) {
1388
+ const response2 = new Response(mockedResponse.body, mockedResponse);
1389
+ delete mockedResponse.body;
1390
+ messageChannel.send({
1391
+ type: "MOCK_RESPONSE_START",
1392
+ payload: mockedResponse
1393
+ });
1394
+ (0, import_outvariant3.invariant)(response2.body, "Failed to stream mocked response with no body");
1395
+ const reader = response2.body.getReader();
1396
+ while (true) {
1397
+ const { done, value } = await reader.read();
1398
+ if (!done) {
1399
+ operationChannel.postMessage({
1400
+ type: "MOCK_RESPONSE_CHUNK",
1401
+ payload: value
1402
+ });
1403
+ continue;
1404
+ }
1405
+ operationChannel.postMessage({
1406
+ type: "MOCK_RESPONSE_END"
1407
+ });
1408
+ operationChannel.close();
1409
+ reader.releaseLock();
1410
+ break;
1411
+ }
1412
+ }
1413
+
1414
+ // src/utils/internal/StrictBroadcastChannel.ts
1415
+ var ParentClass = typeof BroadcastChannel == "undefined" ? class UnsupportedEnvironment {
1416
+ constructor() {
1417
+ throw new Error("Cannot construct BroadcastChannel in a non-browser environment");
1418
+ }
1419
+ } : BroadcastChannel;
1420
+ var StrictBroadcastChannel = class extends ParentClass {
1421
+ postMessage(message) {
1422
+ return super.postMessage(message);
1423
+ }
1424
+ };
1425
+
1426
+ // src/setupWorker/start/createRequestListener.ts
1359
1427
  var createRequestListener = (context, options) => {
1360
1428
  return async (event, message) => {
1361
- const channel = createBroadcastChannel(event);
1429
+ const messageChannel = createMessageChannel(event);
1362
1430
  try {
1363
1431
  const request = parseWorkerRequest(message.payload);
1432
+ const operationChannel = new StrictBroadcastChannel(`msw-response-stream-${request.id}`);
1364
1433
  await handleRequest(request, context.requestHandlers, options, context.emitter, {
1365
1434
  transformResponse,
1366
1435
  onPassthroughResponse() {
1367
- return channel.send({
1436
+ return messageChannel.send({
1368
1437
  type: "MOCK_NOT_FOUND"
1369
1438
  });
1370
1439
  },
1371
1440
  onMockedResponse(response2) {
1372
- channel.send({
1373
- type: "MOCK_SUCCESS",
1374
- payload: response2
1375
- });
1441
+ if (response2.body == null) {
1442
+ return messageChannel.send({
1443
+ type: "MOCK_RESPONSE",
1444
+ payload: response2
1445
+ });
1446
+ }
1447
+ streamResponse(operationChannel, messageChannel, response2);
1376
1448
  },
1377
1449
  onMockedResponseSent(response2, { handler, publicRequest, parsedRequest }) {
1378
1450
  if (options.quiet) {
@@ -1383,7 +1455,7 @@ var createRequestListener = (context, options) => {
1383
1455
  });
1384
1456
  } catch (error2) {
1385
1457
  if (error2 instanceof NetworkError) {
1386
- return channel.send({
1458
+ return messageChannel.send({
1387
1459
  type: "NETWORK_ERROR",
1388
1460
  payload: {
1389
1461
  name: error2.name,
@@ -1392,7 +1464,7 @@ var createRequestListener = (context, options) => {
1392
1464
  });
1393
1465
  }
1394
1466
  if (error2 instanceof Error) {
1395
- channel.send({
1467
+ messageChannel.send({
1396
1468
  type: "INTERNAL_ERROR",
1397
1469
  payload: {
1398
1470
  status: 500,
@@ -1421,8 +1493,8 @@ function transformResponse(response2) {
1421
1493
  async function requestIntegrityCheck(context, serviceWorker) {
1422
1494
  context.workerChannel.send("INTEGRITY_CHECK_REQUEST");
1423
1495
  const { payload: actualChecksum } = await context.events.once("INTEGRITY_CHECK_RESPONSE");
1424
- if (actualChecksum !== "02f4ad4a2797f85668baf196e553d929") {
1425
- throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"02f4ad4a2797f85668baf196e553d929"}).`);
1496
+ if (actualChecksum !== "df0d85222361310ecbe1792c606e08f2") {
1497
+ throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"df0d85222361310ecbe1792c606e08f2"}).`);
1426
1498
  }
1427
1499
  return serviceWorker;
1428
1500
  }
@@ -1445,7 +1517,7 @@ function deferNetworkRequestsUntil(predicatePromise) {
1445
1517
  };
1446
1518
  }
1447
1519
 
1448
- // src/utils/worker/createResponseListener.ts
1520
+ // src/setupWorker/start/createResponseListener.ts
1449
1521
  function createResponseListener(context) {
1450
1522
  return (_, message) => {
1451
1523
  var _a;
@@ -1599,44 +1671,17 @@ function prepareStartHandler(handler, context) {
1599
1671
  };
1600
1672
  }
1601
1673
 
1602
- // src/utils/worker/createFallbackRequestListener.ts
1603
- var import_interceptors = require("@mswjs/interceptors");
1674
+ // src/setupWorker/start/createFallbackRequestListener.ts
1675
+ var import_interceptors3 = require("@mswjs/interceptors");
1604
1676
  var import_fetch3 = require("@mswjs/interceptors/lib/interceptors/fetch");
1605
1677
  var import_XMLHttpRequest = require("@mswjs/interceptors/lib/interceptors/XMLHttpRequest");
1606
-
1607
- // src/utils/request/parseIsomorphicRequest.ts
1608
- function parseIsomorphicRequest(request) {
1609
- const mockedRequest = {
1610
- id: request.id,
1611
- url: request.url,
1612
- method: request.method,
1613
- body: parseBody(request.body, request.headers),
1614
- credentials: request.credentials || "same-origin",
1615
- headers: request.headers,
1616
- cookies: {},
1617
- redirect: "manual",
1618
- referrer: "",
1619
- keepalive: false,
1620
- cache: "default",
1621
- mode: "cors",
1622
- referrerPolicy: "no-referrer",
1623
- integrity: "",
1624
- destination: "document",
1625
- bodyUsed: false,
1626
- passthrough
1627
- };
1628
- setRequestCookies(mockedRequest);
1629
- return mockedRequest;
1630
- }
1631
-
1632
- // src/utils/worker/createFallbackRequestListener.ts
1633
1678
  function createFallbackRequestListener(context, options) {
1634
- const interceptor = new import_interceptors.BatchInterceptor({
1679
+ const interceptor = new import_interceptors3.BatchInterceptor({
1635
1680
  name: "fallback",
1636
1681
  interceptors: [new import_fetch3.FetchInterceptor(), new import_XMLHttpRequest.XMLHttpRequestInterceptor()]
1637
1682
  });
1638
1683
  interceptor.on("request", async (request) => {
1639
- const mockedRequest = parseIsomorphicRequest(request);
1684
+ const mockedRequest = new MockedRequest(request);
1640
1685
  const response2 = await handleRequest(mockedRequest, context.requestHandlers, options, context.emitter, {
1641
1686
  transformResponse(response3) {
1642
1687
  return {
@@ -1721,7 +1766,7 @@ function setupWorker(...requestHandlers) {
1721
1766
  if (event.source !== context.worker) {
1722
1767
  return;
1723
1768
  }
1724
- const message = jsonParse(event.data);
1769
+ const message = event.data;
1725
1770
  if (!message) {
1726
1771
  return;
1727
1772
  }
@@ -1754,7 +1799,7 @@ function setupWorker(...requestHandlers) {
1754
1799
  return new Promise((resolve, reject) => {
1755
1800
  const handleIncomingMessage = (event) => {
1756
1801
  try {
1757
- const message = JSON.parse(event.data);
1802
+ const message = event.data;
1758
1803
  if (message.type === eventType) {
1759
1804
  resolve(message);
1760
1805
  }
@@ -1865,6 +1910,7 @@ var graphql = __spreadProps(__spreadValues({}, standardGraphQLHandlers), {
1865
1910
  // Annotate the CommonJS export names for ESM import in node:
1866
1911
  0 && (module.exports = {
1867
1912
  GraphQLHandler,
1913
+ MockedRequest,
1868
1914
  RESTMethods,
1869
1915
  RequestHandler,
1870
1916
  RestHandler,
@@ -1878,7 +1924,6 @@ var graphql = __spreadProps(__spreadValues({}, standardGraphQLHandlers), {
1878
1924
  graphqlContext,
1879
1925
  handleRequest,
1880
1926
  matchRequestUrl,
1881
- parseIsomorphicRequest,
1882
1927
  response,
1883
1928
  rest,
1884
1929
  restContext,