msw 2.0.11 → 2.0.12
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/core/{GraphQLHandler-907fc607.d.ts → GraphQLHandler-da09c680.d.ts} +8 -1
- package/lib/core/HttpResponse.d.ts +1 -1
- package/lib/core/{RequestHandler-50ddea0c.d.ts → RequestHandler-25f9cfd1.d.ts} +2 -0
- package/lib/core/SetupApi.d.ts +1 -1
- package/lib/core/graphql.d.ts +2 -2
- package/lib/core/handlers/GraphQLHandler.d.ts +2 -2
- package/lib/core/handlers/GraphQLHandler.js +27 -8
- package/lib/core/handlers/GraphQLHandler.mjs +27 -8
- package/lib/core/handlers/HttpHandler.d.ts +1 -1
- package/lib/core/handlers/RequestHandler.d.ts +1 -1
- package/lib/core/handlers/RequestHandler.js +18 -4
- package/lib/core/handlers/RequestHandler.mjs +18 -4
- 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 +1 -1
- 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/requestHandlerUtils.d.ts +1 -1
- package/lib/core/utils/request/onUnhandledRequest.d.ts +1 -1
- package/lib/iife/index.js +43 -10
- package/lib/mockServiceWorker.js +1 -1
- package/lib/native/index.d.ts +0 -1
- package/lib/native/index.js +0 -3
- package/lib/native/index.mjs +0 -3
- package/lib/node/index.d.ts +0 -1
- package/lib/node/index.js +1 -35
- package/lib/node/index.mjs +1 -35
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
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-
|
|
2
|
+
import { g as RequestHandlerDefaultInfo, D as DefaultBodyType, R as RequestHandler, a as ResponseResolver, c as RequestHandlerOptions } from './RequestHandler-25f9cfd1.js';
|
|
3
3
|
import { Match, Path } from './utils/matching/matchRequestUrl.js';
|
|
4
4
|
|
|
5
5
|
interface ParsedGraphQLQuery {
|
|
@@ -63,7 +63,14 @@ interface GraphQLResponseBody<BodyType extends DefaultBodyType> {
|
|
|
63
63
|
declare function isDocumentNode(value: DocumentNode | any): value is DocumentNode;
|
|
64
64
|
declare class GraphQLHandler extends RequestHandler<GraphQLHandlerInfo, GraphQLRequestParsedResult, GraphQLResolverExtras<any>> {
|
|
65
65
|
private endpoint;
|
|
66
|
+
static parsedRequestCache: WeakMap<Request, ParsedGraphQLRequest<GraphQLVariables>>;
|
|
66
67
|
constructor(operationType: ExpectedOperationTypeNode, operationName: GraphQLHandlerNameSelector, endpoint: Path, resolver: ResponseResolver<GraphQLResolverExtras<any>, any, any>, options?: RequestHandlerOptions);
|
|
68
|
+
/**
|
|
69
|
+
* Parses the request body, once per request, cached across all
|
|
70
|
+
* GraphQL handlers. This is done to avoid multiple parsing of the
|
|
71
|
+
* request body, which each requires a clone of the request.
|
|
72
|
+
*/
|
|
73
|
+
parseGraphQLRequestOrGetFromCache(request: Request): Promise<ParsedGraphQLRequest<GraphQLVariables>>;
|
|
67
74
|
parse(args: {
|
|
68
75
|
request: Request;
|
|
69
76
|
}): Promise<GraphQLRequestParsedResult>;
|
|
@@ -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-25f9cfd1.js';
|
|
2
2
|
import './typeUtils.js';
|
|
@@ -112,6 +112,7 @@ interface RequestHandlerExecutionResult<ParsedResult extends Record<string, unkn
|
|
|
112
112
|
response?: Response;
|
|
113
113
|
}
|
|
114
114
|
declare abstract class RequestHandler<HandlerInfo extends RequestHandlerDefaultInfo = RequestHandlerDefaultInfo, ParsedResult extends Record<string, any> | undefined = any, ResolverExtras extends Record<string, unknown> = any, HandlerOptions extends RequestHandlerOptions = RequestHandlerOptions> {
|
|
115
|
+
static cache: WeakMap<StrictRequest<DefaultBodyType>, StrictRequest<DefaultBodyType>>;
|
|
115
116
|
info: HandlerInfo & RequestHandlerInternalInfo;
|
|
116
117
|
/**
|
|
117
118
|
* Indicates whether this request handler has been used
|
|
@@ -162,6 +163,7 @@ declare abstract class RequestHandler<HandlerInfo extends RequestHandlerDefaultI
|
|
|
162
163
|
request: Request;
|
|
163
164
|
parsedResult: ParsedResult;
|
|
164
165
|
}): ResolverExtras;
|
|
166
|
+
private cloneRequestOrGetFromCache;
|
|
165
167
|
/**
|
|
166
168
|
* Execute this request handler and produce a mocked response
|
|
167
169
|
* using the given resolver function.
|
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-25f9cfd1.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/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-25f9cfd1.js';
|
|
3
|
+
import { a as GraphQLVariables, d as GraphQLHandlerNameSelector, e as GraphQLResolverExtras, f as GraphQLResponseBody, G as GraphQLHandler } from './GraphQLHandler-da09c680.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-25f9cfd1.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, l as GraphQLRequestParsedResult, e as GraphQLResolverExtras, f as GraphQLResponseBody, a as GraphQLVariables, m as isDocumentNode } from '../GraphQLHandler-
|
|
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-da09c680.js';
|
|
5
5
|
import '../typeUtils.js';
|
|
@@ -58,7 +58,7 @@ function isDocumentNode(value) {
|
|
|
58
58
|
}
|
|
59
59
|
return typeof value === "object" && "kind" in value && "definitions" in value;
|
|
60
60
|
}
|
|
61
|
-
class
|
|
61
|
+
const _GraphQLHandler = class extends import_RequestHandler.RequestHandler {
|
|
62
62
|
constructor(operationType, operationName, endpoint, resolver, options) {
|
|
63
63
|
let resolvedOperationName = operationName;
|
|
64
64
|
if (isDocumentNode(operationName)) {
|
|
@@ -87,16 +87,33 @@ class GraphQLHandler extends import_RequestHandler.RequestHandler {
|
|
|
87
87
|
});
|
|
88
88
|
this.endpoint = endpoint;
|
|
89
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Parses the request body, once per request, cached across all
|
|
92
|
+
* GraphQL handlers. This is done to avoid multiple parsing of the
|
|
93
|
+
* request body, which each requires a clone of the request.
|
|
94
|
+
*/
|
|
95
|
+
parseGraphQLRequestOrGetFromCache(request) {
|
|
96
|
+
return __async(this, null, function* () {
|
|
97
|
+
if (!_GraphQLHandler.parsedRequestCache.has(request)) {
|
|
98
|
+
_GraphQLHandler.parsedRequestCache.set(
|
|
99
|
+
request,
|
|
100
|
+
yield (0, import_parseGraphQLRequest.parseGraphQLRequest)(request).catch((error) => {
|
|
101
|
+
console.error(error);
|
|
102
|
+
return void 0;
|
|
103
|
+
})
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
return _GraphQLHandler.parsedRequestCache.get(request);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
90
109
|
parse(args) {
|
|
91
110
|
return __async(this, null, function* () {
|
|
92
111
|
const match = (0, import_matchRequestUrl.matchRequestUrl)(new URL(args.request.url), this.endpoint);
|
|
93
|
-
if (!match.matches)
|
|
112
|
+
if (!match.matches) {
|
|
94
113
|
return { match };
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return void 0;
|
|
99
|
-
}
|
|
114
|
+
}
|
|
115
|
+
const parsedResult = yield this.parseGraphQLRequestOrGetFromCache(
|
|
116
|
+
args.request
|
|
100
117
|
);
|
|
101
118
|
if (typeof parsedResult === "undefined") {
|
|
102
119
|
return { match };
|
|
@@ -153,4 +170,6 @@ Consider naming this operation or using "graphql.operation()" request handler to
|
|
|
153
170
|
console.groupEnd();
|
|
154
171
|
});
|
|
155
172
|
}
|
|
156
|
-
}
|
|
173
|
+
};
|
|
174
|
+
let GraphQLHandler = _GraphQLHandler;
|
|
175
|
+
GraphQLHandler.parsedRequestCache = /* @__PURE__ */ new WeakMap();
|
|
@@ -39,7 +39,7 @@ function isDocumentNode(value) {
|
|
|
39
39
|
}
|
|
40
40
|
return typeof value === "object" && "kind" in value && "definitions" in value;
|
|
41
41
|
}
|
|
42
|
-
class
|
|
42
|
+
const _GraphQLHandler = class extends RequestHandler {
|
|
43
43
|
constructor(operationType, operationName, endpoint, resolver, options) {
|
|
44
44
|
let resolvedOperationName = operationName;
|
|
45
45
|
if (isDocumentNode(operationName)) {
|
|
@@ -68,16 +68,33 @@ class GraphQLHandler extends RequestHandler {
|
|
|
68
68
|
});
|
|
69
69
|
this.endpoint = endpoint;
|
|
70
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Parses the request body, once per request, cached across all
|
|
73
|
+
* GraphQL handlers. This is done to avoid multiple parsing of the
|
|
74
|
+
* request body, which each requires a clone of the request.
|
|
75
|
+
*/
|
|
76
|
+
parseGraphQLRequestOrGetFromCache(request) {
|
|
77
|
+
return __async(this, null, function* () {
|
|
78
|
+
if (!_GraphQLHandler.parsedRequestCache.has(request)) {
|
|
79
|
+
_GraphQLHandler.parsedRequestCache.set(
|
|
80
|
+
request,
|
|
81
|
+
yield parseGraphQLRequest(request).catch((error) => {
|
|
82
|
+
console.error(error);
|
|
83
|
+
return void 0;
|
|
84
|
+
})
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
return _GraphQLHandler.parsedRequestCache.get(request);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
71
90
|
parse(args) {
|
|
72
91
|
return __async(this, null, function* () {
|
|
73
92
|
const match = matchRequestUrl(new URL(args.request.url), this.endpoint);
|
|
74
|
-
if (!match.matches)
|
|
93
|
+
if (!match.matches) {
|
|
75
94
|
return { match };
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return void 0;
|
|
80
|
-
}
|
|
95
|
+
}
|
|
96
|
+
const parsedResult = yield this.parseGraphQLRequestOrGetFromCache(
|
|
97
|
+
args.request
|
|
81
98
|
);
|
|
82
99
|
if (typeof parsedResult === "undefined") {
|
|
83
100
|
return { match };
|
|
@@ -134,7 +151,9 @@ Consider naming this operation or using "graphql.operation()" request handler to
|
|
|
134
151
|
console.groupEnd();
|
|
135
152
|
});
|
|
136
153
|
}
|
|
137
|
-
}
|
|
154
|
+
};
|
|
155
|
+
let GraphQLHandler = _GraphQLHandler;
|
|
156
|
+
GraphQLHandler.parsedRequestCache = /* @__PURE__ */ new WeakMap();
|
|
138
157
|
export {
|
|
139
158
|
GraphQLHandler,
|
|
140
159
|
isDocumentNode
|
|
@@ -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-25f9cfd1.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-25f9cfd1.js';
|
|
2
2
|
import '../typeUtils.js';
|
|
@@ -61,7 +61,7 @@ module.exports = __toCommonJS(RequestHandler_exports);
|
|
|
61
61
|
var import_outvariant = require("outvariant");
|
|
62
62
|
var import_getCallFrame = require("../utils/internal/getCallFrame.js");
|
|
63
63
|
var import_isIterable = require("../utils/internal/isIterable.js");
|
|
64
|
-
class
|
|
64
|
+
const _RequestHandler = class {
|
|
65
65
|
constructor(args) {
|
|
66
66
|
this.resolver = args.resolver;
|
|
67
67
|
this.options = args.options;
|
|
@@ -103,6 +103,18 @@ class RequestHandler {
|
|
|
103
103
|
extendResolverArgs(_args) {
|
|
104
104
|
return {};
|
|
105
105
|
}
|
|
106
|
+
// Clone the request instance before it's passed to the handler phases
|
|
107
|
+
// and the response resolver so we can always read it for logging.
|
|
108
|
+
// We only clone it once per request to avoid unnecessary overhead.
|
|
109
|
+
cloneRequestOrGetFromCache(request) {
|
|
110
|
+
const existingClone = _RequestHandler.cache.get(request);
|
|
111
|
+
if (typeof existingClone !== "undefined") {
|
|
112
|
+
return existingClone;
|
|
113
|
+
}
|
|
114
|
+
const clonedRequest = request.clone();
|
|
115
|
+
_RequestHandler.cache.set(request, clonedRequest);
|
|
116
|
+
return clonedRequest;
|
|
117
|
+
}
|
|
106
118
|
/**
|
|
107
119
|
* Execute this request handler and produce a mocked response
|
|
108
120
|
* using the given resolver function.
|
|
@@ -113,7 +125,7 @@ class RequestHandler {
|
|
|
113
125
|
if (this.isUsed && ((_a = this.options) == null ? void 0 : _a.once)) {
|
|
114
126
|
return null;
|
|
115
127
|
}
|
|
116
|
-
const
|
|
128
|
+
const requestClone = this.cloneRequestOrGetFromCache(args.request);
|
|
117
129
|
const parsedResult = yield this.parse({
|
|
118
130
|
request: args.request,
|
|
119
131
|
resolutionContext: args.resolutionContext
|
|
@@ -141,7 +153,7 @@ class RequestHandler {
|
|
|
141
153
|
const executionResult = this.createExecutionResult({
|
|
142
154
|
// Pass the cloned request to the result so that logging
|
|
143
155
|
// and other consumers could read its body once more.
|
|
144
|
-
request:
|
|
156
|
+
request: requestClone,
|
|
145
157
|
response: mockedResponse,
|
|
146
158
|
parsedResult
|
|
147
159
|
});
|
|
@@ -184,4 +196,6 @@ class RequestHandler {
|
|
|
184
196
|
parsedResult: args.parsedResult
|
|
185
197
|
};
|
|
186
198
|
}
|
|
187
|
-
}
|
|
199
|
+
};
|
|
200
|
+
let RequestHandler = _RequestHandler;
|
|
201
|
+
RequestHandler.cache = /* @__PURE__ */ new WeakMap();
|
|
@@ -40,7 +40,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
40
40
|
import { invariant } from "outvariant";
|
|
41
41
|
import { getCallFrame } from '../utils/internal/getCallFrame.mjs';
|
|
42
42
|
import { isIterable } from '../utils/internal/isIterable.mjs';
|
|
43
|
-
class
|
|
43
|
+
const _RequestHandler = class {
|
|
44
44
|
constructor(args) {
|
|
45
45
|
this.resolver = args.resolver;
|
|
46
46
|
this.options = args.options;
|
|
@@ -82,6 +82,18 @@ class RequestHandler {
|
|
|
82
82
|
extendResolverArgs(_args) {
|
|
83
83
|
return {};
|
|
84
84
|
}
|
|
85
|
+
// Clone the request instance before it's passed to the handler phases
|
|
86
|
+
// and the response resolver so we can always read it for logging.
|
|
87
|
+
// We only clone it once per request to avoid unnecessary overhead.
|
|
88
|
+
cloneRequestOrGetFromCache(request) {
|
|
89
|
+
const existingClone = _RequestHandler.cache.get(request);
|
|
90
|
+
if (typeof existingClone !== "undefined") {
|
|
91
|
+
return existingClone;
|
|
92
|
+
}
|
|
93
|
+
const clonedRequest = request.clone();
|
|
94
|
+
_RequestHandler.cache.set(request, clonedRequest);
|
|
95
|
+
return clonedRequest;
|
|
96
|
+
}
|
|
85
97
|
/**
|
|
86
98
|
* Execute this request handler and produce a mocked response
|
|
87
99
|
* using the given resolver function.
|
|
@@ -92,7 +104,7 @@ class RequestHandler {
|
|
|
92
104
|
if (this.isUsed && ((_a = this.options) == null ? void 0 : _a.once)) {
|
|
93
105
|
return null;
|
|
94
106
|
}
|
|
95
|
-
const
|
|
107
|
+
const requestClone = this.cloneRequestOrGetFromCache(args.request);
|
|
96
108
|
const parsedResult = yield this.parse({
|
|
97
109
|
request: args.request,
|
|
98
110
|
resolutionContext: args.resolutionContext
|
|
@@ -120,7 +132,7 @@ class RequestHandler {
|
|
|
120
132
|
const executionResult = this.createExecutionResult({
|
|
121
133
|
// Pass the cloned request to the result so that logging
|
|
122
134
|
// and other consumers could read its body once more.
|
|
123
|
-
request:
|
|
135
|
+
request: requestClone,
|
|
124
136
|
response: mockedResponse,
|
|
125
137
|
parsedResult
|
|
126
138
|
});
|
|
@@ -163,7 +175,9 @@ class RequestHandler {
|
|
|
163
175
|
parsedResult: args.parsedResult
|
|
164
176
|
};
|
|
165
177
|
}
|
|
166
|
-
}
|
|
178
|
+
};
|
|
179
|
+
let RequestHandler = _RequestHandler;
|
|
180
|
+
RequestHandler.cache = /* @__PURE__ */ new WeakMap();
|
|
167
181
|
export {
|
|
168
182
|
RequestHandler
|
|
169
183
|
};
|
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-25f9cfd1.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-25f9cfd1.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-da09c680.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-25f9cfd1.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-25f9cfd1.js';
|
|
2
2
|
import '../typeUtils.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
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-25f9cfd1.js';
|
|
3
3
|
import { SharedOptions, LifeCycleEventsMap } from '../sharedOptions.js';
|
|
4
4
|
import { RequiredDeep } from '../typeUtils.js';
|
|
5
5
|
import './request/onUnhandledRequest.js';
|
|
@@ -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-da09c680.js';
|
|
3
|
+
import '../../RequestHandler-25f9cfd1.js';
|
|
4
4
|
import '../../typeUtils.js';
|
|
5
5
|
import '../matching/matchRequestUrl.js';
|
|
@@ -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-25f9cfd1.js';
|
|
2
2
|
import '../../typeUtils.js';
|
|
3
3
|
|
|
4
4
|
declare function use(currentHandlers: Array<RequestHandler>, ...handlers: Array<RequestHandler>): void;
|
package/lib/iife/index.js
CHANGED
|
@@ -507,7 +507,7 @@ var MockServiceWorker = (() => {
|
|
|
507
507
|
}
|
|
508
508
|
|
|
509
509
|
// src/core/handlers/RequestHandler.ts
|
|
510
|
-
var
|
|
510
|
+
var _RequestHandler = class {
|
|
511
511
|
constructor(args) {
|
|
512
512
|
this.resolver = args.resolver;
|
|
513
513
|
this.options = args.options;
|
|
@@ -549,6 +549,18 @@ var MockServiceWorker = (() => {
|
|
|
549
549
|
extendResolverArgs(_args) {
|
|
550
550
|
return {};
|
|
551
551
|
}
|
|
552
|
+
// Clone the request instance before it's passed to the handler phases
|
|
553
|
+
// and the response resolver so we can always read it for logging.
|
|
554
|
+
// We only clone it once per request to avoid unnecessary overhead.
|
|
555
|
+
cloneRequestOrGetFromCache(request) {
|
|
556
|
+
const existingClone = _RequestHandler.cache.get(request);
|
|
557
|
+
if (typeof existingClone !== "undefined") {
|
|
558
|
+
return existingClone;
|
|
559
|
+
}
|
|
560
|
+
const clonedRequest = request.clone();
|
|
561
|
+
_RequestHandler.cache.set(request, clonedRequest);
|
|
562
|
+
return clonedRequest;
|
|
563
|
+
}
|
|
552
564
|
/**
|
|
553
565
|
* Execute this request handler and produce a mocked response
|
|
554
566
|
* using the given resolver function.
|
|
@@ -559,7 +571,7 @@ var MockServiceWorker = (() => {
|
|
|
559
571
|
if (this.isUsed && ((_a3 = this.options) == null ? void 0 : _a3.once)) {
|
|
560
572
|
return null;
|
|
561
573
|
}
|
|
562
|
-
const
|
|
574
|
+
const requestClone = this.cloneRequestOrGetFromCache(args.request);
|
|
563
575
|
const parsedResult = yield this.parse({
|
|
564
576
|
request: args.request,
|
|
565
577
|
resolutionContext: args.resolutionContext
|
|
@@ -587,7 +599,7 @@ var MockServiceWorker = (() => {
|
|
|
587
599
|
const executionResult = this.createExecutionResult({
|
|
588
600
|
// Pass the cloned request to the result so that logging
|
|
589
601
|
// and other consumers could read its body once more.
|
|
590
|
-
request:
|
|
602
|
+
request: requestClone,
|
|
591
603
|
response: mockedResponse,
|
|
592
604
|
parsedResult
|
|
593
605
|
});
|
|
@@ -631,6 +643,8 @@ var MockServiceWorker = (() => {
|
|
|
631
643
|
};
|
|
632
644
|
}
|
|
633
645
|
};
|
|
646
|
+
var RequestHandler = _RequestHandler;
|
|
647
|
+
RequestHandler.cache = /* @__PURE__ */ new WeakMap();
|
|
634
648
|
|
|
635
649
|
// src/core/utils/internal/isStringEqual.ts
|
|
636
650
|
function isStringEqual(actual, expected) {
|
|
@@ -5632,7 +5646,7 @@ spurious results.`);
|
|
|
5632
5646
|
}
|
|
5633
5647
|
return typeof value === "object" && "kind" in value && "definitions" in value;
|
|
5634
5648
|
}
|
|
5635
|
-
var
|
|
5649
|
+
var _GraphQLHandler = class extends RequestHandler {
|
|
5636
5650
|
constructor(operationType, operationName, endpoint, resolver, options) {
|
|
5637
5651
|
let resolvedOperationName = operationName;
|
|
5638
5652
|
if (isDocumentNode(operationName)) {
|
|
@@ -5661,16 +5675,33 @@ spurious results.`);
|
|
|
5661
5675
|
});
|
|
5662
5676
|
this.endpoint = endpoint;
|
|
5663
5677
|
}
|
|
5678
|
+
/**
|
|
5679
|
+
* Parses the request body, once per request, cached across all
|
|
5680
|
+
* GraphQL handlers. This is done to avoid multiple parsing of the
|
|
5681
|
+
* request body, which each requires a clone of the request.
|
|
5682
|
+
*/
|
|
5683
|
+
parseGraphQLRequestOrGetFromCache(request) {
|
|
5684
|
+
return __async(this, null, function* () {
|
|
5685
|
+
if (!_GraphQLHandler.parsedRequestCache.has(request)) {
|
|
5686
|
+
_GraphQLHandler.parsedRequestCache.set(
|
|
5687
|
+
request,
|
|
5688
|
+
yield parseGraphQLRequest(request).catch((error3) => {
|
|
5689
|
+
console.error(error3);
|
|
5690
|
+
return void 0;
|
|
5691
|
+
})
|
|
5692
|
+
);
|
|
5693
|
+
}
|
|
5694
|
+
return _GraphQLHandler.parsedRequestCache.get(request);
|
|
5695
|
+
});
|
|
5696
|
+
}
|
|
5664
5697
|
parse(args) {
|
|
5665
5698
|
return __async(this, null, function* () {
|
|
5666
5699
|
const match2 = matchRequestUrl(new URL(args.request.url), this.endpoint);
|
|
5667
|
-
if (!match2.matches)
|
|
5700
|
+
if (!match2.matches) {
|
|
5668
5701
|
return { match: match2 };
|
|
5669
|
-
|
|
5670
|
-
|
|
5671
|
-
|
|
5672
|
-
return void 0;
|
|
5673
|
-
}
|
|
5702
|
+
}
|
|
5703
|
+
const parsedResult = yield this.parseGraphQLRequestOrGetFromCache(
|
|
5704
|
+
args.request
|
|
5674
5705
|
);
|
|
5675
5706
|
if (typeof parsedResult === "undefined") {
|
|
5676
5707
|
return { match: match2 };
|
|
@@ -5728,6 +5759,8 @@ Consider naming this operation or using "graphql.operation()" request handler to
|
|
|
5728
5759
|
});
|
|
5729
5760
|
}
|
|
5730
5761
|
};
|
|
5762
|
+
var GraphQLHandler = _GraphQLHandler;
|
|
5763
|
+
GraphQLHandler.parsedRequestCache = /* @__PURE__ */ new WeakMap();
|
|
5731
5764
|
|
|
5732
5765
|
// src/core/graphql.ts
|
|
5733
5766
|
function createScopedGraphQLHandler(operationType, url) {
|
package/lib/mockServiceWorker.js
CHANGED
package/lib/native/index.d.ts
CHANGED
package/lib/native/index.js
CHANGED
|
@@ -70,7 +70,6 @@ var SetupServerApi = class extends import_SetupApi.SetupApi {
|
|
|
70
70
|
*/
|
|
71
71
|
init() {
|
|
72
72
|
this.interceptor.on("request", (_0) => __async(this, [_0], function* ({ request, requestId }) {
|
|
73
|
-
this.onRequest(request);
|
|
74
73
|
const response = yield (0, import_handleRequest.handleRequest)(
|
|
75
74
|
request,
|
|
76
75
|
requestId,
|
|
@@ -119,8 +118,6 @@ var SetupServerApi = class extends import_SetupApi.SetupApi {
|
|
|
119
118
|
close() {
|
|
120
119
|
this.dispose();
|
|
121
120
|
}
|
|
122
|
-
onRequest(request) {
|
|
123
|
-
}
|
|
124
121
|
};
|
|
125
122
|
|
|
126
123
|
// src/native/index.ts
|
package/lib/native/index.mjs
CHANGED
|
@@ -50,7 +50,6 @@ var SetupServerApi = class extends SetupApi {
|
|
|
50
50
|
*/
|
|
51
51
|
init() {
|
|
52
52
|
this.interceptor.on("request", (_0) => __async(this, [_0], function* ({ request, requestId }) {
|
|
53
|
-
this.onRequest(request);
|
|
54
53
|
const response = yield handleRequest(
|
|
55
54
|
request,
|
|
56
55
|
requestId,
|
|
@@ -99,8 +98,6 @@ var SetupServerApi = class extends SetupApi {
|
|
|
99
98
|
close() {
|
|
100
99
|
this.dispose();
|
|
101
100
|
}
|
|
102
|
-
onRequest(request) {
|
|
103
|
-
}
|
|
104
101
|
};
|
|
105
102
|
|
|
106
103
|
// src/native/index.ts
|
package/lib/node/index.d.ts
CHANGED
package/lib/node/index.js
CHANGED
|
@@ -70,7 +70,6 @@ var SetupServerApi = class extends import_SetupApi.SetupApi {
|
|
|
70
70
|
*/
|
|
71
71
|
init() {
|
|
72
72
|
this.interceptor.on("request", (_0) => __async(this, [_0], function* ({ request, requestId }) {
|
|
73
|
-
this.onRequest(request);
|
|
74
73
|
const response = yield (0, import_handleRequest.handleRequest)(
|
|
75
74
|
request,
|
|
76
75
|
requestId,
|
|
@@ -119,47 +118,14 @@ var SetupServerApi = class extends import_SetupApi.SetupApi {
|
|
|
119
118
|
close() {
|
|
120
119
|
this.dispose();
|
|
121
120
|
}
|
|
122
|
-
onRequest(request) {
|
|
123
|
-
}
|
|
124
121
|
};
|
|
125
122
|
|
|
126
123
|
// src/node/setupServer.ts
|
|
127
124
|
var import_ClientRequest = require("@mswjs/interceptors/ClientRequest");
|
|
128
125
|
var import_XMLHttpRequest = require("@mswjs/interceptors/XMLHttpRequest");
|
|
129
126
|
var import_fetch = require("@mswjs/interceptors/fetch");
|
|
130
|
-
var import_node_events = require("events");
|
|
131
|
-
|
|
132
|
-
// src/node/utils/isNodeExceptionLike.ts
|
|
133
|
-
function isNodeExceptionLike(error) {
|
|
134
|
-
return !!error && typeof error === "object" && "code" in error;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// src/node/setupServer.ts
|
|
138
|
-
var SetupServerApi2 = class extends SetupServerApi {
|
|
139
|
-
/**
|
|
140
|
-
* Bump the maximum number of event listeners on the
|
|
141
|
-
* request's "AbortSignal". This prepares the request
|
|
142
|
-
* for each request handler cloning it at least once.
|
|
143
|
-
* Note that cloning a request automatically appends a
|
|
144
|
-
* new "abort" event listener to the parent request's
|
|
145
|
-
* "AbortController" so if the parent aborts, all the
|
|
146
|
-
* clones are automatically aborted.
|
|
147
|
-
*/
|
|
148
|
-
onRequest(request) {
|
|
149
|
-
try {
|
|
150
|
-
(0, import_node_events.setMaxListeners)(
|
|
151
|
-
Math.max(import_node_events.defaultMaxListeners, this.currentHandlers.length),
|
|
152
|
-
request.signal
|
|
153
|
-
);
|
|
154
|
-
} catch (error) {
|
|
155
|
-
if (!(isNodeExceptionLike(error) && error.code === "ERR_INVALID_ARG_TYPE")) {
|
|
156
|
-
throw error;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
};
|
|
161
127
|
var setupServer = (...handlers) => {
|
|
162
|
-
return new
|
|
128
|
+
return new SetupServerApi(
|
|
163
129
|
[import_ClientRequest.ClientRequestInterceptor, import_XMLHttpRequest.XMLHttpRequestInterceptor, import_fetch.FetchInterceptor],
|
|
164
130
|
...handlers
|
|
165
131
|
);
|
package/lib/node/index.mjs
CHANGED
|
@@ -47,7 +47,6 @@ var SetupServerApi = class extends SetupApi {
|
|
|
47
47
|
*/
|
|
48
48
|
init() {
|
|
49
49
|
this.interceptor.on("request", (_0) => __async(this, [_0], function* ({ request, requestId }) {
|
|
50
|
-
this.onRequest(request);
|
|
51
50
|
const response = yield handleRequest(
|
|
52
51
|
request,
|
|
53
52
|
requestId,
|
|
@@ -96,47 +95,14 @@ var SetupServerApi = class extends SetupApi {
|
|
|
96
95
|
close() {
|
|
97
96
|
this.dispose();
|
|
98
97
|
}
|
|
99
|
-
onRequest(request) {
|
|
100
|
-
}
|
|
101
98
|
};
|
|
102
99
|
|
|
103
100
|
// src/node/setupServer.ts
|
|
104
101
|
import { ClientRequestInterceptor } from "@mswjs/interceptors/ClientRequest";
|
|
105
102
|
import { XMLHttpRequestInterceptor } from "@mswjs/interceptors/XMLHttpRequest";
|
|
106
103
|
import { FetchInterceptor } from "@mswjs/interceptors/fetch";
|
|
107
|
-
import { defaultMaxListeners, setMaxListeners } from "events";
|
|
108
|
-
|
|
109
|
-
// src/node/utils/isNodeExceptionLike.ts
|
|
110
|
-
function isNodeExceptionLike(error) {
|
|
111
|
-
return !!error && typeof error === "object" && "code" in error;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// src/node/setupServer.ts
|
|
115
|
-
var SetupServerApi2 = class extends SetupServerApi {
|
|
116
|
-
/**
|
|
117
|
-
* Bump the maximum number of event listeners on the
|
|
118
|
-
* request's "AbortSignal". This prepares the request
|
|
119
|
-
* for each request handler cloning it at least once.
|
|
120
|
-
* Note that cloning a request automatically appends a
|
|
121
|
-
* new "abort" event listener to the parent request's
|
|
122
|
-
* "AbortController" so if the parent aborts, all the
|
|
123
|
-
* clones are automatically aborted.
|
|
124
|
-
*/
|
|
125
|
-
onRequest(request) {
|
|
126
|
-
try {
|
|
127
|
-
setMaxListeners(
|
|
128
|
-
Math.max(defaultMaxListeners, this.currentHandlers.length),
|
|
129
|
-
request.signal
|
|
130
|
-
);
|
|
131
|
-
} catch (error) {
|
|
132
|
-
if (!(isNodeExceptionLike(error) && error.code === "ERR_INVALID_ARG_TYPE")) {
|
|
133
|
-
throw error;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
104
|
var setupServer = (...handlers) => {
|
|
139
|
-
return new
|
|
105
|
+
return new SetupServerApi(
|
|
140
106
|
[ClientRequestInterceptor, XMLHttpRequestInterceptor, FetchInterceptor],
|
|
141
107
|
...handlers
|
|
142
108
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "msw",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.12",
|
|
4
4
|
"description": "Seamless REST/GraphQL API mocking library for browser and Node.js.",
|
|
5
5
|
"main": "./lib/core/index.js",
|
|
6
6
|
"module": "./lib/core/index.mjs",
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
"webpack-http-server": "^0.5.0"
|
|
168
168
|
},
|
|
169
169
|
"peerDependencies": {
|
|
170
|
-
"typescript": ">= 4.7.x <= 5.
|
|
170
|
+
"typescript": ">= 4.7.x <= 5.3.x"
|
|
171
171
|
},
|
|
172
172
|
"peerDependenciesMeta": {
|
|
173
173
|
"typescript": {
|