msw 0.0.0-fetch.rc-19 → 0.0.0-fetch.rc-21

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 (56) hide show
  1. package/README.md +5 -2
  2. package/lib/browser/index.d.ts +21 -8
  3. package/lib/browser/index.js +14 -6
  4. package/lib/browser/index.mjs +14 -6
  5. package/lib/core/{GraphQLHandler-2e60cda6.d.ts → GraphQLHandler-a441dd03.d.ts} +19 -7
  6. package/lib/core/HttpResponse.d.ts +1 -1
  7. package/lib/core/{RequestHandler-e964183f.d.ts → RequestHandler-b59044ae.d.ts} +44 -17
  8. package/lib/core/SetupApi.d.ts +1 -1
  9. package/lib/core/bypass.d.ts +7 -7
  10. package/lib/core/bypass.js +10 -68
  11. package/lib/core/bypass.mjs +10 -68
  12. package/lib/core/delay.d.ts +3 -0
  13. package/lib/core/graphql.d.ts +62 -30
  14. package/lib/core/graphql.js +38 -16
  15. package/lib/core/graphql.mjs +38 -16
  16. package/lib/core/handlers/GraphQLHandler.d.ts +2 -2
  17. package/lib/core/handlers/GraphQLHandler.js +26 -20
  18. package/lib/core/handlers/GraphQLHandler.mjs +26 -20
  19. package/lib/core/handlers/HttpHandler.d.ts +18 -6
  20. package/lib/core/handlers/HttpHandler.js +17 -16
  21. package/lib/core/handlers/HttpHandler.mjs +17 -16
  22. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  23. package/lib/core/handlers/RequestHandler.js +43 -35
  24. package/lib/core/handlers/RequestHandler.mjs +43 -35
  25. package/lib/core/http.d.ts +18 -9
  26. package/lib/core/index.d.ts +2 -2
  27. package/lib/core/passthrough.d.ts +3 -1
  28. package/lib/core/sharedOptions.d.ts +1 -1
  29. package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
  30. package/lib/core/utils/getResponse.d.ts +1 -1
  31. package/lib/core/utils/getResponse.js +2 -2
  32. package/lib/core/utils/getResponse.mjs +2 -2
  33. package/lib/core/utils/handleRequest.d.ts +1 -1
  34. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +2 -2
  35. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  36. package/lib/core/utils/internal/requestHandlerUtils.d.ts +2 -2
  37. package/lib/core/utils/logging/serializeRequest.d.ts +1 -3
  38. package/lib/core/utils/logging/serializeRequest.js +1 -2
  39. package/lib/core/utils/logging/serializeRequest.mjs +1 -2
  40. package/lib/core/utils/logging/serializeResponse.d.ts +1 -3
  41. package/lib/core/utils/logging/serializeResponse.js +1 -2
  42. package/lib/core/utils/logging/serializeResponse.mjs +1 -2
  43. package/lib/core/utils/request/onUnhandledRequest.d.ts +1 -1
  44. package/lib/core/utils/request/onUnhandledRequest.js +1 -1
  45. package/lib/core/utils/request/onUnhandledRequest.mjs +1 -1
  46. package/lib/core/utils/toResponseInit.js +1 -2
  47. package/lib/core/utils/toResponseInit.mjs +1 -2
  48. package/lib/iife/index.js +2182 -2094
  49. package/lib/mockServiceWorker.js +4 -17
  50. package/lib/native/index.d.ts +20 -7
  51. package/lib/native/index.js +5 -0
  52. package/lib/native/index.mjs +5 -0
  53. package/lib/node/index.d.ts +20 -7
  54. package/lib/node/index.js +5 -0
  55. package/lib/node/index.mjs +5 -0
  56. package/package.json +5 -6
