msw 0.43.1 → 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/{glossary-58eca5a8.d.ts → glossary-17949ef9.d.ts} +49 -26
- package/lib/iife/index.js +4722 -2148
- package/lib/iife/index.js.map +1 -1
- package/lib/index.d.ts +11 -14
- package/lib/index.js +247 -248
- 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 +485 -458
- package/lib/native/index.mjs +475 -448
- package/lib/node/index.d.ts +2 -2
- package/lib/node/index.js +485 -458
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +475 -448
- package/lib/node/index.mjs.map +1 -1
- package/package.json +3 -3
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-17949ef9.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-17949ef9.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,
|
|
@@ -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,74 @@ 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(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;
|
|
736
596
|
}
|
|
737
|
-
|
|
738
|
-
|
|
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
|
+
};
|
|
739
623
|
|
|
740
624
|
// src/utils/request/parseWorkerRequest.ts
|
|
741
625
|
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;
|
|
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
|
+
}));
|
|
765
632
|
}
|
|
766
633
|
|
|
767
634
|
// src/utils/handleRequest.ts
|
|
@@ -940,14 +807,15 @@ function getTimestamp() {
|
|
|
940
807
|
// src/utils/logging/prepareRequest.ts
|
|
941
808
|
function prepareRequest(request) {
|
|
942
809
|
return __spreadProps(__spreadValues({}, request), {
|
|
810
|
+
body: request.body,
|
|
943
811
|
headers: request.headers.all()
|
|
944
812
|
});
|
|
945
813
|
}
|
|
946
814
|
|
|
947
815
|
// src/utils/logging/prepareResponse.ts
|
|
948
|
-
var
|
|
816
|
+
var import_headers_polyfill5 = require("headers-polyfill");
|
|
949
817
|
function prepareResponse(res) {
|
|
950
|
-
const responseHeaders = (0,
|
|
818
|
+
const responseHeaders = (0, import_headers_polyfill5.objectToHeaders)(res.headers);
|
|
951
819
|
return __spreadProps(__spreadValues({}, res), {
|
|
952
820
|
body: parseBody(res.body, responseHeaders)
|
|
953
821
|
});
|
|
@@ -1014,6 +882,151 @@ function matchRequestUrl(url, path, baseUrl) {
|
|
|
1014
882
|
};
|
|
1015
883
|
}
|
|
1016
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
|
+
|
|
1017
1030
|
// src/handlers/RestHandler.ts
|
|
1018
1031
|
var RESTMethods = /* @__PURE__ */ ((RESTMethods2) => {
|
|
1019
1032
|
RESTMethods2["HEAD"] = "HEAD";
|
|
@@ -1032,6 +1045,15 @@ var restContext = __spreadProps(__spreadValues({}, defaultContext), {
|
|
|
1032
1045
|
json,
|
|
1033
1046
|
xml
|
|
1034
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
|
+
};
|
|
1035
1057
|
var RestHandler = class extends RequestHandler {
|
|
1036
1058
|
constructor(method, path, resolver) {
|
|
1037
1059
|
super({
|
|
@@ -1065,9 +1087,7 @@ var RestHandler = class extends RequestHandler {
|
|
|
1065
1087
|
return matchRequestUrl(request.url, this.info.path, resolutionContext == null ? void 0 : resolutionContext.baseUrl);
|
|
1066
1088
|
}
|
|
1067
1089
|
getPublicRequest(request, parsedResult) {
|
|
1068
|
-
return
|
|
1069
|
-
params: parsedResult.params || {}
|
|
1070
|
-
});
|
|
1090
|
+
return new RestRequest(request, parsedResult.params || {});
|
|
1071
1091
|
}
|
|
1072
1092
|
predicate(request, parsedResult) {
|
|
1073
1093
|
const matchesMethod = this.info.method instanceof RegExp ? this.info.method.test(request.method) : isStringEqual(this.info.method, request.method);
|
|
@@ -1130,6 +1150,14 @@ function isDocumentNode(value) {
|
|
|
1130
1150
|
}
|
|
1131
1151
|
return typeof value === "object" && "kind" in value && "definitions" in value;
|
|
1132
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
|
+
};
|
|
1133
1161
|
var GraphQLHandler = class extends RequestHandler {
|
|
1134
1162
|
constructor(operationType, operationName, endpoint, resolver) {
|
|
1135
1163
|
let resolvedOperationName = operationName;
|
|
@@ -1159,9 +1187,7 @@ var GraphQLHandler = class extends RequestHandler {
|
|
|
1159
1187
|
return tryCatch(() => parseGraphQLRequest(request), (error2) => console.error(error2.message));
|
|
1160
1188
|
}
|
|
1161
1189
|
getPublicRequest(request, parsedResult) {
|
|
1162
|
-
return
|
|
1163
|
-
variables: (parsedResult == null ? void 0 : parsedResult.variables) || {}
|
|
1164
|
-
});
|
|
1190
|
+
return new GraphQLRequest(request, (parsedResult == null ? void 0 : parsedResult.variables) || {});
|
|
1165
1191
|
}
|
|
1166
1192
|
predicate(request, parsedResult) {
|
|
1167
1193
|
if (!parsedResult) {
|
|
@@ -1467,8 +1493,8 @@ function transformResponse(response2) {
|
|
|
1467
1493
|
async function requestIntegrityCheck(context, serviceWorker) {
|
|
1468
1494
|
context.workerChannel.send("INTEGRITY_CHECK_REQUEST");
|
|
1469
1495
|
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 (${"
|
|
1496
|
+
if (actualChecksum !== "df0d85222361310ecbe1792c606e08f2") {
|
|
1497
|
+
throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"df0d85222361310ecbe1792c606e08f2"}).`);
|
|
1472
1498
|
}
|
|
1473
1499
|
return serviceWorker;
|
|
1474
1500
|
}
|
|
@@ -1646,43 +1672,16 @@ function prepareStartHandler(handler, context) {
|
|
|
1646
1672
|
}
|
|
1647
1673
|
|
|
1648
1674
|
// src/setupWorker/start/createFallbackRequestListener.ts
|
|
1649
|
-
var
|
|
1675
|
+
var import_interceptors3 = require("@mswjs/interceptors");
|
|
1650
1676
|
var import_fetch3 = require("@mswjs/interceptors/lib/interceptors/fetch");
|
|
1651
1677
|
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
1678
|
function createFallbackRequestListener(context, options) {
|
|
1680
|
-
const interceptor = new
|
|
1679
|
+
const interceptor = new import_interceptors3.BatchInterceptor({
|
|
1681
1680
|
name: "fallback",
|
|
1682
1681
|
interceptors: [new import_fetch3.FetchInterceptor(), new import_XMLHttpRequest.XMLHttpRequestInterceptor()]
|
|
1683
1682
|
});
|
|
1684
1683
|
interceptor.on("request", async (request) => {
|
|
1685
|
-
const mockedRequest =
|
|
1684
|
+
const mockedRequest = new MockedRequest(request);
|
|
1686
1685
|
const response2 = await handleRequest(mockedRequest, context.requestHandlers, options, context.emitter, {
|
|
1687
1686
|
transformResponse(response3) {
|
|
1688
1687
|
return {
|
|
@@ -1767,7 +1766,7 @@ function setupWorker(...requestHandlers) {
|
|
|
1767
1766
|
if (event.source !== context.worker) {
|
|
1768
1767
|
return;
|
|
1769
1768
|
}
|
|
1770
|
-
const message =
|
|
1769
|
+
const message = event.data;
|
|
1771
1770
|
if (!message) {
|
|
1772
1771
|
return;
|
|
1773
1772
|
}
|
|
@@ -1800,7 +1799,7 @@ function setupWorker(...requestHandlers) {
|
|
|
1800
1799
|
return new Promise((resolve, reject) => {
|
|
1801
1800
|
const handleIncomingMessage = (event) => {
|
|
1802
1801
|
try {
|
|
1803
|
-
const message =
|
|
1802
|
+
const message = event.data;
|
|
1804
1803
|
if (message.type === eventType) {
|
|
1805
1804
|
resolve(message);
|
|
1806
1805
|
}
|
|
@@ -1911,6 +1910,7 @@ var graphql = __spreadProps(__spreadValues({}, standardGraphQLHandlers), {
|
|
|
1911
1910
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1912
1911
|
0 && (module.exports = {
|
|
1913
1912
|
GraphQLHandler,
|
|
1913
|
+
MockedRequest,
|
|
1914
1914
|
RESTMethods,
|
|
1915
1915
|
RequestHandler,
|
|
1916
1916
|
RestHandler,
|
|
@@ -1924,7 +1924,6 @@ var graphql = __spreadProps(__spreadValues({}, standardGraphQLHandlers), {
|
|
|
1924
1924
|
graphqlContext,
|
|
1925
1925
|
handleRequest,
|
|
1926
1926
|
matchRequestUrl,
|
|
1927
|
-
parseIsomorphicRequest,
|
|
1928
1927
|
response,
|
|
1929
1928
|
rest,
|
|
1930
1929
|
restContext,
|