msw 2.0.8 → 2.0.10
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/browser/index.js +16 -13
- package/lib/browser/index.mjs +14 -11
- package/lib/core/{GraphQLHandler-d4787f91.d.ts → GraphQLHandler-907fc607.d.ts} +22 -8
- package/lib/core/HttpResponse.d.ts +1 -1
- package/lib/core/{RequestHandler-bb5cbb8f.d.ts → RequestHandler-50ddea0c.d.ts} +4 -0
- package/lib/core/SetupApi.d.ts +1 -1
- package/lib/core/SetupApi.js +14 -11
- package/lib/core/SetupApi.mjs +14 -11
- package/lib/core/graphql.d.ts +2 -2
- package/lib/core/handlers/GraphQLHandler.d.ts +2 -2
- package/lib/core/handlers/GraphQLHandler.js +11 -13
- package/lib/core/handlers/GraphQLHandler.mjs +11 -13
- package/lib/core/handlers/HttpHandler.d.ts +1 -1
- package/lib/core/handlers/RequestHandler.d.ts +1 -1
- package/lib/core/handlers/RequestHandler.js +4 -0
- package/lib/core/handlers/RequestHandler.mjs +4 -0
- package/lib/core/http.d.ts +1 -1
- package/lib/core/index.d.ts +2 -2
- package/lib/core/sharedOptions.d.ts +1 -1
- package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
- package/lib/core/utils/getResponse.d.ts +1 -1
- package/lib/core/utils/handleRequest.d.ts +9 -2
- package/lib/core/utils/internal/parseGraphQLRequest.d.ts +2 -2
- package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
- package/lib/core/utils/internal/pipeEvents.js +3 -2
- package/lib/core/utils/internal/pipeEvents.mjs +3 -2
- package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
- package/lib/core/utils/request/onUnhandledRequest.d.ts +1 -1
- package/lib/iife/index.js +88 -225
- package/lib/mockServiceWorker.js +4 -9
- package/lib/native/index.d.ts +1 -12
- package/lib/native/index.js +4 -58
- package/lib/native/index.mjs +4 -48
- package/lib/node/index.d.ts +1 -12
- package/lib/node/index.js +31 -54
- package/lib/node/index.mjs +31 -44
- package/package.json +4 -3
package/lib/browser/index.js
CHANGED
|
@@ -209,14 +209,7 @@ var WorkerChannel = class {
|
|
|
209
209
|
}
|
|
210
210
|
postMessage(event, ...rest) {
|
|
211
211
|
const [data, transfer] = rest;
|
|
212
|
-
this.port.postMessage(
|
|
213
|
-
{ type: event, data },
|
|
214
|
-
{
|
|
215
|
-
// @ts-ignore ReadableStream can be transferred
|
|
216
|
-
// but TypeScript doesn't acknowledge that.
|
|
217
|
-
transfer
|
|
218
|
-
}
|
|
219
|
-
);
|
|
212
|
+
this.port.postMessage({ type: event, data }, { transfer });
|
|
220
213
|
}
|
|
221
214
|
};
|
|
222
215
|
|
|
@@ -327,9 +320,9 @@ function requestIntegrityCheck(context, serviceWorker) {
|
|
|
327
320
|
const { payload: actualChecksum } = yield context.events.once(
|
|
328
321
|
"INTEGRITY_CHECK_RESPONSE"
|
|
329
322
|
);
|
|
330
|
-
if (actualChecksum !== "
|
|
323
|
+
if (actualChecksum !== "c5f7f8e188b673ea4e677df7ea3c5a39") {
|
|
331
324
|
throw new Error(
|
|
332
|
-
`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"
|
|
325
|
+
`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"c5f7f8e188b673ea4e677df7ea3c5a39"}).`
|
|
333
326
|
);
|
|
334
327
|
}
|
|
335
328
|
return serviceWorker;
|
|
@@ -355,6 +348,7 @@ function deferNetworkRequestsUntil(predicatePromise) {
|
|
|
355
348
|
}
|
|
356
349
|
|
|
357
350
|
// src/browser/setupWorker/start/createResponseListener.ts
|
|
351
|
+
var import_interceptors = require("@mswjs/interceptors");
|
|
358
352
|
function createResponseListener(context) {
|
|
359
353
|
return (_, message) => {
|
|
360
354
|
var _a;
|
|
@@ -362,7 +356,16 @@ function createResponseListener(context) {
|
|
|
362
356
|
if ((_a = responseJson.type) == null ? void 0 : _a.includes("opaque")) {
|
|
363
357
|
return;
|
|
364
358
|
}
|
|
365
|
-
const response = responseJson.status === 0 ? Response.error() : new Response(
|
|
359
|
+
const response = responseJson.status === 0 ? Response.error() : new Response(
|
|
360
|
+
/**
|
|
361
|
+
* Responses may be streams here, but when we create a response object
|
|
362
|
+
* with null-body status codes, like 204, 205, 304 Response will
|
|
363
|
+
* throw when passed a non-null body, so ensure it's null here
|
|
364
|
+
* for those codes
|
|
365
|
+
*/
|
|
366
|
+
(0, import_interceptors.isResponseWithoutBody)(responseJson.status) ? null : responseJson.body,
|
|
367
|
+
responseJson
|
|
368
|
+
);
|
|
366
369
|
context.emitter.emit(
|
|
367
370
|
responseJson.isMockedResponse ? "response:mocked" : "response:bypass",
|
|
368
371
|
{
|
|
@@ -527,12 +530,12 @@ var DEFAULT_START_OPTIONS = {
|
|
|
527
530
|
};
|
|
528
531
|
|
|
529
532
|
// src/browser/setupWorker/start/createFallbackRequestListener.ts
|
|
530
|
-
var
|
|
533
|
+
var import_interceptors2 = require("@mswjs/interceptors");
|
|
531
534
|
var import_fetch = require("@mswjs/interceptors/fetch");
|
|
532
535
|
var import_XMLHttpRequest = require("@mswjs/interceptors/XMLHttpRequest");
|
|
533
536
|
var import_handleRequest2 = require("../core/utils/handleRequest.js");
|
|
534
537
|
function createFallbackRequestListener(context, options) {
|
|
535
|
-
const interceptor = new
|
|
538
|
+
const interceptor = new import_interceptors2.BatchInterceptor({
|
|
536
539
|
name: "fallback",
|
|
537
540
|
interceptors: [new import_fetch.FetchInterceptor(), new import_XMLHttpRequest.XMLHttpRequestInterceptor()]
|
|
538
541
|
});
|
package/lib/browser/index.mjs
CHANGED
|
@@ -185,14 +185,7 @@ var WorkerChannel = class {
|
|
|
185
185
|
}
|
|
186
186
|
postMessage(event, ...rest) {
|
|
187
187
|
const [data, transfer] = rest;
|
|
188
|
-
this.port.postMessage(
|
|
189
|
-
{ type: event, data },
|
|
190
|
-
{
|
|
191
|
-
// @ts-ignore ReadableStream can be transferred
|
|
192
|
-
// but TypeScript doesn't acknowledge that.
|
|
193
|
-
transfer
|
|
194
|
-
}
|
|
195
|
-
);
|
|
188
|
+
this.port.postMessage({ type: event, data }, { transfer });
|
|
196
189
|
}
|
|
197
190
|
};
|
|
198
191
|
|
|
@@ -303,9 +296,9 @@ function requestIntegrityCheck(context, serviceWorker) {
|
|
|
303
296
|
const { payload: actualChecksum } = yield context.events.once(
|
|
304
297
|
"INTEGRITY_CHECK_RESPONSE"
|
|
305
298
|
);
|
|
306
|
-
if (actualChecksum !== "
|
|
299
|
+
if (actualChecksum !== "c5f7f8e188b673ea4e677df7ea3c5a39") {
|
|
307
300
|
throw new Error(
|
|
308
|
-
`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"
|
|
301
|
+
`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"c5f7f8e188b673ea4e677df7ea3c5a39"}).`
|
|
309
302
|
);
|
|
310
303
|
}
|
|
311
304
|
return serviceWorker;
|
|
@@ -331,6 +324,7 @@ function deferNetworkRequestsUntil(predicatePromise) {
|
|
|
331
324
|
}
|
|
332
325
|
|
|
333
326
|
// src/browser/setupWorker/start/createResponseListener.ts
|
|
327
|
+
import { isResponseWithoutBody } from "@mswjs/interceptors";
|
|
334
328
|
function createResponseListener(context) {
|
|
335
329
|
return (_, message) => {
|
|
336
330
|
var _a;
|
|
@@ -338,7 +332,16 @@ function createResponseListener(context) {
|
|
|
338
332
|
if ((_a = responseJson.type) == null ? void 0 : _a.includes("opaque")) {
|
|
339
333
|
return;
|
|
340
334
|
}
|
|
341
|
-
const response = responseJson.status === 0 ? Response.error() : new Response(
|
|
335
|
+
const response = responseJson.status === 0 ? Response.error() : new Response(
|
|
336
|
+
/**
|
|
337
|
+
* Responses may be streams here, but when we create a response object
|
|
338
|
+
* with null-body status codes, like 204, 205, 304 Response will
|
|
339
|
+
* throw when passed a non-null body, so ensure it's null here
|
|
340
|
+
* for those codes
|
|
341
|
+
*/
|
|
342
|
+
isResponseWithoutBody(responseJson.status) ? null : responseJson.body,
|
|
343
|
+
responseJson
|
|
344
|
+
);
|
|
342
345
|
context.emitter.emit(
|
|
343
346
|
responseJson.isMockedResponse ? "response:mocked" : "response:bypass",
|
|
344
347
|
{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { OperationTypeNode, DocumentNode, GraphQLError } from 'graphql';
|
|
2
|
-
import { g as RequestHandlerDefaultInfo, D as DefaultBodyType, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions } from './RequestHandler-
|
|
3
|
-
import { Path } from './utils/matching/matchRequestUrl.js';
|
|
2
|
+
import { g as RequestHandlerDefaultInfo, D as DefaultBodyType, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions } from './RequestHandler-50ddea0c.js';
|
|
3
|
+
import { Match, Path } from './utils/matching/matchRequestUrl.js';
|
|
4
4
|
|
|
5
5
|
interface ParsedGraphQLQuery {
|
|
6
6
|
operationType: OperationTypeNode;
|
|
@@ -31,6 +31,20 @@ interface GraphQLHandlerInfo extends RequestHandlerDefaultInfo {
|
|
|
31
31
|
operationType: ExpectedOperationTypeNode;
|
|
32
32
|
operationName: GraphQLHandlerNameSelector;
|
|
33
33
|
}
|
|
34
|
+
type GraphQLRequestParsedResult = {
|
|
35
|
+
match: Match;
|
|
36
|
+
} & (ParsedGraphQLRequest<GraphQLVariables>
|
|
37
|
+
/**
|
|
38
|
+
* An empty version of the ParsedGraphQLRequest
|
|
39
|
+
* which simplifies the return type of the resolver
|
|
40
|
+
* when the request is to a non-matching endpoint
|
|
41
|
+
*/
|
|
42
|
+
| {
|
|
43
|
+
operationType?: undefined;
|
|
44
|
+
operationName?: undefined;
|
|
45
|
+
query?: undefined;
|
|
46
|
+
variables?: undefined;
|
|
47
|
+
});
|
|
34
48
|
type GraphQLResolverExtras<Variables extends GraphQLVariables> = {
|
|
35
49
|
query: string;
|
|
36
50
|
operationName: string;
|
|
@@ -47,19 +61,19 @@ interface GraphQLResponseBody<BodyType extends DefaultBodyType> {
|
|
|
47
61
|
errors?: readonly Partial<GraphQLError>[] | null;
|
|
48
62
|
}
|
|
49
63
|
declare function isDocumentNode(value: DocumentNode | any): value is DocumentNode;
|
|
50
|
-
declare class GraphQLHandler extends RequestHandler<GraphQLHandlerInfo,
|
|
64
|
+
declare class GraphQLHandler extends RequestHandler<GraphQLHandlerInfo, GraphQLRequestParsedResult, GraphQLResolverExtras<any>> {
|
|
51
65
|
private endpoint;
|
|
52
66
|
constructor(operationType: ExpectedOperationTypeNode, operationName: GraphQLHandlerNameSelector, endpoint: Path, resolver: ResponseResolver<GraphQLResolverExtras<any>, any, any>, options?: RequestHandlerOptions);
|
|
53
67
|
parse(args: {
|
|
54
68
|
request: Request;
|
|
55
|
-
}): Promise<
|
|
69
|
+
}): Promise<GraphQLRequestParsedResult>;
|
|
56
70
|
predicate(args: {
|
|
57
71
|
request: Request;
|
|
58
|
-
parsedResult:
|
|
72
|
+
parsedResult: GraphQLRequestParsedResult;
|
|
59
73
|
}): boolean;
|
|
60
74
|
protected extendResolverArgs(args: {
|
|
61
75
|
request: Request;
|
|
62
|
-
parsedResult:
|
|
76
|
+
parsedResult: GraphQLRequestParsedResult;
|
|
63
77
|
}): {
|
|
64
78
|
query: string;
|
|
65
79
|
operationName: string;
|
|
@@ -69,8 +83,8 @@ declare class GraphQLHandler extends RequestHandler<GraphQLHandlerInfo, ParsedGr
|
|
|
69
83
|
log(args: {
|
|
70
84
|
request: Request;
|
|
71
85
|
response: Response;
|
|
72
|
-
parsedResult:
|
|
86
|
+
parsedResult: GraphQLRequestParsedResult;
|
|
73
87
|
}): Promise<void>;
|
|
74
88
|
}
|
|
75
89
|
|
|
76
|
-
export { ExpectedOperationTypeNode as E, GraphQLHandler as G, ParsedGraphQLRequest as P, GraphQLVariables as a, GraphQLRequestBody as b, GraphQLJsonRequestBody as c, GraphQLHandlerNameSelector as d, GraphQLResolverExtras as e, GraphQLResponseBody as f, ParsedGraphQLQuery as g, GraphQLParsedOperationsMap as h, GraphQLMultipartRequestBody as i, parseGraphQLRequest as j, GraphQLHandlerInfo as k,
|
|
90
|
+
export { ExpectedOperationTypeNode as E, GraphQLHandler as G, ParsedGraphQLRequest as P, GraphQLVariables as a, GraphQLRequestBody as b, GraphQLJsonRequestBody as c, GraphQLHandlerNameSelector as d, GraphQLResolverExtras as e, GraphQLResponseBody as f, ParsedGraphQLQuery as g, GraphQLParsedOperationsMap as h, GraphQLMultipartRequestBody as i, parseGraphQLRequest as j, GraphQLHandlerInfo as k, GraphQLRequestParsedResult as l, isDocumentNode as m, parseDocumentNode as p };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { f as HttpResponse, H as HttpResponseInit, S as StrictRequest, e as StrictResponse } from './RequestHandler-
|
|
1
|
+
export { f as HttpResponse, H as HttpResponseInit, S as StrictRequest, e as StrictResponse } from './RequestHandler-50ddea0c.js';
|
|
2
2
|
import './typeUtils.js';
|
|
@@ -149,6 +149,10 @@ declare abstract class RequestHandler<HandlerInfo extends RequestHandlerDefaultI
|
|
|
149
149
|
}): Promise<ParsedResult>;
|
|
150
150
|
/**
|
|
151
151
|
* Test if this handler matches the given request.
|
|
152
|
+
*
|
|
153
|
+
* This method is not used internally but is exposed
|
|
154
|
+
* as a convenience method for consumers writing custom
|
|
155
|
+
* handlers.
|
|
152
156
|
*/
|
|
153
157
|
test(args: {
|
|
154
158
|
request: Request;
|
package/lib/core/SetupApi.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventMap, Emitter } from 'strict-event-emitter';
|
|
2
|
-
import { R as RequestHandler, g as RequestHandlerDefaultInfo } from './RequestHandler-
|
|
2
|
+
import { R as RequestHandler, g as RequestHandlerDefaultInfo } from './RequestHandler-50ddea0c.js';
|
|
3
3
|
import { LifeCycleEventEmitter } from './sharedOptions.js';
|
|
4
4
|
import { Disposable } from './utils/internal/Disposable.js';
|
|
5
5
|
import './typeUtils.js';
|
package/lib/core/SetupApi.js
CHANGED
|
@@ -30,7 +30,12 @@ var import_Disposable = require("./utils/internal/Disposable.js");
|
|
|
30
30
|
class SetupApi extends import_Disposable.Disposable {
|
|
31
31
|
constructor(...initialHandlers) {
|
|
32
32
|
super();
|
|
33
|
-
|
|
33
|
+
(0, import_outvariant.invariant)(
|
|
34
|
+
this.validateHandlers(initialHandlers),
|
|
35
|
+
import_devUtils.devUtils.formatMessage(
|
|
36
|
+
`Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?`
|
|
37
|
+
)
|
|
38
|
+
);
|
|
34
39
|
this.initialHandlers = (0, import_toReadonlyArray.toReadonlyArray)(initialHandlers);
|
|
35
40
|
this.currentHandlers = [...initialHandlers];
|
|
36
41
|
this.emitter = new import_strict_event_emitter.Emitter();
|
|
@@ -42,18 +47,16 @@ class SetupApi extends import_Disposable.Disposable {
|
|
|
42
47
|
this.publicEmitter.removeAllListeners();
|
|
43
48
|
});
|
|
44
49
|
}
|
|
45
|
-
validateHandlers(
|
|
46
|
-
|
|
47
|
-
(0, import_outvariant.invariant)(
|
|
48
|
-
!Array.isArray(handler),
|
|
49
|
-
import_devUtils.devUtils.formatMessage(
|
|
50
|
-
'Failed to construct "%s" given an Array of request handlers. Make sure you spread the request handlers when calling the respective setup function.'
|
|
51
|
-
),
|
|
52
|
-
this.constructor.name
|
|
53
|
-
);
|
|
54
|
-
}
|
|
50
|
+
validateHandlers(handlers) {
|
|
51
|
+
return handlers.every((handler) => !Array.isArray(handler));
|
|
55
52
|
}
|
|
56
53
|
use(...runtimeHandlers) {
|
|
54
|
+
(0, import_outvariant.invariant)(
|
|
55
|
+
this.validateHandlers(runtimeHandlers),
|
|
56
|
+
import_devUtils.devUtils.formatMessage(
|
|
57
|
+
`Failed to call "use()" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?`
|
|
58
|
+
)
|
|
59
|
+
);
|
|
57
60
|
this.currentHandlers.unshift(...runtimeHandlers);
|
|
58
61
|
}
|
|
59
62
|
restoreHandlers() {
|
package/lib/core/SetupApi.mjs
CHANGED
|
@@ -7,7 +7,12 @@ import { Disposable } from './utils/internal/Disposable.mjs';
|
|
|
7
7
|
class SetupApi extends Disposable {
|
|
8
8
|
constructor(...initialHandlers) {
|
|
9
9
|
super();
|
|
10
|
-
|
|
10
|
+
invariant(
|
|
11
|
+
this.validateHandlers(initialHandlers),
|
|
12
|
+
devUtils.formatMessage(
|
|
13
|
+
`Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?`
|
|
14
|
+
)
|
|
15
|
+
);
|
|
11
16
|
this.initialHandlers = toReadonlyArray(initialHandlers);
|
|
12
17
|
this.currentHandlers = [...initialHandlers];
|
|
13
18
|
this.emitter = new Emitter();
|
|
@@ -19,18 +24,16 @@ class SetupApi extends Disposable {
|
|
|
19
24
|
this.publicEmitter.removeAllListeners();
|
|
20
25
|
});
|
|
21
26
|
}
|
|
22
|
-
validateHandlers(
|
|
23
|
-
|
|
24
|
-
invariant(
|
|
25
|
-
!Array.isArray(handler),
|
|
26
|
-
devUtils.formatMessage(
|
|
27
|
-
'Failed to construct "%s" given an Array of request handlers. Make sure you spread the request handlers when calling the respective setup function.'
|
|
28
|
-
),
|
|
29
|
-
this.constructor.name
|
|
30
|
-
);
|
|
31
|
-
}
|
|
27
|
+
validateHandlers(handlers) {
|
|
28
|
+
return handlers.every((handler) => !Array.isArray(handler));
|
|
32
29
|
}
|
|
33
30
|
use(...runtimeHandlers) {
|
|
31
|
+
invariant(
|
|
32
|
+
this.validateHandlers(runtimeHandlers),
|
|
33
|
+
devUtils.formatMessage(
|
|
34
|
+
`Failed to call "use()" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?`
|
|
35
|
+
)
|
|
36
|
+
);
|
|
34
37
|
this.currentHandlers.unshift(...runtimeHandlers);
|
|
35
38
|
}
|
|
36
39
|
restoreHandlers() {
|
package/lib/core/graphql.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DocumentNode } from 'graphql';
|
|
2
|
-
import { a as ResponseResolver, c as RequestHandlerOptions } from './RequestHandler-
|
|
3
|
-
import { a as GraphQLVariables, d as GraphQLHandlerNameSelector, e as GraphQLResolverExtras, f as GraphQLResponseBody, G as GraphQLHandler } from './GraphQLHandler-
|
|
2
|
+
import { a as ResponseResolver, c as RequestHandlerOptions } from './RequestHandler-50ddea0c.js';
|
|
3
|
+
import { a as GraphQLVariables, d as GraphQLHandlerNameSelector, e as GraphQLResolverExtras, f as GraphQLResponseBody, G as GraphQLHandler } from './GraphQLHandler-907fc607.js';
|
|
4
4
|
import { Path } from './utils/matching/matchRequestUrl.js';
|
|
5
5
|
import './typeUtils.js';
|
|
6
6
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import 'graphql';
|
|
2
|
-
import '../RequestHandler-
|
|
2
|
+
import '../RequestHandler-50ddea0c.js';
|
|
3
3
|
import '../utils/matching/matchRequestUrl.js';
|
|
4
|
-
export { E as ExpectedOperationTypeNode, G as GraphQLHandler, k as GraphQLHandlerInfo, d as GraphQLHandlerNameSelector, c as GraphQLJsonRequestBody, b as GraphQLRequestBody, e as GraphQLResolverExtras, f as GraphQLResponseBody, a as GraphQLVariables,
|
|
4
|
+
export { E as ExpectedOperationTypeNode, G as GraphQLHandler, k as GraphQLHandlerInfo, d as GraphQLHandlerNameSelector, c as GraphQLJsonRequestBody, b as GraphQLRequestBody, l as GraphQLRequestParsedResult, e as GraphQLResolverExtras, f as GraphQLResponseBody, a as GraphQLVariables, m as isDocumentNode } from '../GraphQLHandler-907fc607.js';
|
|
5
5
|
import '../typeUtils.js';
|
|
@@ -89,6 +89,9 @@ class GraphQLHandler extends import_RequestHandler.RequestHandler {
|
|
|
89
89
|
}
|
|
90
90
|
parse(args) {
|
|
91
91
|
return __async(this, null, function* () {
|
|
92
|
+
const match = (0, import_matchRequestUrl.matchRequestUrl)(new URL(args.request.url), this.endpoint);
|
|
93
|
+
if (!match.matches)
|
|
94
|
+
return { match };
|
|
92
95
|
const parsedResult = yield (0, import_parseGraphQLRequest.parseGraphQLRequest)(args.request).catch(
|
|
93
96
|
(error) => {
|
|
94
97
|
console.error(error);
|
|
@@ -96,9 +99,10 @@ class GraphQLHandler extends import_RequestHandler.RequestHandler {
|
|
|
96
99
|
}
|
|
97
100
|
);
|
|
98
101
|
if (typeof parsedResult === "undefined") {
|
|
99
|
-
return
|
|
102
|
+
return { match };
|
|
100
103
|
}
|
|
101
104
|
return {
|
|
105
|
+
match,
|
|
102
106
|
query: parsedResult.query,
|
|
103
107
|
operationType: parsedResult.operationType,
|
|
104
108
|
operationName: parsedResult.operationName,
|
|
@@ -107,7 +111,7 @@ class GraphQLHandler extends import_RequestHandler.RequestHandler {
|
|
|
107
111
|
});
|
|
108
112
|
}
|
|
109
113
|
predicate(args) {
|
|
110
|
-
if (
|
|
114
|
+
if (args.parsedResult.operationType === void 0) {
|
|
111
115
|
return false;
|
|
112
116
|
}
|
|
113
117
|
if (!args.parsedResult.operationName && this.info.operationType !== "all") {
|
|
@@ -117,31 +121,25 @@ class GraphQLHandler extends import_RequestHandler.RequestHandler {
|
|
|
117
121
|
Consider naming this operation or using "graphql.operation()" request handler to intercept GraphQL requests regardless of their operation name/type. Read more: https://mswjs.io/docs/api/graphql/#graphqloperationresolver`);
|
|
118
122
|
return false;
|
|
119
123
|
}
|
|
120
|
-
const hasMatchingUrl = (0, import_matchRequestUrl.matchRequestUrl)(
|
|
121
|
-
new URL(args.request.url),
|
|
122
|
-
this.endpoint
|
|
123
|
-
);
|
|
124
124
|
const hasMatchingOperationType = this.info.operationType === "all" || args.parsedResult.operationType === this.info.operationType;
|
|
125
125
|
const hasMatchingOperationName = this.info.operationName instanceof RegExp ? this.info.operationName.test(args.parsedResult.operationName || "") : args.parsedResult.operationName === this.info.operationName;
|
|
126
|
-
return
|
|
126
|
+
return args.parsedResult.match.matches && hasMatchingOperationType && hasMatchingOperationName;
|
|
127
127
|
}
|
|
128
128
|
extendResolverArgs(args) {
|
|
129
|
-
var _a, _b, _c;
|
|
130
129
|
const cookies = (0, import_getRequestCookies.getAllRequestCookies)(args.request);
|
|
131
130
|
return {
|
|
132
|
-
query:
|
|
133
|
-
operationName:
|
|
134
|
-
variables:
|
|
131
|
+
query: args.parsedResult.query || "",
|
|
132
|
+
operationName: args.parsedResult.operationName || "",
|
|
133
|
+
variables: args.parsedResult.variables || {},
|
|
135
134
|
cookies
|
|
136
135
|
};
|
|
137
136
|
}
|
|
138
137
|
log(args) {
|
|
139
138
|
return __async(this, null, function* () {
|
|
140
|
-
var _a, _b, _c, _d;
|
|
141
139
|
const loggedRequest = yield (0, import_serializeRequest.serializeRequest)(args.request);
|
|
142
140
|
const loggedResponse = yield (0, import_serializeResponse.serializeResponse)(args.response);
|
|
143
141
|
const statusColor = (0, import_getStatusCodeColor.getStatusCodeColor)(loggedResponse.status);
|
|
144
|
-
const requestInfo =
|
|
142
|
+
const requestInfo = args.parsedResult.operationName ? `${args.parsedResult.operationType} ${args.parsedResult.operationName}` : `anonymous ${args.parsedResult.operationType}`;
|
|
145
143
|
console.groupCollapsed(
|
|
146
144
|
import_devUtils.devUtils.formatMessage(
|
|
147
145
|
`${(0, import_getTimestamp.getTimestamp)()} ${requestInfo} (%c${loggedResponse.status} ${loggedResponse.statusText}%c)`
|
|
@@ -70,6 +70,9 @@ class GraphQLHandler extends RequestHandler {
|
|
|
70
70
|
}
|
|
71
71
|
parse(args) {
|
|
72
72
|
return __async(this, null, function* () {
|
|
73
|
+
const match = matchRequestUrl(new URL(args.request.url), this.endpoint);
|
|
74
|
+
if (!match.matches)
|
|
75
|
+
return { match };
|
|
73
76
|
const parsedResult = yield parseGraphQLRequest(args.request).catch(
|
|
74
77
|
(error) => {
|
|
75
78
|
console.error(error);
|
|
@@ -77,9 +80,10 @@ class GraphQLHandler extends RequestHandler {
|
|
|
77
80
|
}
|
|
78
81
|
);
|
|
79
82
|
if (typeof parsedResult === "undefined") {
|
|
80
|
-
return
|
|
83
|
+
return { match };
|
|
81
84
|
}
|
|
82
85
|
return {
|
|
86
|
+
match,
|
|
83
87
|
query: parsedResult.query,
|
|
84
88
|
operationType: parsedResult.operationType,
|
|
85
89
|
operationName: parsedResult.operationName,
|
|
@@ -88,7 +92,7 @@ class GraphQLHandler extends RequestHandler {
|
|
|
88
92
|
});
|
|
89
93
|
}
|
|
90
94
|
predicate(args) {
|
|
91
|
-
if (
|
|
95
|
+
if (args.parsedResult.operationType === void 0) {
|
|
92
96
|
return false;
|
|
93
97
|
}
|
|
94
98
|
if (!args.parsedResult.operationName && this.info.operationType !== "all") {
|
|
@@ -98,31 +102,25 @@ class GraphQLHandler extends RequestHandler {
|
|
|
98
102
|
Consider naming this operation or using "graphql.operation()" request handler to intercept GraphQL requests regardless of their operation name/type. Read more: https://mswjs.io/docs/api/graphql/#graphqloperationresolver`);
|
|
99
103
|
return false;
|
|
100
104
|
}
|
|
101
|
-
const hasMatchingUrl = matchRequestUrl(
|
|
102
|
-
new URL(args.request.url),
|
|
103
|
-
this.endpoint
|
|
104
|
-
);
|
|
105
105
|
const hasMatchingOperationType = this.info.operationType === "all" || args.parsedResult.operationType === this.info.operationType;
|
|
106
106
|
const hasMatchingOperationName = this.info.operationName instanceof RegExp ? this.info.operationName.test(args.parsedResult.operationName || "") : args.parsedResult.operationName === this.info.operationName;
|
|
107
|
-
return
|
|
107
|
+
return args.parsedResult.match.matches && hasMatchingOperationType && hasMatchingOperationName;
|
|
108
108
|
}
|
|
109
109
|
extendResolverArgs(args) {
|
|
110
|
-
var _a, _b, _c;
|
|
111
110
|
const cookies = getAllRequestCookies(args.request);
|
|
112
111
|
return {
|
|
113
|
-
query:
|
|
114
|
-
operationName:
|
|
115
|
-
variables:
|
|
112
|
+
query: args.parsedResult.query || "",
|
|
113
|
+
operationName: args.parsedResult.operationName || "",
|
|
114
|
+
variables: args.parsedResult.variables || {},
|
|
116
115
|
cookies
|
|
117
116
|
};
|
|
118
117
|
}
|
|
119
118
|
log(args) {
|
|
120
119
|
return __async(this, null, function* () {
|
|
121
|
-
var _a, _b, _c, _d;
|
|
122
120
|
const loggedRequest = yield serializeRequest(args.request);
|
|
123
121
|
const loggedResponse = yield serializeResponse(args.response);
|
|
124
122
|
const statusColor = getStatusCodeColor(loggedResponse.status);
|
|
125
|
-
const requestInfo =
|
|
123
|
+
const requestInfo = args.parsedResult.operationName ? `${args.parsedResult.operationType} ${args.parsedResult.operationName}` : `anonymous ${args.parsedResult.operationType}`;
|
|
126
124
|
console.groupCollapsed(
|
|
127
125
|
devUtils.formatMessage(
|
|
128
126
|
`${getTimestamp()} ${requestInfo} (%c${loggedResponse.status} ${loggedResponse.statusText}%c)`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { g as RequestHandlerDefaultInfo, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions, i as ResponseResolutionContext } from '../RequestHandler-
|
|
1
|
+
import { g as RequestHandlerDefaultInfo, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions, i as ResponseResolutionContext } from '../RequestHandler-50ddea0c.js';
|
|
2
2
|
import { Path, Match, PathParams } from '../utils/matching/matchRequestUrl.js';
|
|
3
3
|
import '../typeUtils.js';
|
|
4
4
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, m as RequestHandlerArgs, g as RequestHandlerDefaultInfo, n as RequestHandlerExecutionResult, k as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, l as ResponseResolverInfo, b as ResponseResolverReturnType } from '../RequestHandler-
|
|
1
|
+
export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, J as JsonBodyType, M as MaybeAsyncResponseResolverReturnType, R as RequestHandler, m as RequestHandlerArgs, g as RequestHandlerDefaultInfo, n as RequestHandlerExecutionResult, k as RequestHandlerInternalInfo, c as RequestHandlerOptions, a as ResponseResolver, l as ResponseResolverInfo, b as ResponseResolverReturnType } from '../RequestHandler-50ddea0c.js';
|
|
2
2
|
import '../typeUtils.js';
|
|
@@ -82,6 +82,10 @@ class RequestHandler {
|
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
84
84
|
* Test if this handler matches the given request.
|
|
85
|
+
*
|
|
86
|
+
* This method is not used internally but is exposed
|
|
87
|
+
* as a convenience method for consumers writing custom
|
|
88
|
+
* handlers.
|
|
85
89
|
*/
|
|
86
90
|
test(args) {
|
|
87
91
|
return __async(this, null, function* () {
|
|
@@ -61,6 +61,10 @@ class RequestHandler {
|
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
63
|
* Test if this handler matches the given request.
|
|
64
|
+
*
|
|
65
|
+
* This method is not used internally but is exposed
|
|
66
|
+
* as a convenience method for consumers writing custom
|
|
67
|
+
* handlers.
|
|
64
68
|
*/
|
|
65
69
|
test(args) {
|
|
66
70
|
return __async(this, null, function* () {
|
package/lib/core/http.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { D as DefaultBodyType, a as ResponseResolver, c as RequestHandlerOptions } from './RequestHandler-
|
|
1
|
+
import { D as DefaultBodyType, a as ResponseResolver, c as RequestHandlerOptions } from './RequestHandler-50ddea0c.js';
|
|
2
2
|
import { HttpRequestResolverExtras, HttpHandler } from './handlers/HttpHandler.js';
|
|
3
3
|
import { PathParams, Path } from './utils/matching/matchRequestUrl.js';
|
|
4
4
|
import './typeUtils.js';
|
package/lib/core/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { SetupApi } from './SetupApi.js';
|
|
2
|
-
export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, f as HttpResponse, H as HttpResponseInit, J as JsonBodyType, R as RequestHandler, c as RequestHandlerOptions, a as ResponseResolver, b as ResponseResolverReturnType, S as StrictRequest, e as StrictResponse } from './RequestHandler-
|
|
2
|
+
export { A as AsyncResponseResolverReturnType, D as DefaultBodyType, d as DefaultRequestMultipartBody, f as HttpResponse, H as HttpResponseInit, J as JsonBodyType, R as RequestHandler, c as RequestHandlerOptions, a as ResponseResolver, b as ResponseResolverReturnType, S as StrictRequest, e as StrictResponse } from './RequestHandler-50ddea0c.js';
|
|
3
3
|
export { http } from './http.js';
|
|
4
4
|
export { HttpHandler, HttpMethods, HttpRequestParsedResult, RequestQuery } from './handlers/HttpHandler.js';
|
|
5
5
|
export { graphql } from './graphql.js';
|
|
6
|
-
export { G as GraphQLHandler, c as GraphQLJsonRequestBody, b as GraphQLRequestBody, a as GraphQLVariables, P as ParsedGraphQLRequest } from './GraphQLHandler-
|
|
6
|
+
export { G as GraphQLHandler, c as GraphQLJsonRequestBody, b as GraphQLRequestBody, a as GraphQLVariables, P as ParsedGraphQLRequest } from './GraphQLHandler-907fc607.js';
|
|
7
7
|
export { Match, Path, PathParams, matchRequestUrl } from './utils/matching/matchRequestUrl.js';
|
|
8
8
|
export { HandleRequestOptions, handleRequest } from './utils/handleRequest.js';
|
|
9
9
|
export { cleanUrl } from './utils/url/cleanUrl.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Emitter } from 'strict-event-emitter';
|
|
2
2
|
import { UnhandledRequestStrategy } from './utils/request/onUnhandledRequest.js';
|
|
3
|
-
import './RequestHandler-
|
|
3
|
+
import './RequestHandler-50ddea0c.js';
|
|
4
4
|
import './typeUtils.js';
|
|
5
5
|
|
|
6
6
|
interface SharedOptions {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { h as ResponseLookupResult, i as ResponseResolutionContext, j as getResponse } from '../RequestHandler-
|
|
1
|
+
export { h as ResponseLookupResult, i as ResponseResolutionContext, j as getResponse } from '../RequestHandler-50ddea0c.js';
|
|
2
2
|
import '../typeUtils.js';
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
import { Emitter } from 'strict-event-emitter';
|
|
2
|
-
import { h as ResponseLookupResult, R as RequestHandler } from '../RequestHandler-
|
|
2
|
+
import { h as ResponseLookupResult, R as RequestHandler } from '../RequestHandler-50ddea0c.js';
|
|
3
3
|
import { SharedOptions, LifeCycleEventsMap } from '../sharedOptions.js';
|
|
4
4
|
import { RequiredDeep } from '../typeUtils.js';
|
|
5
5
|
import './request/onUnhandledRequest.js';
|
|
6
6
|
|
|
7
7
|
interface HandleRequestOptions {
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* `resolutionContext` is not part of the general public api
|
|
10
|
+
* but is exposed to aid in creating extensions like
|
|
11
|
+
* `@mswjs/http-middleware`.
|
|
10
12
|
*/
|
|
11
13
|
resolutionContext?: {
|
|
14
|
+
/**
|
|
15
|
+
* A base url to use when resolving relative urls.
|
|
16
|
+
* @note This is primarily used by the `@mswjs/http-middleware`
|
|
17
|
+
* to resolve relative urls in the context of the running server
|
|
18
|
+
*/
|
|
12
19
|
baseUrl?: string;
|
|
13
20
|
};
|
|
14
21
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import 'graphql';
|
|
2
|
-
export { i as GraphQLMultipartRequestBody, h as GraphQLParsedOperationsMap, g as ParsedGraphQLQuery, P as ParsedGraphQLRequest, p as parseDocumentNode, j as parseGraphQLRequest } from '../../GraphQLHandler-
|
|
3
|
-
import '../../RequestHandler-
|
|
2
|
+
export { i as GraphQLMultipartRequestBody, h as GraphQLParsedOperationsMap, g as ParsedGraphQLQuery, P as ParsedGraphQLRequest, p as parseDocumentNode, j as parseGraphQLRequest } from '../../GraphQLHandler-907fc607.js';
|
|
3
|
+
import '../../RequestHandler-50ddea0c.js';
|
|
4
4
|
import '../../typeUtils.js';
|
|
5
5
|
import '../matching/matchRequestUrl.js';
|
|
@@ -26,9 +26,10 @@ function pipeEvents(source, destination) {
|
|
|
26
26
|
if (rawEmit._isPiped) {
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
const sourceEmit = function sourceEmit2(event, ...data) {
|
|
30
30
|
destination.emit(event, ...data);
|
|
31
31
|
return rawEmit.call(this, event, ...data);
|
|
32
32
|
};
|
|
33
|
-
|
|
33
|
+
sourceEmit._isPiped = true;
|
|
34
|
+
source.emit = sourceEmit;
|
|
34
35
|
}
|
|
@@ -3,11 +3,12 @@ function pipeEvents(source, destination) {
|
|
|
3
3
|
if (rawEmit._isPiped) {
|
|
4
4
|
return;
|
|
5
5
|
}
|
|
6
|
-
|
|
6
|
+
const sourceEmit = function sourceEmit2(event, ...data) {
|
|
7
7
|
destination.emit(event, ...data);
|
|
8
8
|
return rawEmit.call(this, event, ...data);
|
|
9
9
|
};
|
|
10
|
-
|
|
10
|
+
sourceEmit._isPiped = true;
|
|
11
|
+
source.emit = sourceEmit;
|
|
11
12
|
}
|
|
12
13
|
export {
|
|
13
14
|
pipeEvents
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { R as RequestHandler, g as RequestHandlerDefaultInfo, c as RequestHandlerOptions } from '../../RequestHandler-
|
|
1
|
+
import { R as RequestHandler, g as RequestHandlerDefaultInfo, c as RequestHandlerOptions } from '../../RequestHandler-50ddea0c.js';
|
|
2
2
|
import '../../typeUtils.js';
|
|
3
3
|
|
|
4
4
|
declare function use(currentHandlers: Array<RequestHandler>, ...handlers: Array<RequestHandler>): void;
|