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/README.md +10 -1
- package/lib/{glossary-58eca5a8.d.ts → glossary-17949ef9.d.ts} +49 -26
- package/lib/iife/index.js +4777 -2157
- package/lib/iife/index.js.map +1 -1
- package/lib/index.d.ts +11 -14
- package/lib/index.js +310 -265
- package/lib/index.js.map +1 -1
- package/lib/mockServiceWorker.js +163 -134
- package/lib/native/index.d.ts +1 -1
- package/lib/native/index.js +486 -459
- package/lib/native/index.mjs +476 -449
- package/lib/node/index.d.ts +2 -2
- package/lib/node/index.js +486 -459
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +476 -449
- package/lib/node/index.mjs.map +1 -1
- package/package.json +3 -3
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.
|
|
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/
|
|
428
|
-
|
|
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
|
-
|
|
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
|
|
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/
|
|
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
|
|
482
|
+
var import_headers_polyfill3 = require("headers-polyfill");
|
|
650
483
|
function parseContentHeaders(headersString) {
|
|
651
484
|
var _a, _b;
|
|
652
|
-
const headers = (0,
|
|
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/
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
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
|
-
|
|
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
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
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
|
|
816
|
+
var import_headers_polyfill5 = require("headers-polyfill");
|
|
948
817
|
function prepareResponse(res) {
|
|
949
|
-
const responseHeaders = (0,
|
|
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
|
|
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
|
|
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/
|
|
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
|
|
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
|
|
1436
|
+
return messageChannel.send({
|
|
1368
1437
|
type: "MOCK_NOT_FOUND"
|
|
1369
1438
|
});
|
|
1370
1439
|
},
|
|
1371
1440
|
onMockedResponse(response2) {
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
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
|
|
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
|
-
|
|
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 !== "
|
|
1425
|
-
throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"
|
|
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/
|
|
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/
|
|
1603
|
-
var
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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,
|