msw 0.46.0 → 0.47.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/README.md +70 -76
- package/lib/{glossary-c690f512.d.ts → glossary-3d04462e.d.ts} +1 -1
- package/lib/iife/index.js +3968 -12772
- package/lib/iife/index.js.map +1 -1
- package/lib/index.d.ts +4 -9
- package/lib/index.js +73 -19
- package/lib/index.js.map +1 -1
- package/lib/mockServiceWorker.js +1 -1
- package/lib/native/index.d.ts +1 -1
- package/lib/native/index.js +7 -9
- package/lib/native/index.mjs +7 -9
- package/lib/node/index.d.ts +2 -2
- package/lib/node/index.js +7 -9
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +7 -9
- package/lib/node/index.mjs.map +1 -1
- package/package.json +27 -11
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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, 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-
|
|
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-3d04462e.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-3d04462e.js';
|
|
3
3
|
import * as cookieUtils from 'cookie';
|
|
4
4
|
import { GraphQLError, OperationTypeNode, DocumentNode } from 'graphql';
|
|
5
5
|
import { StrictEventEmitter } from 'strict-event-emitter';
|
|
@@ -170,7 +170,7 @@ declare class RestHandler<RequestType extends MockedRequest<DefaultBodyType> = M
|
|
|
170
170
|
parse(request: RequestType, resolutionContext?: ResponseResolutionContext): Match;
|
|
171
171
|
protected getPublicRequest(request: RequestType, parsedResult: ParsedRestRequest): RestRequest<any, PathParams>;
|
|
172
172
|
predicate(request: RequestType, parsedResult: ParsedRestRequest): boolean;
|
|
173
|
-
log(request: RequestType, response: SerializedResponse): void;
|
|
173
|
+
log(request: RequestType, response: SerializedResponse<any>): void;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
declare const rest: {
|
|
@@ -236,7 +236,7 @@ declare class GraphQLHandler<Request extends GraphQLRequest<any> = GraphQLReques
|
|
|
236
236
|
parse(request: MockedRequest): ParsedGraphQLRequest<GraphQLVariables>;
|
|
237
237
|
protected getPublicRequest(request: Request, parsedResult: ParsedGraphQLRequest): GraphQLRequest<any>;
|
|
238
238
|
predicate(request: MockedRequest, parsedResult: ParsedGraphQLRequest): boolean;
|
|
239
|
-
log(request: Request, response: SerializedResponse
|
|
239
|
+
log(request: Request, response: SerializedResponse<any>, parsedRequest: ParsedGraphQLRequest): void;
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
interface TypedDocumentNode<Result = {
|
|
@@ -343,11 +343,6 @@ interface HandleRequestOptions<ResponseType> {
|
|
|
343
343
|
* Invoked when the mocked response is ready to be sent.
|
|
344
344
|
*/
|
|
345
345
|
onMockedResponse?(response: ResponseType, handler: RequiredDeep<ResponseLookupResult>): void;
|
|
346
|
-
/**
|
|
347
|
-
* Invoked when the mocked response is sent.
|
|
348
|
-
* Respects the response delay duration.
|
|
349
|
-
*/
|
|
350
|
-
onMockedResponseSent?(response: ResponseType, handler: RequiredDeep<ResponseLookupResult>): void;
|
|
351
346
|
}
|
|
352
347
|
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>;
|
|
353
348
|
|
package/lib/index.js
CHANGED
|
@@ -675,6 +675,9 @@ var getResponse = async (request, handlers, resolutionContext) => {
|
|
|
675
675
|
// src/utils/request/onUnhandledRequest.ts
|
|
676
676
|
var import_js_levenshtein = __toESM(require("js-levenshtein"));
|
|
677
677
|
|
|
678
|
+
// src/utils/internal/parseGraphQLRequest.ts
|
|
679
|
+
var import_graphql = require("graphql");
|
|
680
|
+
|
|
678
681
|
// src/utils/request/getPublicUrlFromRequest.ts
|
|
679
682
|
var getPublicUrlFromRequest = (request) => {
|
|
680
683
|
return request.referrer.startsWith(request.url.origin) ? request.url.pathname : new URL(request.url.pathname, `${request.url.protocol}//${request.url.host}`).href;
|
|
@@ -693,8 +696,7 @@ function parseDocumentNode(node) {
|
|
|
693
696
|
}
|
|
694
697
|
function parseQuery(query) {
|
|
695
698
|
try {
|
|
696
|
-
const
|
|
697
|
-
const ast = parse3(query);
|
|
699
|
+
const ast = (0, import_graphql.parse)(query);
|
|
698
700
|
return parseDocumentNode(ast);
|
|
699
701
|
} catch (error2) {
|
|
700
702
|
return error2;
|
|
@@ -1089,10 +1091,7 @@ var RestHandler = class extends RequestHandler {
|
|
|
1089
1091
|
const statusColor = getStatusCodeColor(response2.status);
|
|
1090
1092
|
console.groupCollapsed(devUtils.formatMessage("%s %s %s (%c%s%c)"), getTimestamp(), request.method, publicUrl, `color:${statusColor}`, `${response2.status} ${response2.statusText}`, "color:inherit");
|
|
1091
1093
|
console.log("Request", loggedRequest);
|
|
1092
|
-
console.log("Handler:",
|
|
1093
|
-
mask: this.info.path,
|
|
1094
|
-
resolver: this.resolver
|
|
1095
|
-
});
|
|
1094
|
+
console.log("Handler:", this);
|
|
1096
1095
|
console.log("Response", loggedResponse);
|
|
1097
1096
|
console.groupEnd();
|
|
1098
1097
|
}
|
|
@@ -1194,7 +1193,7 @@ Consider naming this operation or using "graphql.operation" request handler to i
|
|
|
1194
1193
|
const hasMatchingOperationName = this.info.operationName instanceof RegExp ? this.info.operationName.test(parsedResult.operationName || "") : parsedResult.operationName === this.info.operationName;
|
|
1195
1194
|
return hasMatchingUrl.matches && hasMatchingOperationType && hasMatchingOperationName;
|
|
1196
1195
|
}
|
|
1197
|
-
log(request, response2,
|
|
1196
|
+
log(request, response2, parsedRequest) {
|
|
1198
1197
|
const loggedRequest = prepareRequest(request);
|
|
1199
1198
|
const loggedResponse = prepareResponse(response2);
|
|
1200
1199
|
const statusColor = getStatusCodeColor(response2.status);
|
|
@@ -1325,7 +1324,7 @@ function readResponseCookies(request, response2) {
|
|
|
1325
1324
|
|
|
1326
1325
|
// src/utils/handleRequest.ts
|
|
1327
1326
|
async function handleRequest(request, handlers, options, emitter, handleRequestOptions) {
|
|
1328
|
-
var _a, _b, _c, _d, _e, _f
|
|
1327
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1329
1328
|
emitter.emit("request:start", request);
|
|
1330
1329
|
if (request.headers.get("x-msw-bypass") === "true") {
|
|
1331
1330
|
emitter.emit("request:end", request);
|
|
@@ -1366,11 +1365,21 @@ async function handleRequest(request, handlers, options, emitter, handleRequestO
|
|
|
1366
1365
|
const requiredLookupResult = lookupResult;
|
|
1367
1366
|
const transformedResponse = ((_e = handleRequestOptions == null ? void 0 : handleRequestOptions.transformResponse) == null ? void 0 : _e.call(handleRequestOptions, response2)) || response2;
|
|
1368
1367
|
(_f = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponse) == null ? void 0 : _f.call(handleRequestOptions, transformedResponse, requiredLookupResult);
|
|
1369
|
-
(_g = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponseSent) == null ? void 0 : _g.call(handleRequestOptions, transformedResponse, requiredLookupResult);
|
|
1370
1368
|
emitter.emit("request:end", request);
|
|
1371
1369
|
return transformedResponse;
|
|
1372
1370
|
}
|
|
1373
1371
|
|
|
1372
|
+
// src/utils/logging/serializeResponse.ts
|
|
1373
|
+
var import_headers_polyfill8 = require("headers-polyfill");
|
|
1374
|
+
function serializeResponse(source) {
|
|
1375
|
+
return {
|
|
1376
|
+
status: source.status,
|
|
1377
|
+
statusText: source.statusText,
|
|
1378
|
+
headers: (0, import_headers_polyfill8.flattenHeadersObject)((0, import_headers_polyfill8.headersToObject)(source.headers)),
|
|
1379
|
+
body: source.body
|
|
1380
|
+
};
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1374
1383
|
// src/setupWorker/start/createRequestListener.ts
|
|
1375
1384
|
var createRequestListener = (context, options) => {
|
|
1376
1385
|
return async (event, message) => {
|
|
@@ -1382,7 +1391,7 @@ var createRequestListener = (context, options) => {
|
|
|
1382
1391
|
onPassthroughResponse() {
|
|
1383
1392
|
messageChannel.postMessage("NOT_FOUND");
|
|
1384
1393
|
},
|
|
1385
|
-
async onMockedResponse(response2) {
|
|
1394
|
+
async onMockedResponse(response2, { handler, publicRequest, parsedRequest }) {
|
|
1386
1395
|
if (response2.body instanceof ReadableStream) {
|
|
1387
1396
|
throw new Error(devUtils.formatMessage('Failed to construct a mocked response with a "ReadableStream" body: mocked streams are not supported. Follow https://github.com/mswjs/msw/issues/1336 for more details.'));
|
|
1388
1397
|
}
|
|
@@ -1392,12 +1401,11 @@ var createRequestListener = (context, options) => {
|
|
|
1392
1401
|
messageChannel.postMessage("MOCK_RESPONSE", __spreadProps(__spreadValues({}, response2), {
|
|
1393
1402
|
body: responseBody
|
|
1394
1403
|
}), [responseBodyBuffer]);
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1404
|
+
if (!options.quiet) {
|
|
1405
|
+
context.emitter.once("response:mocked", (response3) => {
|
|
1406
|
+
handler.log(publicRequest, serializeResponse(response3), parsedRequest);
|
|
1407
|
+
});
|
|
1399
1408
|
}
|
|
1400
|
-
handler.log(publicRequest, response2, handler, parsedRequest);
|
|
1401
1409
|
}
|
|
1402
1410
|
});
|
|
1403
1411
|
} catch (error2) {
|
|
@@ -1623,11 +1631,44 @@ function prepareStartHandler(handler, context) {
|
|
|
1623
1631
|
}
|
|
1624
1632
|
|
|
1625
1633
|
// src/setupWorker/start/createFallbackRequestListener.ts
|
|
1626
|
-
var
|
|
1634
|
+
var import_interceptors4 = require("@mswjs/interceptors");
|
|
1627
1635
|
var import_fetch3 = require("@mswjs/interceptors/lib/interceptors/fetch");
|
|
1628
1636
|
var import_XMLHttpRequest = require("@mswjs/interceptors/lib/interceptors/XMLHttpRequest");
|
|
1637
|
+
|
|
1638
|
+
// src/utils/request/createResponseFromIsomorphicResponse.ts
|
|
1639
|
+
var import_interceptors3 = require("@mswjs/interceptors");
|
|
1640
|
+
var noop = () => {
|
|
1641
|
+
throw new Error("Not implemented");
|
|
1642
|
+
};
|
|
1643
|
+
function createResponseFromIsomorphicResponse(response2) {
|
|
1644
|
+
return __spreadProps(__spreadValues({}, response2), {
|
|
1645
|
+
ok: response2.status >= 200 && response2.status < 300,
|
|
1646
|
+
url: "",
|
|
1647
|
+
type: "default",
|
|
1648
|
+
status: response2.status,
|
|
1649
|
+
statusText: response2.statusText,
|
|
1650
|
+
headers: response2.headers,
|
|
1651
|
+
body: new ReadableStream(),
|
|
1652
|
+
redirected: response2.headers.get("Location") != null,
|
|
1653
|
+
async text() {
|
|
1654
|
+
return response2.body || "";
|
|
1655
|
+
},
|
|
1656
|
+
async json() {
|
|
1657
|
+
return JSON.parse(response2.body || "");
|
|
1658
|
+
},
|
|
1659
|
+
async arrayBuffer() {
|
|
1660
|
+
return (0, import_interceptors3.encodeBuffer)(response2.body || "");
|
|
1661
|
+
},
|
|
1662
|
+
bodyUsed: false,
|
|
1663
|
+
formData: noop,
|
|
1664
|
+
blob: noop,
|
|
1665
|
+
clone: noop
|
|
1666
|
+
});
|
|
1667
|
+
}
|
|
1668
|
+
|
|
1669
|
+
// src/setupWorker/start/createFallbackRequestListener.ts
|
|
1629
1670
|
function createFallbackRequestListener(context, options) {
|
|
1630
|
-
const interceptor = new
|
|
1671
|
+
const interceptor = new import_interceptors4.BatchInterceptor({
|
|
1631
1672
|
name: "fallback",
|
|
1632
1673
|
interceptors: [new import_fetch3.FetchInterceptor(), new import_XMLHttpRequest.XMLHttpRequestInterceptor()]
|
|
1633
1674
|
});
|
|
@@ -1645,9 +1686,11 @@ function createFallbackRequestListener(context, options) {
|
|
|
1645
1686
|
delay: response3.delay
|
|
1646
1687
|
};
|
|
1647
1688
|
},
|
|
1648
|
-
|
|
1689
|
+
onMockedResponse(_, { handler, publicRequest, parsedRequest }) {
|
|
1649
1690
|
if (!options.quiet) {
|
|
1650
|
-
|
|
1691
|
+
context.emitter.once("response:mocked", (response3) => {
|
|
1692
|
+
handler.log(publicRequest, serializeResponse(response3), parsedRequest);
|
|
1693
|
+
});
|
|
1651
1694
|
}
|
|
1652
1695
|
}
|
|
1653
1696
|
});
|
|
@@ -1655,6 +1698,17 @@ function createFallbackRequestListener(context, options) {
|
|
|
1655
1698
|
request.respondWith(response2);
|
|
1656
1699
|
}
|
|
1657
1700
|
});
|
|
1701
|
+
interceptor.on("response", (request, response2) => {
|
|
1702
|
+
if (!request.id) {
|
|
1703
|
+
return;
|
|
1704
|
+
}
|
|
1705
|
+
const browserResponse = createResponseFromIsomorphicResponse(response2);
|
|
1706
|
+
if (response2.headers.get("x-powered-by") === "msw") {
|
|
1707
|
+
context.emitter.emit("response:mocked", browserResponse, request.id);
|
|
1708
|
+
} else {
|
|
1709
|
+
context.emitter.emit("response:bypass", browserResponse, request.id);
|
|
1710
|
+
}
|
|
1711
|
+
});
|
|
1658
1712
|
interceptor.apply();
|
|
1659
1713
|
return interceptor;
|
|
1660
1714
|
}
|