msw 0.0.0-fetch.rc-15 → 0.0.0-fetch.rc-17
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 +13 -8
- package/lib/browser/index.d.ts +0 -6
- package/lib/browser/index.js +14 -32
- package/lib/browser/index.mjs +14 -32
- package/lib/core/NetworkError.d.ts +2 -2
- package/lib/core/SetupApi.d.ts +0 -1
- package/lib/core/handlers/GraphQLHandler.js +1 -1
- package/lib/core/handlers/GraphQLHandler.mjs +1 -1
- package/lib/core/handlers/{RestHandler.d.ts → HttpHandler.d.ts} +12 -12
- package/lib/core/handlers/{RestHandler.js → HttpHandler.js} +16 -16
- package/lib/core/handlers/{RestHandler.mjs → HttpHandler.mjs} +13 -13
- package/lib/core/{rest.d.ts → http.d.ts} +11 -11
- package/lib/core/{rest.js → http.js} +16 -16
- package/lib/core/http.mjs +22 -0
- package/lib/core/{rest.spec.js → http.spec.js} +3 -3
- package/lib/core/{rest.spec.mjs → http.spec.mjs} +3 -3
- package/lib/core/index.d.ts +2 -2
- package/lib/core/index.js +6 -6
- package/lib/core/index.mjs +6 -6
- package/lib/core/passthrough.d.ts +5 -2
- package/lib/core/sharedOptions.d.ts +45 -7
- package/lib/core/utils/handleRequest.js +13 -9
- package/lib/core/utils/handleRequest.mjs +13 -9
- package/lib/core/utils/internal/parseGraphQLRequest.js +4 -3
- package/lib/core/utils/internal/parseGraphQLRequest.mjs +4 -3
- package/lib/core/utils/request/onUnhandledRequest.js +14 -8
- package/lib/core/utils/request/onUnhandledRequest.mjs +15 -9
- package/lib/iife/index.js +97 -104
- package/lib/mockServiceWorker.js +1 -1
- package/lib/native/index.d.ts +0 -6
- package/lib/native/index.js +5 -13
- package/lib/native/index.mjs +5 -13
- package/lib/node/index.d.ts +0 -6
- package/lib/node/index.js +5 -13
- package/lib/node/index.mjs +5 -13
- package/package.json +2 -1
- package/lib/core/rest.mjs +0 -22
- /package/lib/core/{rest.spec.d.ts → http.spec.d.ts} +0 -0
package/lib/core/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { checkGlobals } from './utils/internal/checkGlobals.mjs';
|
|
2
2
|
import { SetupApi } from './SetupApi.mjs';
|
|
3
3
|
import { RequestHandler } from './handlers/RequestHandler.mjs';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { http } from './http.mjs';
|
|
5
|
+
import { HttpHandler, HttpMethods } from './handlers/HttpHandler.mjs';
|
|
6
6
|
import { graphql } from './graphql.mjs';
|
|
7
7
|
import { GraphQLHandler } from './handlers/GraphQLHandler.mjs';
|
|
8
8
|
import { matchRequestUrl } from './utils/matching/matchRequestUrl.mjs';
|
|
@@ -16,15 +16,15 @@ import { NetworkError } from './NetworkError.mjs';
|
|
|
16
16
|
checkGlobals();
|
|
17
17
|
export {
|
|
18
18
|
GraphQLHandler,
|
|
19
|
+
HttpHandler,
|
|
20
|
+
HttpMethods,
|
|
19
21
|
NetworkError,
|
|
20
|
-
RESTMethods,
|
|
21
22
|
RequestHandler,
|
|
22
|
-
RestHandler,
|
|
23
23
|
SetupApi,
|
|
24
24
|
bypass,
|
|
25
25
|
cleanUrl,
|
|
26
26
|
graphql,
|
|
27
|
+
http,
|
|
27
28
|
matchRequestUrl,
|
|
28
|
-
passthrough
|
|
29
|
-
rest
|
|
29
|
+
passthrough
|
|
30
30
|
};
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Performs the captured request as-is.
|
|
3
|
+
*
|
|
4
|
+
* This stops request handler lookup so no other handlers
|
|
5
|
+
* can affect this request past this point.
|
|
3
6
|
* Unlike `bypass()`, this will not trigger an additional request.
|
|
4
7
|
*
|
|
5
8
|
* @example
|
|
6
|
-
*
|
|
9
|
+
* http.get('/resource', () => {
|
|
7
10
|
* return passthrough()
|
|
8
11
|
* })
|
|
9
12
|
*/
|
|
@@ -15,13 +15,51 @@ interface SharedOptions {
|
|
|
15
15
|
onUnhandledRequest?: UnhandledRequestStrategy;
|
|
16
16
|
}
|
|
17
17
|
type LifeCycleEventsMap = {
|
|
18
|
-
'request:start': [
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
'request:start': [
|
|
19
|
+
args: {
|
|
20
|
+
request: Request;
|
|
21
|
+
requestId: string;
|
|
22
|
+
}
|
|
23
|
+
];
|
|
24
|
+
'request:match': [
|
|
25
|
+
args: {
|
|
26
|
+
request: Request;
|
|
27
|
+
requestId: string;
|
|
28
|
+
}
|
|
29
|
+
];
|
|
30
|
+
'request:unhandled': [
|
|
31
|
+
args: {
|
|
32
|
+
request: Request;
|
|
33
|
+
requestId: string;
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
'request:end': [
|
|
37
|
+
args: {
|
|
38
|
+
request: Request;
|
|
39
|
+
requestId: string;
|
|
40
|
+
}
|
|
41
|
+
];
|
|
42
|
+
'response:mocked': [
|
|
43
|
+
args: {
|
|
44
|
+
response: Response;
|
|
45
|
+
request: Request;
|
|
46
|
+
requestId: string;
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
'response:bypass': [
|
|
50
|
+
args: {
|
|
51
|
+
response: Response;
|
|
52
|
+
request: Request;
|
|
53
|
+
requestId: string;
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
unhandledException: [
|
|
57
|
+
args: {
|
|
58
|
+
error: Error;
|
|
59
|
+
request: Request;
|
|
60
|
+
requestId: string;
|
|
61
|
+
}
|
|
62
|
+
];
|
|
25
63
|
};
|
|
26
64
|
type LifeCycleEventEmitter<EventsMap extends Record<string | symbol, any>> = Pick<Emitter<EventsMap>, 'on' | 'removeListener' | 'removeAllListeners'>;
|
|
27
65
|
|
|
@@ -48,9 +48,9 @@ var import_readResponseCookies = require("./request/readResponseCookies.js");
|
|
|
48
48
|
function handleRequest(request, requestId, handlers, options, emitter, handleRequestOptions) {
|
|
49
49
|
return __async(this, null, function* () {
|
|
50
50
|
var _a, _b, _c, _d, _e, _f;
|
|
51
|
-
emitter.emit("request:start", request, requestId);
|
|
51
|
+
emitter.emit("request:start", { request, requestId });
|
|
52
52
|
if (request.headers.get("x-msw-intention") === "bypass") {
|
|
53
|
-
emitter.emit("request:end", request, requestId);
|
|
53
|
+
emitter.emit("request:end", { request, requestId });
|
|
54
54
|
(_a = handleRequestOptions == null ? void 0 : handleRequestOptions.onPassthroughResponse) == null ? void 0 : _a.call(handleRequestOptions, request);
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
@@ -62,29 +62,33 @@ function handleRequest(request, requestId, handlers, options, emitter, handleReq
|
|
|
62
62
|
);
|
|
63
63
|
});
|
|
64
64
|
if (lookupResult.error) {
|
|
65
|
-
emitter.emit("unhandledException",
|
|
65
|
+
emitter.emit("unhandledException", {
|
|
66
|
+
error: lookupResult.error,
|
|
67
|
+
request,
|
|
68
|
+
requestId
|
|
69
|
+
});
|
|
66
70
|
throw lookupResult.error;
|
|
67
71
|
}
|
|
68
72
|
if (!lookupResult.data) {
|
|
69
73
|
yield (0, import_onUnhandledRequest.onUnhandledRequest)(request, handlers, options.onUnhandledRequest);
|
|
70
|
-
emitter.emit("request:unhandled", request, requestId);
|
|
71
|
-
emitter.emit("request:end", request, requestId);
|
|
74
|
+
emitter.emit("request:unhandled", { request, requestId });
|
|
75
|
+
emitter.emit("request:end", { request, requestId });
|
|
72
76
|
(_b = handleRequestOptions == null ? void 0 : handleRequestOptions.onPassthroughResponse) == null ? void 0 : _b.call(handleRequestOptions, request);
|
|
73
77
|
return;
|
|
74
78
|
}
|
|
75
79
|
const { response } = lookupResult.data;
|
|
76
80
|
if (!response) {
|
|
77
|
-
emitter.emit("request:end", request, requestId);
|
|
81
|
+
emitter.emit("request:end", { request, requestId });
|
|
78
82
|
(_c = handleRequestOptions == null ? void 0 : handleRequestOptions.onPassthroughResponse) == null ? void 0 : _c.call(handleRequestOptions, request);
|
|
79
83
|
return;
|
|
80
84
|
}
|
|
81
85
|
if (response.status === 302 && response.headers.get("x-msw-intention") === "passthrough") {
|
|
82
|
-
emitter.emit("request:end", request, requestId);
|
|
86
|
+
emitter.emit("request:end", { request, requestId });
|
|
83
87
|
(_d = handleRequestOptions == null ? void 0 : handleRequestOptions.onPassthroughResponse) == null ? void 0 : _d.call(handleRequestOptions, request);
|
|
84
88
|
return;
|
|
85
89
|
}
|
|
86
90
|
(0, import_readResponseCookies.readResponseCookies)(request, response);
|
|
87
|
-
emitter.emit("request:match", request, requestId);
|
|
91
|
+
emitter.emit("request:match", { request, requestId });
|
|
88
92
|
const requiredLookupResult = lookupResult.data;
|
|
89
93
|
const transformedResponse = ((_e = handleRequestOptions == null ? void 0 : handleRequestOptions.transformResponse) == null ? void 0 : _e.call(handleRequestOptions, response)) || response;
|
|
90
94
|
(_f = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponse) == null ? void 0 : _f.call(
|
|
@@ -92,7 +96,7 @@ function handleRequest(request, requestId, handlers, options, emitter, handleReq
|
|
|
92
96
|
transformedResponse,
|
|
93
97
|
requiredLookupResult
|
|
94
98
|
);
|
|
95
|
-
emitter.emit("request:end", request, requestId);
|
|
99
|
+
emitter.emit("request:end", { request, requestId });
|
|
96
100
|
return transformedResponse;
|
|
97
101
|
});
|
|
98
102
|
}
|
|
@@ -25,9 +25,9 @@ import { readResponseCookies } from './request/readResponseCookies.mjs';
|
|
|
25
25
|
function handleRequest(request, requestId, handlers, options, emitter, handleRequestOptions) {
|
|
26
26
|
return __async(this, null, function* () {
|
|
27
27
|
var _a, _b, _c, _d, _e, _f;
|
|
28
|
-
emitter.emit("request:start", request, requestId);
|
|
28
|
+
emitter.emit("request:start", { request, requestId });
|
|
29
29
|
if (request.headers.get("x-msw-intention") === "bypass") {
|
|
30
|
-
emitter.emit("request:end", request, requestId);
|
|
30
|
+
emitter.emit("request:end", { request, requestId });
|
|
31
31
|
(_a = handleRequestOptions == null ? void 0 : handleRequestOptions.onPassthroughResponse) == null ? void 0 : _a.call(handleRequestOptions, request);
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
@@ -39,29 +39,33 @@ function handleRequest(request, requestId, handlers, options, emitter, handleReq
|
|
|
39
39
|
);
|
|
40
40
|
});
|
|
41
41
|
if (lookupResult.error) {
|
|
42
|
-
emitter.emit("unhandledException",
|
|
42
|
+
emitter.emit("unhandledException", {
|
|
43
|
+
error: lookupResult.error,
|
|
44
|
+
request,
|
|
45
|
+
requestId
|
|
46
|
+
});
|
|
43
47
|
throw lookupResult.error;
|
|
44
48
|
}
|
|
45
49
|
if (!lookupResult.data) {
|
|
46
50
|
yield onUnhandledRequest(request, handlers, options.onUnhandledRequest);
|
|
47
|
-
emitter.emit("request:unhandled", request, requestId);
|
|
48
|
-
emitter.emit("request:end", request, requestId);
|
|
51
|
+
emitter.emit("request:unhandled", { request, requestId });
|
|
52
|
+
emitter.emit("request:end", { request, requestId });
|
|
49
53
|
(_b = handleRequestOptions == null ? void 0 : handleRequestOptions.onPassthroughResponse) == null ? void 0 : _b.call(handleRequestOptions, request);
|
|
50
54
|
return;
|
|
51
55
|
}
|
|
52
56
|
const { response } = lookupResult.data;
|
|
53
57
|
if (!response) {
|
|
54
|
-
emitter.emit("request:end", request, requestId);
|
|
58
|
+
emitter.emit("request:end", { request, requestId });
|
|
55
59
|
(_c = handleRequestOptions == null ? void 0 : handleRequestOptions.onPassthroughResponse) == null ? void 0 : _c.call(handleRequestOptions, request);
|
|
56
60
|
return;
|
|
57
61
|
}
|
|
58
62
|
if (response.status === 302 && response.headers.get("x-msw-intention") === "passthrough") {
|
|
59
|
-
emitter.emit("request:end", request, requestId);
|
|
63
|
+
emitter.emit("request:end", { request, requestId });
|
|
60
64
|
(_d = handleRequestOptions == null ? void 0 : handleRequestOptions.onPassthroughResponse) == null ? void 0 : _d.call(handleRequestOptions, request);
|
|
61
65
|
return;
|
|
62
66
|
}
|
|
63
67
|
readResponseCookies(request, response);
|
|
64
|
-
emitter.emit("request:match", request, requestId);
|
|
68
|
+
emitter.emit("request:match", { request, requestId });
|
|
65
69
|
const requiredLookupResult = lookupResult.data;
|
|
66
70
|
const transformedResponse = ((_e = handleRequestOptions == null ? void 0 : handleRequestOptions.transformResponse) == null ? void 0 : _e.call(handleRequestOptions, response)) || response;
|
|
67
71
|
(_f = handleRequestOptions == null ? void 0 : handleRequestOptions.onMockedResponse) == null ? void 0 : _f.call(
|
|
@@ -69,7 +73,7 @@ function handleRequest(request, requestId, handlers, options, emitter, handleReq
|
|
|
69
73
|
transformedResponse,
|
|
70
74
|
requiredLookupResult
|
|
71
75
|
);
|
|
72
|
-
emitter.emit("request:end", request, requestId);
|
|
76
|
+
emitter.emit("request:end", { request, requestId });
|
|
73
77
|
return transformedResponse;
|
|
74
78
|
});
|
|
75
79
|
}
|
|
@@ -103,9 +103,9 @@ function extractMultipartVariables(variables, map, files) {
|
|
|
103
103
|
function getGraphQLInput(request) {
|
|
104
104
|
return __async(this, null, function* () {
|
|
105
105
|
var _a;
|
|
106
|
-
const url = new URL(request.url);
|
|
107
106
|
switch (request.method) {
|
|
108
107
|
case "GET": {
|
|
108
|
+
const url = new URL(request.url);
|
|
109
109
|
const query = url.searchParams.get("query");
|
|
110
110
|
const variables = url.searchParams.get("variables") || "";
|
|
111
111
|
return {
|
|
@@ -114,9 +114,10 @@ function getGraphQLInput(request) {
|
|
|
114
114
|
};
|
|
115
115
|
}
|
|
116
116
|
case "POST": {
|
|
117
|
+
const requestClone = request.clone();
|
|
117
118
|
if ((_a = request.headers.get("content-type")) == null ? void 0 : _a.includes("multipart/form-data")) {
|
|
118
119
|
const responseJson = (0, import_parseMultipartData.parseMultipartData)(
|
|
119
|
-
yield
|
|
120
|
+
yield requestClone.text(),
|
|
120
121
|
request.headers
|
|
121
122
|
);
|
|
122
123
|
if (!responseJson) {
|
|
@@ -140,7 +141,7 @@ function getGraphQLInput(request) {
|
|
|
140
141
|
variables
|
|
141
142
|
};
|
|
142
143
|
}
|
|
143
|
-
const requestJson = yield
|
|
144
|
+
const requestJson = yield requestClone.json().catch(() => null);
|
|
144
145
|
if (requestJson == null ? void 0 : requestJson.query) {
|
|
145
146
|
const { query, variables } = requestJson;
|
|
146
147
|
return {
|
|
@@ -80,9 +80,9 @@ function extractMultipartVariables(variables, map, files) {
|
|
|
80
80
|
function getGraphQLInput(request) {
|
|
81
81
|
return __async(this, null, function* () {
|
|
82
82
|
var _a;
|
|
83
|
-
const url = new URL(request.url);
|
|
84
83
|
switch (request.method) {
|
|
85
84
|
case "GET": {
|
|
85
|
+
const url = new URL(request.url);
|
|
86
86
|
const query = url.searchParams.get("query");
|
|
87
87
|
const variables = url.searchParams.get("variables") || "";
|
|
88
88
|
return {
|
|
@@ -91,9 +91,10 @@ function getGraphQLInput(request) {
|
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
93
|
case "POST": {
|
|
94
|
+
const requestClone = request.clone();
|
|
94
95
|
if ((_a = request.headers.get("content-type")) == null ? void 0 : _a.includes("multipart/form-data")) {
|
|
95
96
|
const responseJson = parseMultipartData(
|
|
96
|
-
yield
|
|
97
|
+
yield requestClone.text(),
|
|
97
98
|
request.headers
|
|
98
99
|
);
|
|
99
100
|
if (!responseJson) {
|
|
@@ -117,7 +118,7 @@ function getGraphQLInput(request) {
|
|
|
117
118
|
variables
|
|
118
119
|
};
|
|
119
120
|
}
|
|
120
|
-
const requestJson = yield
|
|
121
|
+
const requestJson = yield requestClone.json().catch(() => null);
|
|
121
122
|
if (requestJson == null ? void 0 : requestJson.query) {
|
|
122
123
|
const { query, variables } = requestJson;
|
|
123
124
|
return {
|
|
@@ -64,8 +64,8 @@ const TYPE_MATCH_DELTA = 0.5;
|
|
|
64
64
|
function groupHandlersByType(handlers) {
|
|
65
65
|
return handlers.reduce(
|
|
66
66
|
(groups, handler) => {
|
|
67
|
-
if (handler instanceof import__.
|
|
68
|
-
groups.
|
|
67
|
+
if (handler instanceof import__.HttpHandler) {
|
|
68
|
+
groups.http.push(handler);
|
|
69
69
|
}
|
|
70
70
|
if (handler instanceof import__.GraphQLHandler) {
|
|
71
71
|
groups.graphql.push(handler);
|
|
@@ -73,12 +73,12 @@ function groupHandlersByType(handlers) {
|
|
|
73
73
|
return groups;
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
|
-
|
|
76
|
+
http: [],
|
|
77
77
|
graphql: []
|
|
78
78
|
}
|
|
79
79
|
);
|
|
80
80
|
}
|
|
81
|
-
function
|
|
81
|
+
function getHttpHandlerScore() {
|
|
82
82
|
return (request, handler) => {
|
|
83
83
|
const { path, method } = handler.info;
|
|
84
84
|
if (path instanceof RegExp || method instanceof RegExp) {
|
|
@@ -126,19 +126,25 @@ function onUnhandledRequest(request, handlers, strategy = "warn") {
|
|
|
126
126
|
const parsedGraphQLQuery = yield (0, import_parseGraphQLRequest.parseGraphQLRequest)(request).catch(
|
|
127
127
|
() => null
|
|
128
128
|
);
|
|
129
|
+
const publicUrl = (0, import_getPublicUrlFromRequest.getPublicUrlFromRequest)(request);
|
|
129
130
|
function generateHandlerSuggestion() {
|
|
130
131
|
const handlerGroups = groupHandlersByType(handlers);
|
|
131
|
-
const relevantHandlers = parsedGraphQLQuery ? handlerGroups.graphql : handlerGroups.
|
|
132
|
+
const relevantHandlers = parsedGraphQLQuery ? handlerGroups.graphql : handlerGroups.http;
|
|
132
133
|
const suggestedHandlers = getSuggestedHandler(
|
|
133
134
|
request,
|
|
134
135
|
relevantHandlers,
|
|
135
|
-
parsedGraphQLQuery ? getGraphQLHandlerScore(parsedGraphQLQuery) :
|
|
136
|
+
parsedGraphQLQuery ? getGraphQLHandlerScore(parsedGraphQLQuery) : getHttpHandlerScore()
|
|
136
137
|
);
|
|
137
138
|
return suggestedHandlers.length > 0 ? getSuggestedHandlersMessage(suggestedHandlers) : "";
|
|
138
139
|
}
|
|
140
|
+
function getGraphQLRequestHeader(parsedGraphQLRequest) {
|
|
141
|
+
if (!(parsedGraphQLRequest == null ? void 0 : parsedGraphQLRequest.operationName)) {
|
|
142
|
+
return `anonymous ${parsedGraphQLRequest == null ? void 0 : parsedGraphQLRequest.operationType} (${request.method} ${publicUrl})`;
|
|
143
|
+
}
|
|
144
|
+
return `${parsedGraphQLRequest.operationType} ${parsedGraphQLRequest.operationName} (${request.method} ${publicUrl})`;
|
|
145
|
+
}
|
|
139
146
|
function generateUnhandledRequestMessage() {
|
|
140
|
-
const
|
|
141
|
-
const requestHeader = parsedGraphQLQuery ? `${parsedGraphQLQuery.operationType} ${parsedGraphQLQuery.operationName} (${request.method} ${publicUrl})` : `${request.method} ${publicUrl}`;
|
|
147
|
+
const requestHeader = parsedGraphQLQuery ? getGraphQLRequestHeader(parsedGraphQLQuery) : `${request.method} ${publicUrl}`;
|
|
142
148
|
const handlerSuggestion = generateHandlerSuggestion();
|
|
143
149
|
const messageTemplate = [
|
|
144
150
|
`captured a request without a matching request handler:`,
|
|
@@ -19,7 +19,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
19
19
|
});
|
|
20
20
|
};
|
|
21
21
|
import jsLevenshtein from "@bundled-es-modules/js-levenshtein";
|
|
22
|
-
import {
|
|
22
|
+
import { HttpHandler, GraphQLHandler } from '../../index.mjs';
|
|
23
23
|
import {
|
|
24
24
|
parseGraphQLRequest
|
|
25
25
|
} from '../internal/parseGraphQLRequest.mjs';
|
|
@@ -33,8 +33,8 @@ const TYPE_MATCH_DELTA = 0.5;
|
|
|
33
33
|
function groupHandlersByType(handlers) {
|
|
34
34
|
return handlers.reduce(
|
|
35
35
|
(groups, handler) => {
|
|
36
|
-
if (handler instanceof
|
|
37
|
-
groups.
|
|
36
|
+
if (handler instanceof HttpHandler) {
|
|
37
|
+
groups.http.push(handler);
|
|
38
38
|
}
|
|
39
39
|
if (handler instanceof GraphQLHandler) {
|
|
40
40
|
groups.graphql.push(handler);
|
|
@@ -42,12 +42,12 @@ function groupHandlersByType(handlers) {
|
|
|
42
42
|
return groups;
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
|
-
|
|
45
|
+
http: [],
|
|
46
46
|
graphql: []
|
|
47
47
|
}
|
|
48
48
|
);
|
|
49
49
|
}
|
|
50
|
-
function
|
|
50
|
+
function getHttpHandlerScore() {
|
|
51
51
|
return (request, handler) => {
|
|
52
52
|
const { path, method } = handler.info;
|
|
53
53
|
if (path instanceof RegExp || method instanceof RegExp) {
|
|
@@ -95,19 +95,25 @@ function onUnhandledRequest(request, handlers, strategy = "warn") {
|
|
|
95
95
|
const parsedGraphQLQuery = yield parseGraphQLRequest(request).catch(
|
|
96
96
|
() => null
|
|
97
97
|
);
|
|
98
|
+
const publicUrl = getPublicUrlFromRequest(request);
|
|
98
99
|
function generateHandlerSuggestion() {
|
|
99
100
|
const handlerGroups = groupHandlersByType(handlers);
|
|
100
|
-
const relevantHandlers = parsedGraphQLQuery ? handlerGroups.graphql : handlerGroups.
|
|
101
|
+
const relevantHandlers = parsedGraphQLQuery ? handlerGroups.graphql : handlerGroups.http;
|
|
101
102
|
const suggestedHandlers = getSuggestedHandler(
|
|
102
103
|
request,
|
|
103
104
|
relevantHandlers,
|
|
104
|
-
parsedGraphQLQuery ? getGraphQLHandlerScore(parsedGraphQLQuery) :
|
|
105
|
+
parsedGraphQLQuery ? getGraphQLHandlerScore(parsedGraphQLQuery) : getHttpHandlerScore()
|
|
105
106
|
);
|
|
106
107
|
return suggestedHandlers.length > 0 ? getSuggestedHandlersMessage(suggestedHandlers) : "";
|
|
107
108
|
}
|
|
109
|
+
function getGraphQLRequestHeader(parsedGraphQLRequest) {
|
|
110
|
+
if (!(parsedGraphQLRequest == null ? void 0 : parsedGraphQLRequest.operationName)) {
|
|
111
|
+
return `anonymous ${parsedGraphQLRequest == null ? void 0 : parsedGraphQLRequest.operationType} (${request.method} ${publicUrl})`;
|
|
112
|
+
}
|
|
113
|
+
return `${parsedGraphQLRequest.operationType} ${parsedGraphQLRequest.operationName} (${request.method} ${publicUrl})`;
|
|
114
|
+
}
|
|
108
115
|
function generateUnhandledRequestMessage() {
|
|
109
|
-
const
|
|
110
|
-
const requestHeader = parsedGraphQLQuery ? `${parsedGraphQLQuery.operationType} ${parsedGraphQLQuery.operationName} (${request.method} ${publicUrl})` : `${request.method} ${publicUrl}`;
|
|
116
|
+
const requestHeader = parsedGraphQLQuery ? getGraphQLRequestHeader(parsedGraphQLQuery) : `${request.method} ${publicUrl}`;
|
|
111
117
|
const handlerSuggestion = generateHandlerSuggestion();
|
|
112
118
|
const messageTemplate = [
|
|
113
119
|
`captured a request without a matching request handler:`,
|