msw 0.20.5 → 0.21.3

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.
Files changed (74) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +1 -1
  3. package/lib/esm/fetch-deps.js +26 -23
  4. package/lib/esm/graphql.js +92 -79
  5. package/lib/esm/index.js +90 -44
  6. package/lib/esm/{matchRequest-deps.js → matchRequestUrl-deps.js} +29 -17
  7. package/lib/esm/mockServiceWorker.js +8 -1
  8. package/lib/esm/rest-deps.js +27 -18
  9. package/lib/esm/rest.js +1 -1
  10. package/lib/esm/xml-deps.js +3 -3
  11. package/lib/types/LiveStorage.d.ts +17 -0
  12. package/lib/types/context/body.d.ts +2 -2
  13. package/lib/types/context/errors.d.ts +3 -1
  14. package/lib/types/context/fetch.d.ts +2 -2
  15. package/lib/types/context/json.d.ts +5 -3
  16. package/lib/types/context/text.d.ts +2 -2
  17. package/lib/types/context/xml.d.ts +2 -2
  18. package/lib/types/graphql.d.ts +8 -10
  19. package/lib/types/index.d.ts +3 -3
  20. package/lib/types/native/index.d.ts +7 -1
  21. package/lib/types/node/createSetupServer.d.ts +29 -0
  22. package/lib/types/node/setupServer.d.ts +4 -24
  23. package/lib/types/response.d.ts +10 -7
  24. package/lib/types/rest.d.ts +158 -16
  25. package/lib/types/setupWorker/glossary.d.ts +14 -4
  26. package/lib/types/setupWorker/start/utils/getWorkerByRegistration.d.ts +2 -1
  27. package/lib/types/setupWorker/start/utils/getWorkerInstance.d.ts +2 -2
  28. package/lib/types/sharedOptions.d.ts +1 -1
  29. package/lib/types/utils/getResponse.d.ts +2 -2
  30. package/lib/types/utils/handlers/requestHandler.d.ts +74 -0
  31. package/lib/types/utils/{requestHandlerUtils.d.ts → handlers/requestHandlerUtils.d.ts} +2 -2
  32. package/lib/types/utils/{isNodeProcess.d.ts → internal/isNodeProcess.d.ts} +1 -0
  33. package/lib/types/utils/{isStringEqual.d.ts → internal/isStringEqual.d.ts} +0 -0
  34. package/lib/types/utils/{jsonParse.d.ts → internal/jsonParse.d.ts} +0 -0
  35. package/lib/types/utils/internal/mergeRight.d.ts +5 -0
  36. package/lib/types/utils/{logger → logging}/getStatusCodeColor.d.ts +0 -0
  37. package/lib/types/utils/{logger → logging}/getTimestamp.d.ts +0 -0
  38. package/lib/types/utils/{logger → logging}/prepareRequest.d.ts +3 -3
  39. package/lib/types/utils/{logger → logging}/prepareResponse.d.ts +2 -2
  40. package/lib/types/utils/matching/{matchRequest.d.ts → matchRequestUrl.d.ts} +0 -0
  41. package/lib/types/utils/request/getPublicUrlFromRequest.d.ts +6 -0
  42. package/lib/types/utils/request/getRequestCookies.d.ts +1 -1
  43. package/lib/types/{onUnhandledRequest.d.ts → utils/request/onUnhandledRequest.d.ts} +1 -1
  44. package/lib/types/utils/request/parseBody.d.ts +5 -0
  45. package/lib/types/utils/url/getAbsoluteUrl.d.ts +6 -0
  46. package/lib/types/utils/{getAbsoluteWorkerUrl.d.ts → url/getAbsoluteWorkerUrl.d.ts} +0 -0
  47. package/lib/types/utils/url/getUrlByMask.d.ts +5 -0
  48. package/lib/umd/index.js +696 -613
  49. package/lib/umd/mockServiceWorker.js +8 -1
  50. package/native/index.js +1508 -133
  51. package/node/context/delay.d.ts +11 -0
  52. package/node/context/fetch.d.ts +8 -0
  53. package/node/context/set.d.ts +2 -0
  54. package/node/context/status.d.ts +2 -0
  55. package/node/index.js +1507 -133
  56. package/node/node/createSetupServer.d.ts +29 -0
  57. package/node/node/index.d.ts +5 -0
  58. package/node/node/setupServer.d.ts +7 -0
  59. package/node/response.d.ts +25 -0
  60. package/node/utils/NetworkError.d.ts +3 -0
  61. package/node/utils/getResponse.d.ts +14 -0
  62. package/{lib/types → node/utils}/handlers/requestHandler.d.ts +13 -12
  63. package/node/utils/handlers/requestHandlerUtils.d.ts +4 -0
  64. package/node/utils/internal/compose.d.ts +5 -0
  65. package/node/utils/internal/isNodeProcess.d.ts +5 -0
  66. package/node/utils/internal/jsonParse.d.ts +5 -0
  67. package/node/utils/request/getPublicUrlFromRequest.d.ts +6 -0
  68. package/node/utils/request/onUnhandledRequest.d.ts +5 -0
  69. package/node/utils/request/parseBody.d.ts +5 -0
  70. package/package.json +34 -29
  71. package/lib/types/utils/getJsonBody.d.ts +0 -5
  72. package/lib/types/utils/request/parseRequestBody.d.ts +0 -2
  73. package/lib/types/utils/resolveMask.d.ts +0 -6
  74. package/lib/types/utils/resolveRelativeUrl.d.ts +0 -6
