msw 0.43.0 → 0.44.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/{glossary-58eca5a8.d.ts → glossary-297d38ba.d.ts} +48 -26
- package/lib/iife/index.js +4719 -2150
- package/lib/iife/index.js.map +1 -1
- package/lib/index.d.ts +11 -14
- package/lib/index.js +243 -249
- package/lib/index.js.map +1 -1
- package/lib/mockServiceWorker.js +3 -3
- package/lib/native/index.d.ts +1 -1
- package/lib/native/index.js +481 -459
- package/lib/native/index.mjs +471 -449
- package/lib/node/index.d.ts +2 -2
- package/lib/node/index.js +481 -459
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +471 -449
- package/lib/node/index.mjs.map +1 -1
- package/package.json +7 -4
package/lib/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { R as ResponseTransformer, s as status, a as set, d as delay, f as fetch, b as RequestHandler, S as SetupWorkerApi, D as DefaultContext, c as DefaultBodyType, M as MockedRequest, e as ResponseResolver, g as ResponseResolutionContext, h as SerializedResponse, i as RequestHandlerDefaultInfo, j as MockedResponse, k as ResponseLookupResult, l as SharedOptions, m as ServerLifecycleEventsMap } from './glossary-
|
|
2
|
-
export { A as AsyncResponseResolverReturnType, c as DefaultBodyType, u as DefaultRequestMultipartBody, y as DelayMode, M as MockedRequest, j as MockedResponse, b as RequestHandler, v as ResponseComposition, w as ResponseCompositionOptions, x as ResponseFunction, e as ResponseResolver, t as ResponseResolverReturnType, R as ResponseTransformer, S as SetupWorkerApi, l as SharedOptions, q as StartOptions, o as createResponseComposition, p as defaultContext, n as defaultResponse, r as response } from './glossary-
|
|
1
|
+
import { R as ResponseTransformer, s as status, a as set, d as delay, f as fetch, b as RequestHandler, S as SetupWorkerApi, D as DefaultContext, c as DefaultBodyType, M as MockedRequest, e as ResponseResolver, g as ResponseResolutionContext, h as SerializedResponse, i as RequestHandlerDefaultInfo, j as MockedResponse, k as ResponseLookupResult, l as SharedOptions, m as ServerLifecycleEventsMap } from './glossary-297d38ba.js';
|
|
2
|
+
export { A as AsyncResponseResolverReturnType, c as DefaultBodyType, u as DefaultRequestMultipartBody, y as DelayMode, M as MockedRequest, H as MockedRequestInit, j as MockedResponse, z as RequestCache, E as RequestDestination, b as RequestHandler, B as RequestMode, F as RequestPriority, C as RequestRedirect, G as RequestReferrerPolicy, v as ResponseComposition, w as ResponseCompositionOptions, x as ResponseFunction, e as ResponseResolver, t as ResponseResolverReturnType, R as ResponseTransformer, S as SetupWorkerApi, l as SharedOptions, q as StartOptions, o as createResponseComposition, p as defaultContext, n as defaultResponse, r as response } from './glossary-297d38ba.js';
|
|
3
3
|
import * as cookieUtils from 'cookie';
|
|
4
4
|
import { GraphQLError, OperationTypeNode, DocumentNode } from 'graphql';
|
|
5
5
|
import { StrictEventEmitter } from 'strict-event-emitter';
|
|
6
|
-
import { IsomorphicRequest } from '@mswjs/interceptors';
|
|
7
6
|
import 'type-fest';
|
|
7
|
+
import '@mswjs/interceptors';
|
|
8
8
|
import 'headers-polyfill';
|
|
9
9
|
|
|
10
10
|
declare type Path = string | RegExp;
|
|
@@ -155,10 +155,11 @@ declare const restContext: RestContext;
|
|
|
155
155
|
declare type RequestQuery = {
|
|
156
156
|
[queryName: string]: string;
|
|
157
157
|
};
|
|
158
|
-
interface RestRequest<BodyType extends DefaultBodyType = DefaultBodyType, ParamsType extends PathParams = PathParams> extends MockedRequest<BodyType> {
|
|
159
|
-
params: ParamsType;
|
|
160
|
-
}
|
|
161
158
|
declare type ParsedRestRequest = Match;
|
|
159
|
+
declare class RestRequest<RequestBody extends DefaultBodyType = DefaultBodyType, RequestParams extends PathParams = PathParams> extends MockedRequest<RequestBody> {
|
|
160
|
+
readonly params: RequestParams;
|
|
161
|
+
constructor(request: MockedRequest<RequestBody>, params: RequestParams);
|
|
162
|
+
}
|
|
162
163
|
/**
|
|
163
164
|
* Request handler for REST API requests.
|
|
164
165
|
* Provides request matching based on method and URL.
|
|
@@ -225,8 +226,9 @@ interface GraphQLJsonRequestBody<Variables extends GraphQLVariables> {
|
|
|
225
226
|
query: string;
|
|
226
227
|
variables?: Variables;
|
|
227
228
|
}
|
|
228
|
-
|
|
229
|
-
variables: Variables;
|
|
229
|
+
declare class GraphQLRequest<Variables extends GraphQLVariables> extends MockedRequest<GraphQLRequestBody<Variables>> {
|
|
230
|
+
readonly variables: Variables;
|
|
231
|
+
constructor(request: MockedRequest, variables: Variables);
|
|
230
232
|
}
|
|
231
233
|
declare class GraphQLHandler<Request extends GraphQLRequest<any> = GraphQLRequest<any>> extends RequestHandler<GraphQLHandlerInfo, Request, ParsedGraphQLRequest | null, GraphQLRequest<any>> {
|
|
232
234
|
private endpoint;
|
|
@@ -349,14 +351,9 @@ interface HandleRequestOptions<ResponseType> {
|
|
|
349
351
|
}
|
|
350
352
|
declare function handleRequest<ResponseType extends Record<string, any> = MockedResponse<string>>(request: MockedRequest, handlers: RequestHandler[], options: RequiredDeep<SharedOptions>, emitter: StrictEventEmitter<ServerLifecycleEventsMap>, handleRequestOptions?: HandleRequestOptions<ResponseType>): Promise<ResponseType | undefined>;
|
|
351
353
|
|
|
352
|
-
/**
|
|
353
|
-
* Converts a given isomorphic request to a `MockedRequest` instance.
|
|
354
|
-
*/
|
|
355
|
-
declare function parseIsomorphicRequest(request: IsomorphicRequest): MockedRequest;
|
|
356
|
-
|
|
357
354
|
/**
|
|
358
355
|
* Removes query parameters and hashes from a given URL string.
|
|
359
356
|
*/
|
|
360
357
|
declare function cleanUrl(path: string): string;
|
|
361
358
|
|
|
362
|
-
export { GraphQLContext, GraphQLHandler, GraphQLJsonRequestBody, GraphQLRequest, GraphQLRequestBody, GraphQLVariables, HandleRequestOptions, Match, ParsedGraphQLRequest, ParsedRestRequest, Path, PathParams, RESTMethods, RequestQuery, RestContext, RestHandler, RestRequest, cleanUrl, compose, index as context, graphql, graphqlContext, handleRequest, matchRequestUrl,
|
|
359
|
+
export { GraphQLContext, GraphQLHandler, GraphQLJsonRequestBody, GraphQLRequest, GraphQLRequestBody, GraphQLVariables, HandleRequestOptions, Match, ParsedGraphQLRequest, ParsedRestRequest, Path, PathParams, RESTMethods, RequestQuery, RestContext, RestHandler, RestRequest, cleanUrl, compose, index as context, graphql, graphqlContext, handleRequest, matchRequestUrl, rest, restContext, setupWorker };
|
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
|
}
|
|
@@ -446,166 +446,15 @@ var NetworkError = class extends Error {
|
|
|
446
446
|
};
|
|
447
447
|
|
|
448
448
|
// src/utils/request/parseWorkerRequest.ts
|
|
449
|
-
var
|
|
450
|
-
|
|
451
|
-
// src/handlers/RequestHandler.ts
|
|
449
|
+
var import_interceptors2 = require("@mswjs/interceptors");
|
|
452
450
|
var import_headers_polyfill4 = require("headers-polyfill");
|
|
453
451
|
|
|
454
|
-
// src/
|
|
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
|
|
452
|
+
// src/utils/request/MockedRequest.ts
|
|
607
453
|
var cookieUtils3 = __toESM(require("cookie"));
|
|
608
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");
|
|
609
458
|
|
|
610
459
|
// src/utils/request/getRequestCookies.ts
|
|
611
460
|
var cookieUtils2 = __toESM(require("cookie"));
|
|
@@ -629,28 +478,11 @@ function getRequestCookies(request) {
|
|
|
629
478
|
}
|
|
630
479
|
}
|
|
631
480
|
|
|
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
481
|
// src/utils/internal/parseMultipartData.ts
|
|
650
|
-
var
|
|
482
|
+
var import_headers_polyfill3 = require("headers-polyfill");
|
|
651
483
|
function parseContentHeaders(headersString) {
|
|
652
484
|
var _a, _b;
|
|
653
|
-
const headers = (0,
|
|
485
|
+
const headers = (0, import_headers_polyfill3.stringToHeaders)(headersString);
|
|
654
486
|
const contentType = headers.get("content-type") || "text/plain";
|
|
655
487
|
const disposition = headers.get("content-disposition");
|
|
656
488
|
if (!disposition) {
|
|
@@ -729,39 +561,67 @@ function isStringEqual(actual, expected) {
|
|
|
729
561
|
return actual.toLowerCase() === expected.toLowerCase();
|
|
730
562
|
}
|
|
731
563
|
|
|
732
|
-
// src/utils/request/
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
564
|
+
// src/utils/request/MockedRequest.ts
|
|
565
|
+
var MockedRequest = class extends import_interceptors.IsomorphicRequest {
|
|
566
|
+
constructor(url, init = {}) {
|
|
567
|
+
super(url, init);
|
|
568
|
+
if (init.id) {
|
|
569
|
+
this.id = init.id;
|
|
570
|
+
}
|
|
571
|
+
this.cache = init.cache || "default";
|
|
572
|
+
this.destination = init.destination || "";
|
|
573
|
+
this.integrity = init.integrity || "";
|
|
574
|
+
this.keepalive = init.keepalive || false;
|
|
575
|
+
this.mode = init.mode || "cors";
|
|
576
|
+
this.priority = init.priority || "auto";
|
|
577
|
+
this.redirect = init.redirect || "follow";
|
|
578
|
+
this.referrer = init.referrer || "";
|
|
579
|
+
this.referrerPolicy = init.referrerPolicy || "no-referrer";
|
|
580
|
+
this.cookies = init.cookies || this.getCookies();
|
|
581
|
+
}
|
|
582
|
+
get body() {
|
|
583
|
+
const text2 = (0, import_bufferUtils.decodeBuffer)(this["_body"]);
|
|
584
|
+
const body2 = parseBody(text2, this.headers);
|
|
585
|
+
if (isStringEqual(this.method, "GET") && body2 === "") {
|
|
586
|
+
return void 0;
|
|
587
|
+
}
|
|
588
|
+
return body2;
|
|
736
589
|
}
|
|
737
|
-
|
|
738
|
-
|
|
590
|
+
passthrough() {
|
|
591
|
+
return {
|
|
592
|
+
status: 101,
|
|
593
|
+
statusText: "Continue",
|
|
594
|
+
headers: new import_lib.Headers(),
|
|
595
|
+
body: null,
|
|
596
|
+
passthrough: true,
|
|
597
|
+
once: false
|
|
598
|
+
};
|
|
599
|
+
}
|
|
600
|
+
getCookies() {
|
|
601
|
+
var _a;
|
|
602
|
+
const requestCookiesString = this.headers.get("cookie");
|
|
603
|
+
const ownCookies = requestCookiesString ? cookieUtils3.parse(requestCookiesString) : {};
|
|
604
|
+
import_cookies.store.hydrate();
|
|
605
|
+
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 }]) => {
|
|
606
|
+
return Object.assign(cookies, { [name.trim()]: value });
|
|
607
|
+
}, {});
|
|
608
|
+
const cookiesFromDocument = getRequestCookies(this);
|
|
609
|
+
const forwardedCookies = __spreadValues(__spreadValues({}, cookiesFromDocument), cookiesFromStore);
|
|
610
|
+
for (const [name, value] of Object.entries(forwardedCookies)) {
|
|
611
|
+
this.headers.append("cookie", `${name}=${value}`);
|
|
612
|
+
}
|
|
613
|
+
return __spreadValues(__spreadValues({}, forwardedCookies), ownCookies);
|
|
614
|
+
}
|
|
615
|
+
};
|
|
739
616
|
|
|
740
617
|
// src/utils/request/parseWorkerRequest.ts
|
|
741
618
|
function parseWorkerRequest(rawRequest) {
|
|
742
|
-
const
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
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;
|
|
619
|
+
const url = new URL(rawRequest.url);
|
|
620
|
+
const headers = new import_headers_polyfill4.Headers(rawRequest.headers);
|
|
621
|
+
return new MockedRequest(url, __spreadProps(__spreadValues({}, rawRequest), {
|
|
622
|
+
body: (0, import_interceptors2.encodeBuffer)(rawRequest.body || ""),
|
|
623
|
+
headers
|
|
624
|
+
}));
|
|
765
625
|
}
|
|
766
626
|
|
|
767
627
|
// src/utils/handleRequest.ts
|
|
@@ -940,14 +800,15 @@ function getTimestamp() {
|
|
|
940
800
|
// src/utils/logging/prepareRequest.ts
|
|
941
801
|
function prepareRequest(request) {
|
|
942
802
|
return __spreadProps(__spreadValues({}, request), {
|
|
803
|
+
body: request.body,
|
|
943
804
|
headers: request.headers.all()
|
|
944
805
|
});
|
|
945
806
|
}
|
|
946
807
|
|
|
947
808
|
// src/utils/logging/prepareResponse.ts
|
|
948
|
-
var
|
|
809
|
+
var import_headers_polyfill5 = require("headers-polyfill");
|
|
949
810
|
function prepareResponse(res) {
|
|
950
|
-
const responseHeaders = (0,
|
|
811
|
+
const responseHeaders = (0, import_headers_polyfill5.objectToHeaders)(res.headers);
|
|
951
812
|
return __spreadProps(__spreadValues({}, res), {
|
|
952
813
|
body: parseBody(res.body, responseHeaders)
|
|
953
814
|
});
|
|
@@ -1014,6 +875,151 @@ function matchRequestUrl(url, path, baseUrl) {
|
|
|
1014
875
|
};
|
|
1015
876
|
}
|
|
1016
877
|
|
|
878
|
+
// src/handlers/RequestHandler.ts
|
|
879
|
+
var import_headers_polyfill7 = require("headers-polyfill");
|
|
880
|
+
|
|
881
|
+
// src/response.ts
|
|
882
|
+
var import_headers_polyfill6 = require("headers-polyfill");
|
|
883
|
+
|
|
884
|
+
// src/utils/internal/compose.ts
|
|
885
|
+
function compose(...fns) {
|
|
886
|
+
return (...args) => {
|
|
887
|
+
return fns.reduceRight((leftFn, rightFn) => {
|
|
888
|
+
return leftFn instanceof Promise ? Promise.resolve(leftFn).then(rightFn) : rightFn(leftFn);
|
|
889
|
+
}, args[0]);
|
|
890
|
+
};
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
// src/response.ts
|
|
894
|
+
var defaultResponse = {
|
|
895
|
+
status: 200,
|
|
896
|
+
statusText: "OK",
|
|
897
|
+
body: null,
|
|
898
|
+
delay: 0,
|
|
899
|
+
once: false,
|
|
900
|
+
passthrough: false
|
|
901
|
+
};
|
|
902
|
+
var defaultResponseTransformers = [];
|
|
903
|
+
function createResponseComposition(responseOverrides, defaultTransformers = defaultResponseTransformers) {
|
|
904
|
+
return async (...transformers) => {
|
|
905
|
+
const initialResponse = Object.assign({}, defaultResponse, {
|
|
906
|
+
headers: new import_headers_polyfill6.Headers({
|
|
907
|
+
"x-powered-by": "msw"
|
|
908
|
+
})
|
|
909
|
+
}, responseOverrides);
|
|
910
|
+
const resolvedTransformers = [
|
|
911
|
+
...defaultTransformers,
|
|
912
|
+
...transformers
|
|
913
|
+
].filter(Boolean);
|
|
914
|
+
const resolvedResponse = resolvedTransformers.length > 0 ? compose(...resolvedTransformers)(initialResponse) : initialResponse;
|
|
915
|
+
return resolvedResponse;
|
|
916
|
+
};
|
|
917
|
+
}
|
|
918
|
+
var response = Object.assign(createResponseComposition(), {
|
|
919
|
+
once: createResponseComposition({ once: true }),
|
|
920
|
+
networkError(message) {
|
|
921
|
+
throw new NetworkError(message);
|
|
922
|
+
}
|
|
923
|
+
});
|
|
924
|
+
|
|
925
|
+
// src/utils/internal/getCallFrame.ts
|
|
926
|
+
var SOURCE_FRAME = /\/msw\/src\/(.+)/;
|
|
927
|
+
var BUILD_FRAME = /(node_modules)?[\/\\]lib[\/\\](umd|esm|iief|cjs)[\/\\]|^[^\/\\]*$/;
|
|
928
|
+
function getCallFrame(error2) {
|
|
929
|
+
const stack = error2.stack;
|
|
930
|
+
if (!stack) {
|
|
931
|
+
return;
|
|
932
|
+
}
|
|
933
|
+
const frames = stack.split("\n").slice(1);
|
|
934
|
+
const declarationFrame = frames.find((frame) => {
|
|
935
|
+
return !(SOURCE_FRAME.test(frame) || BUILD_FRAME.test(frame));
|
|
936
|
+
});
|
|
937
|
+
if (!declarationFrame) {
|
|
938
|
+
return;
|
|
939
|
+
}
|
|
940
|
+
const declarationPath = declarationFrame.replace(/\s*at [^()]*\(([^)]+)\)/, "$1").replace(/^@/, "");
|
|
941
|
+
return declarationPath;
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
// src/utils/internal/isIterable.ts
|
|
945
|
+
function isIterable(fn) {
|
|
946
|
+
if (!fn) {
|
|
947
|
+
return false;
|
|
948
|
+
}
|
|
949
|
+
return typeof fn[Symbol.iterator] == "function";
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
// src/handlers/RequestHandler.ts
|
|
953
|
+
var defaultContext = {
|
|
954
|
+
status,
|
|
955
|
+
set,
|
|
956
|
+
delay,
|
|
957
|
+
fetch
|
|
958
|
+
};
|
|
959
|
+
var RequestHandler = class {
|
|
960
|
+
constructor(options) {
|
|
961
|
+
this.shouldSkip = false;
|
|
962
|
+
this.ctx = options.ctx || defaultContext;
|
|
963
|
+
this.resolver = options.resolver;
|
|
964
|
+
const callFrame = getCallFrame(new Error());
|
|
965
|
+
this.info = __spreadProps(__spreadValues({}, options.info), {
|
|
966
|
+
callFrame
|
|
967
|
+
});
|
|
968
|
+
}
|
|
969
|
+
parse(_request, _resolutionContext) {
|
|
970
|
+
return null;
|
|
971
|
+
}
|
|
972
|
+
test(request, resolutionContext) {
|
|
973
|
+
return this.predicate(request, this.parse(request, resolutionContext), resolutionContext);
|
|
974
|
+
}
|
|
975
|
+
getPublicRequest(request, _parsedResult) {
|
|
976
|
+
return request;
|
|
977
|
+
}
|
|
978
|
+
markAsSkipped(shouldSkip = true) {
|
|
979
|
+
this.shouldSkip = shouldSkip;
|
|
980
|
+
}
|
|
981
|
+
async run(request, resolutionContext) {
|
|
982
|
+
if (this.shouldSkip) {
|
|
983
|
+
return null;
|
|
984
|
+
}
|
|
985
|
+
const parsedResult = this.parse(request, resolutionContext);
|
|
986
|
+
const shouldIntercept = this.predicate(request, parsedResult, resolutionContext);
|
|
987
|
+
if (!shouldIntercept) {
|
|
988
|
+
return null;
|
|
989
|
+
}
|
|
990
|
+
const publicRequest = this.getPublicRequest(request, parsedResult);
|
|
991
|
+
const executeResolver = this.wrapResolver(this.resolver);
|
|
992
|
+
const mockedResponse = await executeResolver(publicRequest, response, this.ctx);
|
|
993
|
+
return this.createExecutionResult(parsedResult, publicRequest, mockedResponse);
|
|
994
|
+
}
|
|
995
|
+
wrapResolver(resolver) {
|
|
996
|
+
return async (req, res, ctx) => {
|
|
997
|
+
const result = this.resolverGenerator || await resolver(req, res, ctx);
|
|
998
|
+
if (isIterable(result)) {
|
|
999
|
+
const { value, done } = result[Symbol.iterator]().next();
|
|
1000
|
+
const nextResponse = await value;
|
|
1001
|
+
if (!nextResponse && done) {
|
|
1002
|
+
return this.resolverGeneratorResult;
|
|
1003
|
+
}
|
|
1004
|
+
if (!this.resolverGenerator) {
|
|
1005
|
+
this.resolverGenerator = result;
|
|
1006
|
+
}
|
|
1007
|
+
this.resolverGeneratorResult = nextResponse;
|
|
1008
|
+
return nextResponse;
|
|
1009
|
+
}
|
|
1010
|
+
return result;
|
|
1011
|
+
};
|
|
1012
|
+
}
|
|
1013
|
+
createExecutionResult(parsedResult, request, response2) {
|
|
1014
|
+
return {
|
|
1015
|
+
handler: this,
|
|
1016
|
+
parsedResult: parsedResult || null,
|
|
1017
|
+
request,
|
|
1018
|
+
response: response2 || null
|
|
1019
|
+
};
|
|
1020
|
+
}
|
|
1021
|
+
};
|
|
1022
|
+
|
|
1017
1023
|
// src/handlers/RestHandler.ts
|
|
1018
1024
|
var RESTMethods = /* @__PURE__ */ ((RESTMethods2) => {
|
|
1019
1025
|
RESTMethods2["HEAD"] = "HEAD";
|
|
@@ -1032,6 +1038,15 @@ var restContext = __spreadProps(__spreadValues({}, defaultContext), {
|
|
|
1032
1038
|
json,
|
|
1033
1039
|
xml
|
|
1034
1040
|
});
|
|
1041
|
+
var RestRequest = class extends MockedRequest {
|
|
1042
|
+
constructor(request, params) {
|
|
1043
|
+
super(request.url, __spreadProps(__spreadValues({}, request), {
|
|
1044
|
+
body: request["_body"]
|
|
1045
|
+
}));
|
|
1046
|
+
this.params = params;
|
|
1047
|
+
this.id = request.id;
|
|
1048
|
+
}
|
|
1049
|
+
};
|
|
1035
1050
|
var RestHandler = class extends RequestHandler {
|
|
1036
1051
|
constructor(method, path, resolver) {
|
|
1037
1052
|
super({
|
|
@@ -1065,9 +1080,7 @@ var RestHandler = class extends RequestHandler {
|
|
|
1065
1080
|
return matchRequestUrl(request.url, this.info.path, resolutionContext == null ? void 0 : resolutionContext.baseUrl);
|
|
1066
1081
|
}
|
|
1067
1082
|
getPublicRequest(request, parsedResult) {
|
|
1068
|
-
return
|
|
1069
|
-
params: parsedResult.params || {}
|
|
1070
|
-
});
|
|
1083
|
+
return new RestRequest(request, parsedResult.params || {});
|
|
1071
1084
|
}
|
|
1072
1085
|
predicate(request, parsedResult) {
|
|
1073
1086
|
const matchesMethod = this.info.method instanceof RegExp ? this.info.method.test(request.method) : isStringEqual(this.info.method, request.method);
|
|
@@ -1130,6 +1143,14 @@ function isDocumentNode(value) {
|
|
|
1130
1143
|
}
|
|
1131
1144
|
return typeof value === "object" && "kind" in value && "definitions" in value;
|
|
1132
1145
|
}
|
|
1146
|
+
var GraphQLRequest = class extends MockedRequest {
|
|
1147
|
+
constructor(request, variables) {
|
|
1148
|
+
super(request.url, __spreadProps(__spreadValues({}, request), {
|
|
1149
|
+
body: request["_body"]
|
|
1150
|
+
}));
|
|
1151
|
+
this.variables = variables;
|
|
1152
|
+
}
|
|
1153
|
+
};
|
|
1133
1154
|
var GraphQLHandler = class extends RequestHandler {
|
|
1134
1155
|
constructor(operationType, operationName, endpoint, resolver) {
|
|
1135
1156
|
let resolvedOperationName = operationName;
|
|
@@ -1159,9 +1180,7 @@ var GraphQLHandler = class extends RequestHandler {
|
|
|
1159
1180
|
return tryCatch(() => parseGraphQLRequest(request), (error2) => console.error(error2.message));
|
|
1160
1181
|
}
|
|
1161
1182
|
getPublicRequest(request, parsedResult) {
|
|
1162
|
-
return
|
|
1163
|
-
variables: (parsedResult == null ? void 0 : parsedResult.variables) || {}
|
|
1164
|
-
});
|
|
1183
|
+
return new GraphQLRequest(request, (parsedResult == null ? void 0 : parsedResult.variables) || {});
|
|
1165
1184
|
}
|
|
1166
1185
|
predicate(request, parsedResult) {
|
|
1167
1186
|
if (!parsedResult) {
|
|
@@ -1467,8 +1486,8 @@ function transformResponse(response2) {
|
|
|
1467
1486
|
async function requestIntegrityCheck(context, serviceWorker) {
|
|
1468
1487
|
context.workerChannel.send("INTEGRITY_CHECK_REQUEST");
|
|
1469
1488
|
const { payload: actualChecksum } = await context.events.once("INTEGRITY_CHECK_RESPONSE");
|
|
1470
|
-
if (actualChecksum !== "
|
|
1471
|
-
throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"
|
|
1489
|
+
if (actualChecksum !== "df0d85222361310ecbe1792c606e08f2") {
|
|
1490
|
+
throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"df0d85222361310ecbe1792c606e08f2"}).`);
|
|
1472
1491
|
}
|
|
1473
1492
|
return serviceWorker;
|
|
1474
1493
|
}
|
|
@@ -1646,43 +1665,18 @@ function prepareStartHandler(handler, context) {
|
|
|
1646
1665
|
}
|
|
1647
1666
|
|
|
1648
1667
|
// src/setupWorker/start/createFallbackRequestListener.ts
|
|
1649
|
-
var
|
|
1668
|
+
var import_interceptors3 = require("@mswjs/interceptors");
|
|
1650
1669
|
var import_fetch3 = require("@mswjs/interceptors/lib/interceptors/fetch");
|
|
1651
1670
|
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
1671
|
function createFallbackRequestListener(context, options) {
|
|
1680
|
-
const interceptor = new
|
|
1672
|
+
const interceptor = new import_interceptors3.BatchInterceptor({
|
|
1681
1673
|
name: "fallback",
|
|
1682
1674
|
interceptors: [new import_fetch3.FetchInterceptor(), new import_XMLHttpRequest.XMLHttpRequestInterceptor()]
|
|
1683
1675
|
});
|
|
1684
1676
|
interceptor.on("request", async (request) => {
|
|
1685
|
-
const mockedRequest =
|
|
1677
|
+
const mockedRequest = new MockedRequest(request.url, __spreadProps(__spreadValues({}, request), {
|
|
1678
|
+
body: await request.arrayBuffer()
|
|
1679
|
+
}));
|
|
1686
1680
|
const response2 = await handleRequest(mockedRequest, context.requestHandlers, options, context.emitter, {
|
|
1687
1681
|
transformResponse(response3) {
|
|
1688
1682
|
return {
|
|
@@ -1767,7 +1761,7 @@ function setupWorker(...requestHandlers) {
|
|
|
1767
1761
|
if (event.source !== context.worker) {
|
|
1768
1762
|
return;
|
|
1769
1763
|
}
|
|
1770
|
-
const message =
|
|
1764
|
+
const message = event.data;
|
|
1771
1765
|
if (!message) {
|
|
1772
1766
|
return;
|
|
1773
1767
|
}
|
|
@@ -1800,7 +1794,7 @@ function setupWorker(...requestHandlers) {
|
|
|
1800
1794
|
return new Promise((resolve, reject) => {
|
|
1801
1795
|
const handleIncomingMessage = (event) => {
|
|
1802
1796
|
try {
|
|
1803
|
-
const message =
|
|
1797
|
+
const message = event.data;
|
|
1804
1798
|
if (message.type === eventType) {
|
|
1805
1799
|
resolve(message);
|
|
1806
1800
|
}
|
|
@@ -1911,6 +1905,7 @@ var graphql = __spreadProps(__spreadValues({}, standardGraphQLHandlers), {
|
|
|
1911
1905
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1912
1906
|
0 && (module.exports = {
|
|
1913
1907
|
GraphQLHandler,
|
|
1908
|
+
MockedRequest,
|
|
1914
1909
|
RESTMethods,
|
|
1915
1910
|
RequestHandler,
|
|
1916
1911
|
RestHandler,
|
|
@@ -1924,7 +1919,6 @@ var graphql = __spreadProps(__spreadValues({}, standardGraphQLHandlers), {
|
|
|
1924
1919
|
graphqlContext,
|
|
1925
1920
|
handleRequest,
|
|
1926
1921
|
matchRequestUrl,
|
|
1927
|
-
parseIsomorphicRequest,
|
|
1928
1922
|
response,
|
|
1929
1923
|
rest,
|
|
1930
1924
|
restContext,
|