package/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ > [!IMPORTANT]\
2
+ > **MSW 2.0 is finally here! 🎉** Read the [Release notes](https://github.com/mswjs/msw/releases/tag/v2.0.0) and please follow the [**Migration guidelines**](https://mswjs.io/docs/migrations/1.x-to-2.x) to upgrade. If you're having any questions while upgrading, please reach out in our [Discord server](https://discord.gg/z29WbnfDC5).
3
+
1
4
  <br />
2
5
 
3
6
  <p align="center">
@@ -25,7 +28,7 @@
25
28
 
26
29
  - **Seamless**. A dedicated layer of requests interception at your disposal. Keep your application's code and tests unaware of whether something is mocked or not.
27
30
  - **Deviation-free**. Request the same production resources and test the actual behavior of your app. Augment an existing API, or design it as you go when there is none.
28
- - **Familiar & Powerful**. Use [Express](https://github.com/expressjs/express)-like routing syntax to capture requests. Use parameters, wildcards, and regular expressions to match requests, and respond with necessary status codes, headers, cookies, delays, or completely custom resolvers.
31
+ - **Familiar & Powerful**. Use [Express](https://github.com/expressjs/express)-like routing syntax to intercept requests. Use parameters, wildcards, and regular expressions to match requests, and respond with necessary status codes, headers, cookies, delays, or completely custom resolvers.
29
32
 
30
33
  ---
31
34
 
@@ -53,7 +56,7 @@ This README will give you a brief overview on the library but there's no better
53
56
 
54
57
  ### How does it work?
55
58
 
56
- In-browser usage is what sets Mock Service Worker apart from other tools. Utilizing the [Service Worker API](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API), which can intercept requests for the purpose of caching, Mock Service Worker responds to captured requests with your mock definition on the network level. This way your application knows nothing about the mocking.
59
+ In-browser usage is what sets Mock Service Worker apart from other tools. Utilizing the [Service Worker API](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API), which can intercept requests for the purpose of caching, Mock Service Worker responds to intercepted requests with your mock definition on the network level. This way your application knows nothing about the mocking.
57
60
 
58
61
  **Take a look at this quick presentation on how Mock Service Worker functions in a browser:**
59
62
 
@@ -16,7 +16,7 @@ interface StartOptions extends SharedOptions {
16
16
  options?: RegistrationOptions;
17
17
  };
18
18
  /**
19
- * Disables the logging of captured requests
19
+ * Disables the logging of the intercepted requests
20
20
  * into browser's console.
21
21
  * @default false
22
22
  */
@@ -38,36 +38,48 @@ type StopHandler = () => void;
38
38
  interface SetupWorker {
39
39
  /**
40
40
  * Registers and activates the mock Service Worker.
41
- * @see {@link https://mswjs.io/docs/api/setup-worker/start `worker.start()`}
41
+ *
42
+ * @see {@link https://mswjs.io/docs/api/setup-worker/start `worker.start()` API reference}
42
43
  */
43
44
  start: (options?: StartOptions) => StartReturnType;
44
45
  /**
45
46
  * Stops requests interception for the current client.
46
- * @see {@link https://mswjs.io/docs/api/setup-worker/stop `worker.stop()`}
47
+ *
48
+ * @see {@link https://mswjs.io/docs/api/setup-worker/stop `worker.stop()` API reference}
47
49
  */
48
50
  stop: StopHandler;
49
51
  /**
50
52
  * Prepends given request handlers to the list of existing handlers.
51
53
  * @param {RequestHandler[]} handlers List of runtime request handlers.
52
- * @see {@link https://mswjs.io/docs/api/setup-worker/use `worker.use()`}
54
+ *
55
+ * @see {@link https://mswjs.io/docs/api/setup-worker/use `worker.use()` API reference}
53
56
  */
54
57
  use: (...handlers: RequestHandler[]) => void;
55
58
  /**
56
59
  * Marks all request handlers that respond using `res.once()` as unused.
57
- * @see {@link https://mswjs.io/docs/api/setup-worker/restore-handlers `worker.restoreHandlers()`}
60
+ *
61
+ * @see {@link https://mswjs.io/docs/api/setup-worker/restore-handlers `worker.restoreHandlers()` API reference}
58
62
  */
59
63
  restoreHandlers: () => void;
60
64
  /**
61
65
  * Resets request handlers to the initial list given to the `setupWorker` call, or to the explicit next request handlers list, if given.
62
66
  * @param {RequestHandler[]} nextHandlers List of the new initial request handlers.
63
- * @see {@link https://mswjs.io/docs/api/setup-worker/reset-handlers `worker.resetHandlers()`}
67
+ *
68
+ * @see {@link https://mswjs.io/docs/api/setup-worker/reset-handlers `worker.resetHandlers()` API reference}
64
69
  */
65
70
  resetHandlers: (...nextHandlers: RequestHandler[]) => void;
66
71
  /**
67
72
  * Returns a readonly list of currently active request handlers.
68
- * @see {@link https://mswjs.io/docs/api/setup-worker/list-handlers `worker.listHandlers()`}
73
+ *
74
+ * @see {@link https://mswjs.io/docs/api/setup-worker/list-handlers `worker.listHandlers()` API reference}
69
75
  */
70
76
  listHandlers(): ReadonlyArray<RequestHandler<RequestHandlerDefaultInfo, any>>;
77
+ /**
78
+ * Life-cycle events.
79
+ * Life-cycle events allow you to subscribe to the internal library events occurring during the request/response handling.
80
+ *
81
+ * @see {@link https://mswjs.io/docs/api/life-cycle-events Life-cycle Events API reference}
82
+ */
71
83
  events: LifeCycleEventEmitter<LifeCycleEventsMap>;
72
84
  }
73
85
 
@@ -84,7 +96,8 @@ declare class SetupWorkerApi extends SetupApi<LifeCycleEventsMap> implements Set
84
96
  /**
85
97
  * Sets up a requests interception in the browser with the given request handlers.
86
98
  * @param {RequestHandler[]} handlers List of request handlers.
87
- * @see {@link https://mswjs.io/docs/api/setup-worker `setupWorker`}
99
+ *
100
+ * @see {@link https://mswjs.io/docs/api/setup-worker `setupWorker()` API reference}
88
101
  */
89
102
  declare function setupWorker(...handlers: Array<RequestHandler>): SetupWorker;
90
103
 
@@ -259,7 +259,7 @@ var createRequestListener = (context, options) => {
259
259
  messageChannel.postMessage("NOT_FOUND");
260
260
  },
261
261
  onMockedResponse(_0, _1) {
262
- return __async(this, arguments, function* (response, { handler, parsedRequest }) {
262
+ return __async(this, arguments, function* (response, { handler, parsedResult }) {
263
263
  const responseClone = response.clone();
264
264
  const responseInit = (0, import_toResponseInit.toResponseInit)(response);
265
265
  const responseStream = responseClone.body;
@@ -274,7 +274,11 @@ var createRequestListener = (context, options) => {
274
274
  );
275
275
  if (!options.quiet) {
276
276
  context.emitter.once("response:mocked", ({ response: response2 }) => {
277
- handler.log(requestCloneForLogs, response2, parsedRequest);
277
+ handler.log({
278
+ request: requestCloneForLogs,
279
+ response: response2,
280
+ parsedResult
281
+ });
278
282
  });
279
283
  }
280
284
  });
@@ -317,9 +321,9 @@ function requestIntegrityCheck(context, serviceWorker) {
317
321
  const { payload: actualChecksum } = yield context.events.once(
318
322
  "INTEGRITY_CHECK_RESPONSE"
319
323
  );
320
- if (actualChecksum !== "e2d8525b2d1bdadf89a15ae5a2619512") {
324
+ if (actualChecksum !== "0877fcdc026242810f5bfde0d7178db4") {
321
325
  throw new Error(
322
- `Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"e2d8525b2d1bdadf89a15ae5a2619512"}).`
326
+ `Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"0877fcdc026242810f5bfde0d7178db4"}).`
323
327
  );
324
328
  }
325
329
  return serviceWorker;
@@ -535,10 +539,14 @@ function createFallbackRequestListener(context, options) {
535
539
  options,
536
540
  context.emitter,
537
541
  {
538
- onMockedResponse(_, { handler, parsedRequest }) {
542
+ onMockedResponse(_, { handler, parsedResult }) {
539
543
  if (!options.quiet) {
540
544
  context.emitter.once("response:mocked", ({ response: response2 }) => {
541
- handler.log(requestCloneForLogs, response2, parsedRequest);
545
+ handler.log({
546
+ request: requestCloneForLogs,
547
+ response: response2,
548
+ parsedResult
549
+ });
542
550
  });
543
551
  }
544
552
  }
@@ -235,7 +235,7 @@ var createRequestListener = (context, options) => {
235
235
  messageChannel.postMessage("NOT_FOUND");
236
236
  },
237
237
  onMockedResponse(_0, _1) {
238
- return __async(this, arguments, function* (response, { handler, parsedRequest }) {
238
+ return __async(this, arguments, function* (response, { handler, parsedResult }) {
239
239
  const responseClone = response.clone();
240
240
  const responseInit = toResponseInit(response);
241
241
  const responseStream = responseClone.body;
@@ -250,7 +250,11 @@ var createRequestListener = (context, options) => {
250
250
  );
251
251
  if (!options.quiet) {
252
252
  context.emitter.once("response:mocked", ({ response: response2 }) => {
253
- handler.log(requestCloneForLogs, response2, parsedRequest);
253
+ handler.log({
254
+ request: requestCloneForLogs,
255
+ response: response2,
256
+ parsedResult
257
+ });
254
258
  });
255
259
  }
256
260
  });
@@ -293,9 +297,9 @@ function requestIntegrityCheck(context, serviceWorker) {
293
297
  const { payload: actualChecksum } = yield context.events.once(
294
298
  "INTEGRITY_CHECK_RESPONSE"
295
299
  );
296
- if (actualChecksum !== "e2d8525b2d1bdadf89a15ae5a2619512") {
300
+ if (actualChecksum !== "0877fcdc026242810f5bfde0d7178db4") {
297
301
  throw new Error(
298
- `Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"e2d8525b2d1bdadf89a15ae5a2619512"}).`
302
+ `Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"0877fcdc026242810f5bfde0d7178db4"}).`
299
303
  );
300
304
  }
301
305
  return serviceWorker;
@@ -513,10 +517,14 @@ function createFallbackRequestListener(context, options) {
513
517
  options,
514
518
  context.emitter,
515
519
  {
516
- onMockedResponse(_, { handler, parsedRequest }) {
520
+ onMockedResponse(_, { handler, parsedResult }) {
517
521
  if (!options.quiet) {
518
522
  context.emitter.once("response:mocked", ({ response: response2 }) => {
519
- handler.log(requestCloneForLogs, response2, parsedRequest);
523
+ handler.log({
524
+ request: requestCloneForLogs,
525
+ response: response2,
526
+ parsedResult
527
+ });
520
528
  });
521
529
  }
522
530
  }
@@ -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 } from './RequestHandler-e964183f.js';
2
+ import { g as RequestHandlerDefaultInfo, D as DefaultBodyType, R as RequestHandler, a as ResponseResolver, f as RequestHandlerOptions } from './RequestHandler-b59044ae.js';
3
3
  import { Path } from './utils/matching/matchRequestUrl.js';
4
4
 
5
5
  interface ParsedGraphQLQuery {
@@ -48,15 +48,27 @@ interface GraphQLResponseBody<BodyType extends DefaultBodyType> {
48
48
  declare function isDocumentNode(value: DocumentNode | any): value is DocumentNode;
49
49
  declare class GraphQLHandler extends RequestHandler<GraphQLHandlerInfo, ParsedGraphQLRequest, GraphQLResolverExtras<any>> {
50
50
  private endpoint;
51
- constructor(operationType: ExpectedOperationTypeNode, operationName: GraphQLHandlerNameSelector, endpoint: Path, resolver: ResponseResolver<GraphQLResolverExtras<any>, any, any>);
52
- parse(request: Request): Promise<ParsedGraphQLRequest<GraphQLVariables>>;
53
- predicate(request: Request, parsedResult: ParsedGraphQLRequest): boolean;
54
- protected extendInfo(_request: Request, parsedResult: ParsedGraphQLRequest<GraphQLVariables>): {
51
+ constructor(operationType: ExpectedOperationTypeNode, operationName: GraphQLHandlerNameSelector, endpoint: Path, resolver: ResponseResolver<GraphQLResolverExtras<any>, any, any>, options?: RequestHandlerOptions);
52
+ parse(args: {
53
+ request: Request;
54
+ }): Promise<ParsedGraphQLRequest<GraphQLVariables>>;
55
+ predicate(args: {
56
+ request: Request;
57
+ parsedResult: ParsedGraphQLRequest;
58
+ }): boolean;
59
+ protected extendResolverArgs(args: {
60
+ request: Request;
61
+ parsedResult: ParsedGraphQLRequest<GraphQLVariables>;
62
+ }): {
55
63
  query: string;
56
64
  operationName: string;
57
65
  variables: GraphQLVariables;
58
66
  };
59
- log(request: Request, response: Response, parsedRequest: ParsedGraphQLRequest): Promise<void>;
67
+ log(args: {
68
+ request: Request;
69
+ response: Response;
70
+ parsedResult: ParsedGraphQLRequest;
71
+ }): Promise<void>;
60
72
  }
61
73
 
62
- export { ExpectedOperationTypeNode as E, GraphQLHandler as G, ParsedGraphQLRequest as P, GraphQLVariables as a, GraphQLRequestBody as b, GraphQLJsonRequestBody as c, GraphQLResolverExtras as d, GraphQLResponseBody as e, GraphQLHandlerNameSelector as f, ParsedGraphQLQuery as g, GraphQLParsedOperationsMap as h, GraphQLMultipartRequestBody as i, parseGraphQLRequest as j, GraphQLHandlerInfo as k, isDocumentNode as l, parseDocumentNode as p };
74
+ 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, isDocumentNode as l, parseDocumentNode as p };
@@ -1,2 +1,2 @@
1
- export { e as HttpResponse, H as HttpResponseInit, S as StrictRequest, d as StrictResponse } from './RequestHandler-e964183f.js';
1
+ export { e as HttpResponse, H as HttpResponseInit, S as StrictRequest, d as StrictResponse } from './RequestHandler-b59044ae.js';
2
2
  import './typeUtils.js';
@@ -2,7 +2,7 @@ import { MaybePromise } from './typeUtils.js';
2
2
 
3
3
  interface ResponseLookupResult {
4
4
  handler: RequestHandler;
5
- parsedRequest?: any;
5
+ parsedResult?: any;
6
6
  response?: Response;
7
7
  }
8
8
  interface ResponseResolutionContext {
@@ -11,7 +11,7 @@ interface ResponseResolutionContext {
11
11
  /**
12
12
  * Returns a mocked response for a given request using following request handlers.
13
13
  */
14
- declare const getResponse: <Handler extends RequestHandler<RequestHandlerDefaultInfo, any, any>[]>(request: Request, handlers: Handler, resolutionContext?: ResponseResolutionContext) => Promise<ResponseLookupResult | null>;
14
+ declare const getResponse: <Handler extends RequestHandler<RequestHandlerDefaultInfo, any, any, RequestHandlerOptions>[]>(request: Request, handlers: Handler, resolutionContext?: ResponseResolutionContext) => Promise<ResponseLookupResult | null>;
15
15
 
16
16
  interface HttpResponseInit extends ResponseInit {
17
17
  type?: ResponseType;
@@ -27,9 +27,15 @@ interface StrictResponse<BodyType extends DefaultBodyType> extends Response {
27
27
  readonly [bodyType]: BodyType;
28
28
  }
29
29
  /**
30
- * A `Response` class superset with a stricter response body type.
30
+ * A drop-in replacement for the standard `Response` class
31
+ * to allow additional features, like mocking the response `Set-Cookie` header.
32
+ *
31
33
  * @example
32
34
  * new HttpResponse('Hello world', { status: 201 })
35
+ * HttpResponse.json({ name: 'John' })
36
+ * HttpResponse.formData(form)
37
+ *
38
+ * @see {@link https://mswjs.io/docs/api/http-response `HttpResponse` API reference}
33
39
  */
34
40
  declare class HttpResponse extends Response {
35
41
  constructor(body?: BodyInit | null, init?: HttpResponseInit);
@@ -90,11 +96,12 @@ type ResponseResolverInfo<ResolverExtraInfo extends Record<string, unknown>, Req
90
96
  request: StrictRequest<RequestBodyType>;
91
97
  } & ResolverExtraInfo;
92
98
  type ResponseResolver<ResolverExtraInfo extends Record<string, unknown> = Record<string, unknown>, RequestBodyType extends DefaultBodyType = DefaultBodyType, ResponseBodyType extends DefaultBodyType = undefined> = (info: ResponseResolverInfo<ResolverExtraInfo, RequestBodyType>) => AsyncResponseResolverReturnType<ResponseBodyType>;
93
- interface RequestHandlerOptions<HandlerInfo> extends RequestHandlerPublicOptions {
99
+ interface RequestHandlerArgs<HandlerInfo, HandlerOptions extends RequestHandlerOptions> {
94
100
  info: HandlerInfo;
95
101
  resolver: ResponseResolver<any>;
102
+ options?: HandlerOptions;
96
103
  }
97
- interface RequestHandlerPublicOptions {
104
+ interface RequestHandlerOptions {
98
105
  once?: boolean;
99
106
  }
100
107
  interface RequestHandlerExecutionResult<ParsedResult extends Record<string, unknown> | undefined> {
@@ -103,7 +110,7 @@ interface RequestHandlerExecutionResult<ParsedResult extends Record<string, unkn
103
110
  request: Request;
104
111
  response?: Response;
105
112
  }
106
- declare abstract class RequestHandler<HandlerInfo extends RequestHandlerDefaultInfo = RequestHandlerDefaultInfo, ParsedResult extends Record<string, any> | undefined = any, ResolverExtras extends Record<string, unknown> = any> {
113
+ 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> {
107
114
  info: HandlerInfo & RequestHandlerInternalInfo;
108
115
  /**
109
116
  * Indicates whether this request handler has been used
@@ -113,33 +120,53 @@ declare abstract class RequestHandler<HandlerInfo extends RequestHandlerDefaultI
113
120
  protected resolver: ResponseResolver<ResolverExtras, any, any>;
114
121
  private resolverGenerator?;
115
122
  private resolverGeneratorResult?;
116
- private once;
117
- constructor(options: RequestHandlerOptions<HandlerInfo>);
123
+ private options?;
124
+ constructor(args: RequestHandlerArgs<HandlerInfo, HandlerOptions>);
118
125
  /**
119
- * Determine if the captured request should be mocked.
126
+ * Determine if the intercepted request should be mocked.
120
127
  */
121
- abstract predicate(request: Request, parsedResult: ParsedResult, resolutionContext?: ResponseResolutionContext): boolean;
128
+ abstract predicate(args: {
129
+ request: Request;
130
+ parsedResult: ParsedResult;
131
+ resolutionContext?: ResponseResolutionContext;
132
+ }): boolean;
122
133
  /**
123
134
  * Print out the successfully handled request.
124
135
  */
125
- abstract log(request: Request, response: Response, parsedResult: ParsedResult): void;
136
+ abstract log(args: {
137
+ request: Request;
138
+ response: Response;
139
+ parsedResult: ParsedResult;
140
+ }): void;
126
141
  /**
127
- * Parse the captured request to extract additional information from it.
142
+ * Parse the intercepted request to extract additional information from it.
128
143
  * Parsed result is then exposed to other methods of this request handler.
129
144
  */
130
- parse(_request: Request, _resolutionContext?: ResponseResolutionContext): Promise<ParsedResult>;
145
+ parse(_args: {
146
+ request: Request;
147
+ resolutionContext?: ResponseResolutionContext;
148
+ }): Promise<ParsedResult>;
131
149
  /**
132
150
  * Test if this handler matches the given request.
133
151
  */
134
- test(request: Request, resolutionContext?: ResponseResolutionContext): Promise<boolean>;
135
- protected extendInfo(_request: Request, _parsedResult: ParsedResult): ResolverExtras;
152
+ test(args: {
153
+ request: Request;
154
+ resolutionContext?: ResponseResolutionContext;
155
+ }): Promise<boolean>;
156
+ protected extendResolverArgs(_args: {
157
+ request: Request;
158
+ parsedResult: ParsedResult;
159
+ }): ResolverExtras;
136
160
  /**
137
161
  * Execute this request handler and produce a mocked response
138
162
  * using the given resolver function.
139
163
  */
140
- run(request: StrictRequest<any>, resolutionContext?: ResponseResolutionContext): Promise<RequestHandlerExecutionResult<ParsedResult> | null>;
164
+ run(args: {
165
+ request: StrictRequest<any>;
166
+ resolutionContext?: ResponseResolutionContext;
167
+ }): Promise<RequestHandlerExecutionResult<ParsedResult> | null>;
141
168
  private wrapResolver;
142
169
  private createExecutionResult;
143
170
  }
144
171
 
145
- export { AsyncResponseResolverReturnType as A, DefaultBodyType as D, HttpResponseInit as H, MaybeAsyncResponseResolverReturnType as M, RequestHandler as R, StrictRequest as S, ResponseResolver as a, ResponseResolverReturnType as b, DefaultRequestMultipartBody as c, StrictResponse as d, HttpResponse as e, RequestHandlerPublicOptions as f, RequestHandlerDefaultInfo as g, ResponseLookupResult as h, ResponseResolutionContext as i, getResponse as j, RequestHandlerInternalInfo as k, ResponseResolverInfo as l, RequestHandlerOptions as m, RequestHandlerExecutionResult as n };
172
+ export { AsyncResponseResolverReturnType as A, DefaultBodyType as D, HttpResponseInit as H, MaybeAsyncResponseResolverReturnType as M, RequestHandler as R, StrictRequest as S, ResponseResolver as a, ResponseResolverReturnType as b, DefaultRequestMultipartBody as c, StrictResponse as d, HttpResponse as e, RequestHandlerOptions as f, RequestHandlerDefaultInfo as g, ResponseLookupResult as h, ResponseResolutionContext as i, getResponse as j, RequestHandlerInternalInfo as k, ResponseResolverInfo as l, RequestHandlerArgs as m, RequestHandlerExecutionResult as n };
@@ -1,5 +1,5 @@
1
1
  import { EventMap, Emitter } from 'strict-event-emitter';
2
- import { R as RequestHandler, g as RequestHandlerDefaultInfo } from './RequestHandler-e964183f.js';
2
+ import { R as RequestHandler, g as RequestHandlerDefaultInfo } from './RequestHandler-b59044ae.js';
3
3
  import { LifeCycleEventEmitter } from './sharedOptions.js';
4
4
  import { Disposable } from './utils/internal/Disposable.js';
5
5
  import './typeUtils.js';
@@ -1,16 +1,16 @@
1
1
  type BypassRequestInput = string | URL | Request;
2
2
  /**
3
- * Derives request input and init from the given Request info
4
- * to define a request that will always be ignored by MSW.
3
+ * Creates a `Request` instance that will always be ignored by MSW.
5
4
  *
6
5
  * @example
7
- * import fetch, { Request } from 'node-fetch'
8
6
  * import { bypass } from 'msw'
9
7
  *
10
- * fetch(...bypass('/resource'))
11
- * fetch(...bypass(new URL('/resource', 'https://example.com)))
12
- * fetch(...bypass(new Request('https://example.com/resource')))
8
+ * fetch(bypass('/resource'))
9
+ * fetch(bypass(new URL('/resource', 'https://example.com)))
10
+ * fetch(bypass(new Request('https://example.com/resource')))
11
+ *
12
+ * @see {@link https://mswjs.io/docs/api/bypass `bypass()` API reference}
13
13
  */
14
- declare function bypass(input: BypassRequestInput, init?: RequestInit): Promise<[string, RequestInit]>;
14
+ declare function bypass(input: BypassRequestInput, init?: RequestInit): Request;
15
15
 
16
16
  export { BypassRequestInput, bypass };
@@ -16,79 +16,21 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var __async = (__this, __arguments, generator) => {
20
- return new Promise((resolve, reject) => {
21
- var fulfilled = (value) => {
22
- try {
23
- step(generator.next(value));
24
- } catch (e) {
25
- reject(e);
26
- }
27
- };
28
- var rejected = (value) => {
29
- try {
30
- step(generator.throw(value));
31
- } catch (e) {
32
- reject(e);
33
- }
34
- };
35
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
36
- step((generator = generator.apply(__this, __arguments)).next());
37
- });
38
- };
39
19
  var bypass_exports = {};
40
20
  __export(bypass_exports, {
41
21
  bypass: () => bypass
42
22
  });
43
23
  module.exports = __toCommonJS(bypass_exports);
44
24
  var import_outvariant = require("outvariant");
45
- var import_headers_polyfill = require("headers-polyfill");
46
25
  function bypass(input, init) {
47
- return __async(this, null, function* () {
48
- if (isRequest(input)) {
49
- (0, import_outvariant.invariant)(
50
- !input.bodyUsed,
51
- 'Failed to create a bypassed request to "%s %s": given request instance already has its body read. Make sure to clone the intercepted request if you wish to read its body before bypassing it.',
52
- input.method,
53
- input.url
54
- );
55
- }
56
- const url = isRequest(input) ? input.url : input.toString();
57
- const resolvedInit = typeof init !== "undefined" ? init : yield getRequestInit(input);
58
- const headers = new import_headers_polyfill.Headers(resolvedInit.headers);
59
- headers.set("x-msw-intention", "bypass");
60
- resolvedInit.headers = headers;
61
- return [url, resolvedInit];
62
- });
63
- }
64
- function isRequest(input) {
65
- return typeof input === "object" && input.constructor.name === "Request" && "clone" in input && typeof input.clone === "function";
66
- }
67
- function getRequestInit(input) {
68
- return __async(this, null, function* () {
69
- if (!isRequest(input)) {
70
- return {};
71
- }
72
- const init = {
73
- // Set each request init property explicitly
74
- // to prevent leaking internal properties of whichever
75
- // Request polyfill provided as the input.
76
- mode: input.mode,
77
- method: input.method,
78
- cache: input.cache,
79
- headers: input.headers,
80
- credentials: input.credentials,
81
- signal: input.signal,
82
- referrerPolicy: input.referrerPolicy,
83
- referrer: input.referrer,
84
- redirect: input.redirect,
85
- integrity: input.integrity,
86
- keepalive: input.keepalive
87
- };
88
- if (init.method !== "HEAD" && input.method !== "GET") {
89
- init.body = yield input.clone().arrayBuffer();
90
- init.duplex = input.duplex;
91
- }
92
- return init;
93
- });
26
+ const request = input instanceof Request ? input : new Request(input, init);
27
+ (0, import_outvariant.invariant)(
28
+ !request.bodyUsed,
29
+ 'Failed to create a bypassed request to "%s %s": given request instance already has its body read. Make sure to clone the intercepted request if you wish to read its body before bypassing it.',
30
+ request.method,
31
+ request.url
32
+ );
33
+ const requestClone = request.clone();
34
+ requestClone.headers.set("x-msw-intention", "bypass");
35
+ return requestClone;
94
36
  }
@@ -1,73 +1,15 @@
1
- var __async = (__this, __arguments, generator) => {
2
- return new Promise((resolve, reject) => {
3
- var fulfilled = (value) => {
4
- try {
5
- step(generator.next(value));
6
- } catch (e) {
7
- reject(e);
8
- }
9
- };
10
- var rejected = (value) => {
11
- try {
12
- step(generator.throw(value));
13
- } catch (e) {
14
- reject(e);
15
- }
16
- };
17
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
- step((generator = generator.apply(__this, __arguments)).next());
19
- });
20
- };
21
1
  import { invariant } from "outvariant";
22
- import { Headers } from "headers-polyfill";
23
2
  function bypass(input, init) {
24
- return __async(this, null, function* () {
25
- if (isRequest(input)) {
26
- invariant(
27
- !input.bodyUsed,
28
- 'Failed to create a bypassed request to "%s %s": given request instance already has its body read. Make sure to clone the intercepted request if you wish to read its body before bypassing it.',
29
- input.method,
30
- input.url
31
- );
32
- }
33
- const url = isRequest(input) ? input.url : input.toString();
34
- const resolvedInit = typeof init !== "undefined" ? init : yield getRequestInit(input);
35
- const headers = new Headers(resolvedInit.headers);
36
- headers.set("x-msw-intention", "bypass");
37
- resolvedInit.headers = headers;
38
- return [url, resolvedInit];
39
- });
40
- }
41
- function isRequest(input) {
42
- return typeof input === "object" && input.constructor.name === "Request" && "clone" in input && typeof input.clone === "function";
43
- }
44
- function getRequestInit(input) {
45
- return __async(this, null, function* () {
46
- if (!isRequest(input)) {
47
- return {};
48
- }
49
- const init = {
50
- // Set each request init property explicitly
51
- // to prevent leaking internal properties of whichever
52
- // Request polyfill provided as the input.
53
- mode: input.mode,
54
- method: input.method,
55
- cache: input.cache,
56
- headers: input.headers,
57
- credentials: input.credentials,
58
- signal: input.signal,
59
- referrerPolicy: input.referrerPolicy,
60
- referrer: input.referrer,
61
- redirect: input.redirect,
62
- integrity: input.integrity,
63
- keepalive: input.keepalive
64
- };
65
- if (init.method !== "HEAD" && input.method !== "GET") {
66
- init.body = yield input.clone().arrayBuffer();
67
- init.duplex = input.duplex;
68
- }
69
- return init;
70
- });
3
+ const request = input instanceof Request ? input : new Request(input, init);
4
+ invariant(
5
+ !request.bodyUsed,
6
+ 'Failed to create a bypassed request to "%s %s": given request instance already has its body read. Make sure to clone the intercepted request if you wish to read its body before bypassing it.',
7
+ request.method,
8
+ request.url
9
+ );
10
+ const requestClone = request.clone();
11
+ requestClone.headers.set("x-msw-intention", "bypass");
12
+ return requestClone;
71
13
  }
72
14
  export {
73
15
  bypass
@@ -5,10 +5,13 @@ declare const NODE_SERVER_RESPONSE_TIME = 5;
5
5
  type DelayMode = 'real' | 'infinite';
6
6
  /**
7
7
  * Delays the response by the given duration (ms).
8
+ *
8
9
  * @example
9
10
  * await delay() // emulate realistic server response time
10
11
  * await delay(1200) // delay response by 1200ms
11
12
  * await delay('infinite') // delay response infinitely
13
+ *
14
+ * @see {@link https://mswjs.io/docs/api/delay `delay()` API reference}
12
15
  */
13
16
  declare function delay(durationOrMode?: DelayMode | number): Promise<void>;
14
17