@@ -14,11 +14,21 @@ function jsonParse(str) {
14
14
  }
15
15
 
16
16
  /**
17
- * Returns a parsed JSON from a given valid body string,
18
- * otherwise returns a given body string as-is.
17
+ * Parses a given request/response body based on the `Content-Type` header.
19
18
  */
20
- function getJsonBody(body) {
21
- return jsonParse(body) || body;
19
+ function parseBody(body, headers) {
20
+ var _a;
21
+ if (body) {
22
+ // If the intercepted request's body has a JSON Content-Type
23
+ // parse it into an object, otherwise leave as-is.
24
+ const hasJsonContent = (_a = headers === null || headers === void 0 ? void 0 : headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.includes('json');
25
+ if (hasJsonContent && typeof body !== 'object') {
26
+ return jsonParse(body) || body;
27
+ }
28
+ return body;
29
+ }
30
+ // Return whatever falsey body value is given.
31
+ return body;
22
32
  }
23
33
 
24
34
  /**
@@ -32,12 +42,10 @@ function prepareRequest(req) {
32
42
  * Formats a mocked response for introspection in browser's console.
33
43
  */
34
44
  function prepareResponse(res) {
35
- var _a;
36
- const resHeaders = lib.listToHeaders(res.headers);
45
+ const responseHeaders = lib.listToHeaders(res.headers);
37
46
  return Object.assign(Object.assign({}, res), {
38
47
  // Parse a response JSON body for preview in the logs
39
- body: ((_a = resHeaders.get('content-type')) === null || _a === void 0 ? void 0 : _a.includes('json')) ? getJsonBody(res.body)
40
- : res.body });
48
+ body: parseBody(res.body, responseHeaders) });
41
49
  }
42
50
 
43
51
  function getTimestamp() {
@@ -114,10 +122,10 @@ exports.getCleanUrl = getCleanUrl;
114
122
  });
115
123
 
116
124
  /**
117
- * Resolves a relative URL to the absolute URL with the same hostname.
125
+ * Returns an absolute URL based on the given relative URL, if possible.
118
126
  * Ignores regular expressions.
119
127
  */
120
- const resolveRelativeUrl = (mask) => {
128
+ const getAbsoluteUrl = (mask) => {
121
129
  // Global `location` object doesn't exist in Node.
122
130
  // Relative request predicate URL cannot become absolute.
123
131
  const hasLocation = typeof location !== 'undefined';
@@ -128,17 +136,21 @@ const resolveRelativeUrl = (mask) => {
128
136
 
129
137
  /**
130
138
  * Converts a given request handler mask into a URL, if given a valid URL string.
131
- * Otherwise, returns the mask as-is.
132
139
  */
133
- function resolveMask(mask) {
134
- if (mask instanceof RegExp) {
140
+ function getUrlByMask(mask) {
141
+ /**
142
+ * If a string mask contains an asterisk (wildcard), return it as-is.
143
+ * Converting a URL-like path string into an actual URL is misleading.
144
+ * @see https://github.com/mswjs/msw/issues/357
145
+ */
146
+ if (mask instanceof RegExp || mask.includes('*')) {
135
147
  return mask;
136
148
  }
137
149
  try {
138
150
  // Attempt to create a URL instance out of the mask string.
139
151
  // Resolve mask to an absolute URL, because even a valid relative URL
140
152
  // cannot be converted into the URL instance (required absolute URL only).
141
- return new URL(resolveRelativeUrl(mask));
153
+ return new URL(getAbsoluteUrl(mask));
142
154
  }
143
155
  catch (error) {
144
156
  // Otherwise, the mask is a path string.
@@ -151,7 +163,7 @@ function getCleanMask(resolvedMask) {
151
163
  ? getCleanUrl_1.getCleanUrl(resolvedMask)
152
164
  : resolvedMask instanceof RegExp
153
165
  ? resolvedMask
154
- : resolveRelativeUrl(resolvedMask);
166
+ : getAbsoluteUrl(resolvedMask);
155
167
  }
156
168
 
157
169
  /**
@@ -159,10 +171,10 @@ function getCleanMask(resolvedMask) {
159
171
  * against a mask.
160
172
  */
161
173
  function matchRequestUrl(url, mask) {
162
- const resolvedMask = resolveMask(mask);
174
+ const resolvedMask = getUrlByMask(mask);
163
175
  const cleanMask = getCleanMask(resolvedMask);
164
176
  const cleanRequestUrl = getCleanUrl_1.getCleanUrl(url);
165
177
  return match(cleanMask, cleanRequestUrl);
166
178
  }
167
179
 
168
- export { prepareResponse as a, getTimestamp as b, getStatusCodeColor as c, getJsonBody as g, jsonParse as j, matchRequestUrl as m, prepareRequest as p, resolveMask as r };
180
+ export { prepareRequest as a, prepareResponse as b, getTimestamp as c, getStatusCodeColor as d, getUrlByMask as g, jsonParse as j, matchRequestUrl as m, parseBody as p };
@@ -7,7 +7,7 @@
7
7
  /* eslint-disable */
8
8
  /* tslint:disable */
9
9
 
10
- const INTEGRITY_CHECKSUM = 'ca2c3cd7453d8c614e2c19db63ede1a1'
10
+ const INTEGRITY_CHECKSUM = 'd1e0e502f550d40a34bee90822e4bf98'
11
11
  const bypassHeaderName = 'x-msw-bypass'
12
12
 
13
13
  let clients = {}
@@ -27,6 +27,13 @@ self.addEventListener('message', async function (event) {
27
27
  const allClientIds = allClients.map((client) => client.id)
28
28
 
29
29
  switch (event.data) {
30
+ case 'KEEPALIVE_REQUEST': {
31
+ sendToClient(client, {
32
+ type: 'KEEPALIVE_RESPONSE',
33
+ })
34
+ break
35
+ }
36
+
30
37
  case 'INTEGRITY_CHECK_REQUEST': {
31
38
  sendToClient(client, {
32
39
  type: 'INTEGRITY_CHECK_RESPONSE',
@@ -1,13 +1,6 @@
1
1
  import { c as createCommonjsModule, b as commonjsGlobal, a as set, s as status, j as json, d as delay, f as fetch } from './fetch-deps.js';
2
2
  import { c as cookie, b as body, t as text, x as xml } from './xml-deps.js';
3
- import { r as resolveMask, m as matchRequestUrl, p as prepareRequest, a as prepareResponse, b as getTimestamp, c as getStatusCodeColor } from './matchRequest-deps.js';
4
-
5
- /**
6
- * Performs a case-insensitive comparison of two given strings.
7
- */
8
- function isStringEqual(actual, expected) {
9
- return actual.toLowerCase() === expected.toLowerCase();
10
- }
3
+ import { g as getUrlByMask, m as matchRequestUrl, a as prepareRequest, b as prepareResponse, c as getTimestamp, d as getStatusCodeColor } from './matchRequestUrl-deps.js';
11
4
 
12
5
  var punycode = createCommonjsModule(function (module, exports) {
13
6
  (function(root) {
@@ -1350,8 +1343,30 @@ Url.prototype.parseHost = function() {
1350
1343
  if (host) this.hostname = host;
1351
1344
  };
1352
1345
 
1346
+ /**
1347
+ * Returns a relative URL if the given request URL is relative to the current origin.
1348
+ * Otherwise returns an absolute URL.
1349
+ */
1350
+ const getPublicUrlFromRequest = (request) => {
1351
+ return request.referrer.startsWith(request.url.origin)
1352
+ ? request.url.pathname
1353
+ : format({
1354
+ protocol: request.url.protocol,
1355
+ host: request.url.host,
1356
+ pathname: request.url.pathname,
1357
+ });
1358
+ };
1359
+
1360
+ /**
1361
+ * Performs a case-insensitive comparison of two given strings.
1362
+ */
1363
+ function isStringEqual(actual, expected) {
1364
+ return actual.toLowerCase() === expected.toLowerCase();
1365
+ }
1366
+
1353
1367
  var RESTMethods;
1354
1368
  (function (RESTMethods) {
1369
+ RESTMethods["HEAD"] = "HEAD";
1355
1370
  RESTMethods["GET"] = "GET";
1356
1371
  RESTMethods["POST"] = "POST";
1357
1372
  RESTMethods["PUT"] = "PUT";
@@ -1372,7 +1387,7 @@ const restContext = {
1372
1387
  };
1373
1388
  const createRestHandler = (method) => {
1374
1389
  return (mask, resolver) => {
1375
- const resolvedMask = resolveMask(mask);
1390
+ const resolvedMask = getUrlByMask(mask);
1376
1391
  return {
1377
1392
  parse(req) {
1378
1393
  // Match the request during parsing to prevent matching it twice
@@ -1411,14 +1426,7 @@ ${queryParams
1411
1426
  })\
1412
1427
  `);
1413
1428
  }
1414
- const isRelativeRequest = req.referrer.startsWith(req.url.origin);
1415
- const publicUrl = isRelativeRequest
1416
- ? req.url.pathname
1417
- : format({
1418
- protocol: req.url.protocol,
1419
- host: req.url.host,
1420
- pathname: req.url.pathname,
1421
- });
1429
+ const publicUrl = getPublicUrlFromRequest(req);
1422
1430
  const loggedRequest = prepareRequest(req);
1423
1431
  const loggedResponse = prepareResponse(res);
1424
1432
  console.groupCollapsed('[MSW] %s %s %s (%c%s%c)', getTimestamp(), req.method, publicUrl, `color:${getStatusCodeColor(res.status)}`, res.status, 'color:inherit');
@@ -1434,6 +1442,7 @@ ${queryParams
1434
1442
  };
1435
1443
  };
1436
1444
  const rest = {
1445
+ head: createRestHandler(RESTMethods.HEAD),
1437
1446
  get: createRestHandler(RESTMethods.GET),
1438
1447
  post: createRestHandler(RESTMethods.POST),
1439
1448
  put: createRestHandler(RESTMethods.PUT),
@@ -1442,4 +1451,4 @@ const rest = {
1442
1451
  options: createRestHandler(RESTMethods.OPTIONS),
1443
1452
  };
1444
1453
 
1445
- export { RESTMethods as R, restContext as a, isStringEqual as i, rest as r };
1454
+ export { RESTMethods as R, restContext as a, getPublicUrlFromRequest as g, isStringEqual as i, rest as r };
package/lib/esm/rest.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import './fetch-deps.js';
2
2
  import './xml-deps.js';
3
- import './matchRequest-deps.js';
4
3
  export { R as RESTMethods, r as rest, a as restContext } from './rest-deps.js';
4
+ import './matchRequestUrl-deps.js';
@@ -218,7 +218,7 @@ const cookie = (name, value, options) => {
218
218
  /**
219
219
  * Sets the body of the response without any `Content-Type` header.
220
220
  * @example
221
- * res(body('foo'))
221
+ * res(body('message'))
222
222
  */
223
223
  const body = (value) => {
224
224
  return (res) => {
@@ -230,7 +230,7 @@ const body = (value) => {
230
230
  /**
231
231
  * Sets a given text as a "Cotent-Type: text/plain" body of the response.
232
232
  * @example
233
- * res(text('Message'))
233
+ * res(text('message'))
234
234
  */
235
235
  const text = (body) => {
236
236
  return (res) => {
@@ -243,7 +243,7 @@ const text = (body) => {
243
243
  /**
244
244
  * Sets the given XML as the body of the response.
245
245
  * @example
246
- * res(xml('<message>Foo</message>'))
246
+ * res(xml('<key>value</key>'))
247
247
  */
248
248
  const xml = (body) => {
249
249
  return (res) => {
@@ -0,0 +1,17 @@
1
+ export declare class LiveStorage<Value> {
2
+ name: string;
3
+ value: Value;
4
+ channel: BroadcastChannel;
5
+ constructor(name: string, initialValue: Value);
6
+ getValue: () => Value;
7
+ update: (applyUpdate: (prevValue: Value) => Value) => void;
8
+ private broadcastValue;
9
+ /**
10
+ * Flush the value into the presistency layer.
11
+ */
12
+ private persist;
13
+ /**
14
+ * Hydrate the value from the persistency layer.
15
+ */
16
+ private hydrate;
17
+ }
@@ -2,6 +2,6 @@ import { ResponseTransformer } from '../response';
2
2
  /**
3
3
  * Sets the body of the response without any `Content-Type` header.
4
4
  * @example
5
- * res(body('foo'))
5
+ * res(body('message'))
6
6
  */
7
- export declare const body: <T>(value: T) => ResponseTransformer;
7
+ export declare const body: <BodyType extends string | Blob | ArrayBufferView | ArrayBuffer | ReadableStream<any> | FormData>(value: BodyType) => ResponseTransformer<BodyType>;
@@ -3,4 +3,6 @@ import { ResponseTransformer } from '../response';
3
3
  /**
4
4
  * Returns a list of GraphQL errors.
5
5
  */
6
- export declare const errors: (errorsList: Partial<GraphQLError>[]) => ResponseTransformer;
6
+ export declare const errors: (errorsList: Partial<GraphQLError>[]) => ResponseTransformer<{
7
+ errors: Partial<GraphQLError>[];
8
+ }>;
@@ -1,8 +1,8 @@
1
- import { MockedRequest } from '../handlers/requestHandler';
1
+ import { MockedRequest } from '../utils/handlers/requestHandler';
2
2
  export declare const augmentRequestInit: (requestInit: RequestInit) => RequestInit;
3
3
  /**
4
4
  * Wrapper around the native `window.fetch()` function that performs
5
5
  * a request bypassing MSW. Requests performed using
6
6
  * this function will never be mocked.
7
7
  */
8
- export declare const fetch: <ResponseType_1 = any>(input: string | MockedRequest, requestInit?: RequestInit) => Promise<ResponseType_1>;
8
+ export declare const fetch: (input: string | MockedRequest, requestInit?: RequestInit) => any;
@@ -1,7 +1,9 @@
1
1
  import { ResponseTransformer } from '../response';
2
2
  /**
3
- * Sets the given Object as the JSON body of the response.
3
+ * Sets the given value as the JSON body of the response.
4
4
  * @example
5
- * res(json({ foo: 'bar' }))
5
+ * res(json({ key: 'value' }))
6
+ * res(json('Some string'))
7
+ * res(json([1, '2', false, { ok: true }]))
6
8
  */
7
- export declare const json: (body: Record<string, any>) => ResponseTransformer;
9
+ export declare const json: <BodyType>(body: BodyType) => ResponseTransformer<BodyType>;
@@ -2,6 +2,6 @@ import { ResponseTransformer } from '../response';
2
2
  /**
3
3
  * Sets a given text as a "Cotent-Type: text/plain" body of the response.
4
4
  * @example
5
- * res(text('Message'))
5
+ * res(text('message'))
6
6
  */
7
- export declare const text: (body: string) => ResponseTransformer;
7
+ export declare const text: <BodyType extends string>(body: BodyType) => ResponseTransformer<BodyType>;
@@ -2,6 +2,6 @@ import { ResponseTransformer } from '../response';
2
2
  /**
3
3
  * Sets the given XML as the body of the response.
4
4
  * @example
5
- * res(xml('<message>Foo</message>'))
5
+ * res(xml('<key>value</key>'))
6
6
  */
7
- export declare const xml: (body: string) => ResponseTransformer;
7
+ export declare const xml: <BodyType extends string>(body: BodyType) => ResponseTransformer<BodyType>;
@@ -1,5 +1,5 @@
1
1
  import { OperationTypeNode } from 'graphql';
2
- import { RequestHandler, MockedRequest, AsyncResponseResolverReturnType } from './handlers/requestHandler';
2
+ import { RequestHandler, MockedRequest, AsyncResponseResolverReturnType } from './utils/handlers/requestHandler';
3
3
  import { MockedResponse, ResponseComposition } from './response';
4
4
  import { Mask } from './setupWorker/glossary';
5
5
  import { set } from './context/set';
@@ -27,23 +27,21 @@ export interface GraphQLRequestPayload<VariablesType> {
27
27
  query: string;
28
28
  variables?: VariablesType;
29
29
  }
30
- interface GraphQLRequestParsedResult<VariablesType> {
30
+ export interface GraphQLRequestParsedResult<VariablesType> {
31
31
  operationType: OperationTypeNode;
32
32
  operationName: string | undefined;
33
33
  variables: VariablesType | undefined;
34
34
  }
35
- interface ParsedQueryPayload {
36
- operationName: string | undefined;
37
- }
38
- export declare function parseQuery(query: string, definitionOperation?: OperationTypeNode): ParsedQueryPayload;
39
35
  declare const graphqlStandardHandlers: {
40
- query: <QueryType, VariablesType = Record<string, any>>(expectedOperation: GraphQLRequestHandlerSelector, resolver: GraphQLResponseResolver<QueryType, VariablesType>) => RequestHandler<GraphQLMockedRequest<VariablesType>, GraphQLMockedContext<QueryType>, GraphQLRequestParsedResult<VariablesType>, GraphQLMockedRequest<VariablesType>>;
41
- mutation: <QueryType, VariablesType = Record<string, any>>(expectedOperation: GraphQLRequestHandlerSelector, resolver: GraphQLResponseResolver<QueryType, VariablesType>) => RequestHandler<GraphQLMockedRequest<VariablesType>, GraphQLMockedContext<QueryType>, GraphQLRequestParsedResult<VariablesType>, GraphQLMockedRequest<VariablesType>>;
36
+ operation: <QueryType, VariablesType = Record<string, any>>(resolver: GraphQLResponseResolver<QueryType, VariablesType>) => RequestHandler<GraphQLMockedRequest<VariablesType>, GraphQLMockedContext<QueryType>, GraphQLRequestParsedResult<VariablesType>, GraphQLMockedRequest<VariablesType>, any>;
37
+ query: <QueryType_1, VariablesType_1 = Record<string, any>>(expectedOperationName: GraphQLRequestHandlerSelector, resolver: GraphQLResponseResolver<QueryType_1, VariablesType_1>) => RequestHandler<GraphQLMockedRequest<VariablesType_1>, GraphQLMockedContext<QueryType_1>, GraphQLRequestParsedResult<VariablesType_1>, GraphQLMockedRequest<VariablesType_1>, any>;
38
+ mutation: <QueryType_1, VariablesType_1 = Record<string, any>>(expectedOperationName: GraphQLRequestHandlerSelector, resolver: GraphQLResponseResolver<QueryType_1, VariablesType_1>) => RequestHandler<GraphQLMockedRequest<VariablesType_1>, GraphQLMockedContext<QueryType_1>, GraphQLRequestParsedResult<VariablesType_1>, GraphQLMockedRequest<VariablesType_1>, any>;
42
39
  };
43
40
  declare function createGraphQLLink(uri: Mask): typeof graphqlStandardHandlers;
44
41
  export declare const graphql: {
45
42
  link: typeof createGraphQLLink;
46
- query: <QueryType, VariablesType = Record<string, any>>(expectedOperation: GraphQLRequestHandlerSelector, resolver: GraphQLResponseResolver<QueryType, VariablesType>) => RequestHandler<GraphQLMockedRequest<VariablesType>, GraphQLMockedContext<QueryType>, GraphQLRequestParsedResult<VariablesType>, GraphQLMockedRequest<VariablesType>>;
47
- mutation: <QueryType, VariablesType = Record<string, any>>(expectedOperation: GraphQLRequestHandlerSelector, resolver: GraphQLResponseResolver<QueryType, VariablesType>) => RequestHandler<GraphQLMockedRequest<VariablesType>, GraphQLMockedContext<QueryType>, GraphQLRequestParsedResult<VariablesType>, GraphQLMockedRequest<VariablesType>>;
43
+ operation: <QueryType, VariablesType = Record<string, any>>(resolver: GraphQLResponseResolver<QueryType, VariablesType>) => RequestHandler<GraphQLMockedRequest<VariablesType>, GraphQLMockedContext<QueryType>, GraphQLRequestParsedResult<VariablesType>, GraphQLMockedRequest<VariablesType>, any>;
44
+ query: <QueryType_1, VariablesType_1 = Record<string, any>>(expectedOperationName: GraphQLRequestHandlerSelector, resolver: GraphQLResponseResolver<QueryType_1, VariablesType_1>) => RequestHandler<GraphQLMockedRequest<VariablesType_1>, GraphQLMockedContext<QueryType_1>, GraphQLRequestParsedResult<VariablesType_1>, GraphQLMockedRequest<VariablesType_1>, any>;
45
+ mutation: <QueryType_1, VariablesType_1 = Record<string, any>>(expectedOperationName: GraphQLRequestHandlerSelector, resolver: GraphQLResponseResolver<QueryType_1, VariablesType_1>) => RequestHandler<GraphQLMockedRequest<VariablesType_1>, GraphQLMockedContext<QueryType_1>, GraphQLRequestParsedResult<VariablesType_1>, GraphQLMockedRequest<VariablesType_1>, any>;
48
46
  };
49
47
  export {};
@@ -2,7 +2,7 @@ import * as context from './context';
2
2
  export { setupWorker } from './setupWorker/setupWorker';
3
3
  export { MockedResponse, ResponseTransformer, response } from './response';
4
4
  export { context };
5
- export { MockedRequest, RequestHandler, RequestParams, RequestQuery, ResponseResolver, ResponseResolverReturnType, AsyncResponseResolverReturnType, defaultContext, } from './handlers/requestHandler';
5
+ export { MockedRequest, RequestHandler, RequestParams, RequestQuery, ResponseResolver, ResponseResolverReturnType, AsyncResponseResolverReturnType, defaultContext, } from './utils/handlers/requestHandler';
6
6
  export { rest, restContext, RESTMethods, ParsedRestRequest } from './rest';
7
- export { graphql, graphqlContext, GraphQLMockedRequest, GraphQLMockedContext, GraphQLRequestPayload, GraphQLResponseResolver, } from './graphql';
8
- export { matchRequestUrl } from './utils/matching/matchRequest';
7
+ export { graphql, graphqlContext, GraphQLMockedRequest, GraphQLMockedContext, GraphQLRequestPayload, GraphQLResponseResolver, GraphQLRequestParsedResult, } from './graphql';
8
+ export { matchRequestUrl } from './utils/matching/matchRequestUrl';
@@ -1 +1,7 @@
1
- export * from '../node';
1
+ export declare const setupServer: (...requestHandlers: import("../setupWorker/glossary").RequestHandlersList) => {
2
+ listen(options?: import("../sharedOptions").SharedOptions | undefined): void;
3
+ use(...handlers: import("../setupWorker/glossary").RequestHandlersList): void;
4
+ restoreHandlers(): void;
5
+ resetHandlers(...nextHandlers: import("../setupWorker/glossary").RequestHandlersList): void;
6
+ close(): void;
7
+ };
@@ -0,0 +1,29 @@
1
+ import { Interceptor } from 'node-request-interceptor';
2
+ import { RequestHandlersList } from '../setupWorker/glossary';
3
+ import { SharedOptions } from '../sharedOptions';
4
+ /**
5
+ * Creates a `setupServer` API using given request interceptors.
6
+ * Useful to generate identical API using different patches to request issuing modules.
7
+ */
8
+ export declare function createSetupServer(...interceptors: Interceptor[]): (...requestHandlers: RequestHandlersList) => {
9
+ /**
10
+ * Enables requests interception based on the previously provided mock definition.
11
+ */
12
+ listen(options?: SharedOptions | undefined): void;
13
+ /**
14
+ * Prepends given request handlers to the list of existing handlers.
15
+ */
16
+ use(...handlers: RequestHandlersList): void;
17
+ /**
18
+ * Marks all request handlers that respond using `res.once()` as unused.
19
+ */
20
+ restoreHandlers(): void;
21
+ /**
22
+ * Resets request handlers to the initial list given to the `setupServer` call, or to the explicit next request handlers list, if given.
23
+ */
24
+ resetHandlers(...nextHandlers: RequestHandlersList): void;
25
+ /**
26
+ * Stops requests interception by restoring all augmented modules.
27
+ */
28
+ close(): void;
29
+ };
@@ -1,27 +1,7 @@
1
- import { RequestHandlersList } from '../setupWorker/glossary';
2
- import { SharedOptions } from '../sharedOptions';
3
- /**
4
- * Sets up a server-side requests interception with the given mock definition.
5
- */
6
- export declare const setupServer: (...requestHandlers: RequestHandlersList) => {
7
- /**
8
- * Enables requests interception based on the previously provided mock definition.
9
- */
10
- listen(options?: SharedOptions | undefined): void;
11
- /**
12
- * Prepends given request handlers to the list of existing handlers.
13
- */
14
- use(...handlers: RequestHandlersList): void;
15
- /**
16
- * Marks all request handlers that respond using `res.once()` as unused.
17
- */
1
+ export declare const setupServer: (...requestHandlers: import("../setupWorker/glossary").RequestHandlersList) => {
2
+ listen(options?: import("../sharedOptions").SharedOptions | undefined): void;
3
+ use(...handlers: import("../setupWorker/glossary").RequestHandlersList): void;
18
4
  restoreHandlers(): void;
19
- /**
20
- * Resets request handlers to the initial list given to the `setupServer` call, or to the explicit next request handlers list, if given.
21
- */
22
- resetHandlers(...nextHandlers: RequestHandlersList): void;
23
- /**
24
- * Stops requests interception by restoring all augmented modules.
25
- */
5
+ resetHandlers(...nextHandlers: import("../setupWorker/glossary").RequestHandlersList): void;
26
6
  close(): void;
27
7
  };
@@ -1,22 +1,25 @@
1
1
  import { Headers } from 'headers-utils';
2
- export interface MockedResponse {
3
- body: any;
2
+ export interface MockedResponse<BodyType = any> {
3
+ body: BodyType;
4
4
  status: number;
5
5
  statusText: string;
6
6
  headers: Headers;
7
7
  once: boolean;
8
8
  delay?: number;
9
9
  }
10
- export declare type ResponseTransformer = (res: MockedResponse) => MockedResponse;
11
- declare type ResponseFunction = (...transformers: ResponseTransformer[]) => MockedResponse;
12
- export declare type ResponseComposition = ResponseFunction & {
10
+ export declare type ResponseTransformer<BodyType = any> = (res: MockedResponse<BodyType>) => MockedResponse<BodyType>;
11
+ declare type ResponseFunction<BodyType = any> = (...transformers: ResponseTransformer<BodyType>[]) => MockedResponse<BodyType>;
12
+ export declare type ResponseComposition<BodyType = any> = ResponseFunction<BodyType> & {
13
13
  /**
14
14
  * Respond using a given mocked response to the first captured request.
15
15
  * Does not affect any subsequent captured requests.
16
16
  */
17
- once: ResponseFunction;
17
+ once: ResponseFunction<BodyType>;
18
18
  networkError: (message: string) => void;
19
19
  };
20
20
  export declare const defaultResponse: Omit<MockedResponse, 'headers'>;
21
- export declare const response: ResponseComposition;
21
+ export declare const response: ResponseFunction<any> & {
22
+ once: ResponseFunction<any>;
23
+ networkError(message: string): never;
24
+ };
22
25
  export {};