msw 0.0.0-fetch.rc-24 → 0.0.1

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 (170) hide show
  1. package/README.md +24 -28
  2. package/cli/init.js +3 -3
  3. package/config/constants.js +2 -1
  4. package/config/scripts/postinstall.js +0 -0
  5. package/lib/SetupServerApi-1855d9c6.d.ts +20 -0
  6. package/lib/glossary-de6278a9.d.ts +385 -0
  7. package/lib/iife/index.js +13605 -7448
  8. package/lib/iife/index.js.map +1 -0
  9. package/lib/index.d.ts +365 -0
  10. package/lib/index.js +2295 -0
  11. package/lib/index.js.map +1 -0
  12. package/lib/mockServiceWorker.js +93 -82
  13. package/lib/native/index.d.ts +7 -67
  14. package/lib/native/index.js +1500 -74
  15. package/lib/native/index.mjs +1514 -69
  16. package/lib/node/index.d.ts +9 -68
  17. package/lib/node/index.js +1508 -77
  18. package/lib/node/index.js.map +1 -0
  19. package/lib/node/index.mjs +1521 -71
  20. package/lib/node/index.mjs.map +1 -0
  21. package/native/package.json +1 -2
  22. package/node/package.json +1 -2
  23. package/package.json +35 -67
  24. package/browser/package.json +0 -5
  25. package/lib/browser/index.d.ts +0 -104
  26. package/lib/browser/index.js +0 -751
  27. package/lib/browser/index.mjs +0 -733
  28. package/lib/core/GraphQLHandler-a441dd03.d.ts +0 -74
  29. package/lib/core/HttpResponse.d.ts +0 -2
  30. package/lib/core/HttpResponse.js +0 -94
  31. package/lib/core/HttpResponse.mjs +0 -77
  32. package/lib/core/RequestHandler-b59044ae.d.ts +0 -172
  33. package/lib/core/SetupApi.d.ts +0 -26
  34. package/lib/core/SetupApi.js +0 -83
  35. package/lib/core/SetupApi.mjs +0 -63
  36. package/lib/core/bypass.d.ts +0 -16
  37. package/lib/core/bypass.js +0 -36
  38. package/lib/core/bypass.mjs +0 -16
  39. package/lib/core/delay.d.ts +0 -18
  40. package/lib/core/delay.js +0 -92
  41. package/lib/core/delay.mjs +0 -72
  42. package/lib/core/graphql.d.ts +0 -109
  43. package/lib/core/graphql.js +0 -112
  44. package/lib/core/graphql.mjs +0 -96
  45. package/lib/core/handlers/GraphQLHandler.d.ts +0 -5
  46. package/lib/core/handlers/GraphQLHandler.js +0 -145
  47. package/lib/core/handlers/GraphQLHandler.mjs +0 -130
  48. package/lib/core/handlers/HttpHandler.d.ts +0 -62
  49. package/lib/core/handlers/HttpHandler.js +0 -149
  50. package/lib/core/handlers/HttpHandler.mjs +0 -133
  51. package/lib/core/handlers/RequestHandler.d.ts +0 -2
  52. package/lib/core/handlers/RequestHandler.js +0 -180
  53. package/lib/core/handlers/RequestHandler.mjs +0 -162
  54. package/lib/core/http.d.ts +0 -26
  55. package/lib/core/http.js +0 -39
  56. package/lib/core/http.mjs +0 -22
  57. package/lib/core/http.spec.d.ts +0 -2
  58. package/lib/core/http.spec.js +0 -15
  59. package/lib/core/http.spec.mjs +0 -14
  60. package/lib/core/index.d.ts +0 -18
  61. package/lib/core/index.js +0 -49
  62. package/lib/core/index.mjs +0 -28
  63. package/lib/core/passthrough.d.ts +0 -17
  64. package/lib/core/passthrough.js +0 -32
  65. package/lib/core/passthrough.mjs +0 -12
  66. package/lib/core/sharedOptions.d.ts +0 -66
  67. package/lib/core/sharedOptions.js +0 -16
  68. package/lib/core/sharedOptions.mjs +0 -0
  69. package/lib/core/typeUtils.d.ts +0 -7
  70. package/lib/core/typeUtils.js +0 -16
  71. package/lib/core/typeUtils.mjs +0 -0
  72. package/lib/core/utils/HttpResponse/decorators.d.ts +0 -12
  73. package/lib/core/utils/HttpResponse/decorators.js +0 -80
  74. package/lib/core/utils/HttpResponse/decorators.mjs +0 -52
  75. package/lib/core/utils/getResponse.d.ts +0 -2
  76. package/lib/core/utils/getResponse.js +0 -64
  77. package/lib/core/utils/getResponse.mjs +0 -44
  78. package/lib/core/utils/handleRequest.d.ts +0 -30
  79. package/lib/core/utils/handleRequest.js +0 -102
  80. package/lib/core/utils/handleRequest.mjs +0 -82
  81. package/lib/core/utils/internal/Disposable.d.ts +0 -7
  82. package/lib/core/utils/internal/Disposable.js +0 -53
  83. package/lib/core/utils/internal/Disposable.mjs +0 -33
  84. package/lib/core/utils/internal/checkGlobals.d.ts +0 -3
  85. package/lib/core/utils/internal/checkGlobals.js +0 -33
  86. package/lib/core/utils/internal/checkGlobals.mjs +0 -13
  87. package/lib/core/utils/internal/devUtils.d.ts +0 -19
  88. package/lib/core/utils/internal/devUtils.js +0 -40
  89. package/lib/core/utils/internal/devUtils.mjs +0 -20
  90. package/lib/core/utils/internal/getCallFrame.d.ts +0 -6
  91. package/lib/core/utils/internal/getCallFrame.js +0 -40
  92. package/lib/core/utils/internal/getCallFrame.mjs +0 -20
  93. package/lib/core/utils/internal/isIterable.d.ts +0 -6
  94. package/lib/core/utils/internal/isIterable.js +0 -29
  95. package/lib/core/utils/internal/isIterable.mjs +0 -9
  96. package/lib/core/utils/internal/isObject.d.ts +0 -6
  97. package/lib/core/utils/internal/isObject.js +0 -26
  98. package/lib/core/utils/internal/isObject.mjs +0 -6
  99. package/lib/core/utils/internal/isStringEqual.d.ts +0 -6
  100. package/lib/core/utils/internal/isStringEqual.js +0 -26
  101. package/lib/core/utils/internal/isStringEqual.mjs +0 -6
  102. package/lib/core/utils/internal/jsonParse.d.ts +0 -7
  103. package/lib/core/utils/internal/jsonParse.js +0 -30
  104. package/lib/core/utils/internal/jsonParse.mjs +0 -10
  105. package/lib/core/utils/internal/mergeRight.d.ts +0 -7
  106. package/lib/core/utils/internal/mergeRight.js +0 -39
  107. package/lib/core/utils/internal/mergeRight.mjs +0 -19
  108. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +0 -5
  109. package/lib/core/utils/internal/parseGraphQLRequest.js +0 -184
  110. package/lib/core/utils/internal/parseGraphQLRequest.mjs +0 -165
  111. package/lib/core/utils/internal/parseMultipartData.d.ts +0 -10
  112. package/lib/core/utils/internal/parseMultipartData.js +0 -81
  113. package/lib/core/utils/internal/parseMultipartData.mjs +0 -61
  114. package/lib/core/utils/internal/pipeEvents.d.ts +0 -8
  115. package/lib/core/utils/internal/pipeEvents.js +0 -34
  116. package/lib/core/utils/internal/pipeEvents.mjs +0 -14
  117. package/lib/core/utils/internal/requestHandlerUtils.d.ts +0 -8
  118. package/lib/core/utils/internal/requestHandlerUtils.js +0 -36
  119. package/lib/core/utils/internal/requestHandlerUtils.mjs +0 -16
  120. package/lib/core/utils/internal/toReadonlyArray.d.ts +0 -6
  121. package/lib/core/utils/internal/toReadonlyArray.js +0 -28
  122. package/lib/core/utils/internal/toReadonlyArray.mjs +0 -8
  123. package/lib/core/utils/internal/tryCatch.d.ts +0 -3
  124. package/lib/core/utils/internal/tryCatch.js +0 -31
  125. package/lib/core/utils/internal/tryCatch.mjs +0 -11
  126. package/lib/core/utils/internal/uuidv4.d.ts +0 -3
  127. package/lib/core/utils/internal/uuidv4.js +0 -26
  128. package/lib/core/utils/internal/uuidv4.mjs +0 -6
  129. package/lib/core/utils/logging/getStatusCodeColor.d.ts +0 -11
  130. package/lib/core/utils/logging/getStatusCodeColor.js +0 -39
  131. package/lib/core/utils/logging/getStatusCodeColor.mjs +0 -19
  132. package/lib/core/utils/logging/getTimestamp.d.ts +0 -6
  133. package/lib/core/utils/logging/getTimestamp.js +0 -27
  134. package/lib/core/utils/logging/getTimestamp.mjs +0 -7
  135. package/lib/core/utils/logging/serializeRequest.d.ts +0 -12
  136. package/lib/core/utils/logging/serializeRequest.js +0 -55
  137. package/lib/core/utils/logging/serializeRequest.mjs +0 -35
  138. package/lib/core/utils/logging/serializeResponse.d.ts +0 -9
  139. package/lib/core/utils/logging/serializeResponse.js +0 -69
  140. package/lib/core/utils/logging/serializeResponse.mjs +0 -39
  141. package/lib/core/utils/matching/matchRequestUrl.d.ts +0 -19
  142. package/lib/core/utils/matching/matchRequestUrl.js +0 -50
  143. package/lib/core/utils/matching/matchRequestUrl.mjs +0 -30
  144. package/lib/core/utils/matching/normalizePath.d.ts +0 -12
  145. package/lib/core/utils/matching/normalizePath.js +0 -32
  146. package/lib/core/utils/matching/normalizePath.mjs +0 -12
  147. package/lib/core/utils/request/getPublicUrlFromRequest.d.ts +0 -7
  148. package/lib/core/utils/request/getPublicUrlFromRequest.js +0 -30
  149. package/lib/core/utils/request/getPublicUrlFromRequest.mjs +0 -10
  150. package/lib/core/utils/request/getRequestCookies.d.ts +0 -8
  151. package/lib/core/utils/request/getRequestCookies.js +0 -88
  152. package/lib/core/utils/request/getRequestCookies.mjs +0 -60
  153. package/lib/core/utils/request/onUnhandledRequest.d.ts +0 -12
  154. package/lib/core/utils/request/onUnhandledRequest.js +0 -193
  155. package/lib/core/utils/request/onUnhandledRequest.mjs +0 -165
  156. package/lib/core/utils/request/readResponseCookies.d.ts +0 -3
  157. package/lib/core/utils/request/readResponseCookies.js +0 -45
  158. package/lib/core/utils/request/readResponseCookies.mjs +0 -27
  159. package/lib/core/utils/toResponseInit.d.ts +0 -3
  160. package/lib/core/utils/toResponseInit.js +0 -30
  161. package/lib/core/utils/toResponseInit.mjs +0 -10
  162. package/lib/core/utils/url/cleanUrl.d.ts +0 -7
  163. package/lib/core/utils/url/cleanUrl.js +0 -31
  164. package/lib/core/utils/url/cleanUrl.mjs +0 -11
  165. package/lib/core/utils/url/getAbsoluteUrl.d.ts +0 -6
  166. package/lib/core/utils/url/getAbsoluteUrl.js +0 -37
  167. package/lib/core/utils/url/getAbsoluteUrl.mjs +0 -17
  168. package/lib/core/utils/url/isAbsoluteUrl.d.ts +0 -6
  169. package/lib/core/utils/url/isAbsoluteUrl.js +0 -26
  170. package/lib/core/utils/url/isAbsoluteUrl.mjs +0 -6
package/README.md CHANGED
@@ -1,6 +1,3 @@
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
-
4
1
  <br />
5
2
 
6
3
  <p align="center">
@@ -28,7 +25,7 @@
28
25
 
29
26
  - **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.
30
27
  - **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.
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.
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.
32
29
 
33
30
  ---
34
31
 
@@ -56,7 +53,7 @@ This README will give you a brief overview on the library but there's no better
56
53
 
57
54
  ### How does it work?
58
55
 
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.
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.
60
57
 
61
58
  **Take a look at this quick presentation on how Mock Service Worker functions in a browser:**
62
59
 
@@ -74,20 +71,17 @@ In-browser usage is what sets Mock Service Worker apart from other tools. Utiliz
74
71
  ```js
75
72
  // src/mocks.js
76
73
  // 1. Import the library.
77
- import { http, HttpResponse } from 'msw'
78
- import { setupWorker } from 'msw/browser'
74
+ import { setupWorker, rest } from 'msw'
79
75
 
80
76
  // 2. Describe network behavior with request handlers.
81
77
  const worker = setupWorker(
82
- http.get('https://github.com/octocat', ({ request, params, cookies }) => {
83
- return HttpResponse.json(
84
- {
85
- message: 'Mocked response',
86
- },
87
- {
88
- status: 202,
89
- statusText: 'Mocked status',
90
- },
78
+ rest.get('https://github.com/octocat', (req, res, ctx) => {
79
+ return res(
80
+ ctx.delay(1500),
81
+ ctx.status(202, 'Mocked status'),
82
+ ctx.json({
83
+ message: 'Mocked response JSON body',
84
+ }),
91
85
  )
92
86
  }),
93
87
  )
@@ -124,7 +118,7 @@ Take a look at the example of an integration test in Jest that uses [React Testi
124
118
  // test/Dashboard.test.js
125
119
 
126
120
  import React from 'react'
127
- import { http, HttpResponse } from 'msw'
121
+ import { rest } from 'msw'
128
122
  import { setupServer } from 'msw/node'
129
123
  import { render, screen, waitFor } from '@testing-library/react'
130
124
  import Dashboard from '../src/components/Dashboard'
@@ -133,17 +127,19 @@ const server = setupServer(
133
127
  // Describe network behavior with request handlers.
134
128
  // Tip: move the handlers into their own module and
135
129
  // import it across your browser and Node.js setups!
136
- http.get('/posts', ({ request, params, cookies }) => {
137
- return HttpResponse.json([
138
- {
139
- id: 'f8dd058f-9006-4174-8d49-e3086bc39c21',
140
- title: `Avoid Nesting When You're Testing`,
141
- },
142
- {
143
- id: '8ac96078-6434-4959-80ed-cc834e7fef61',
144
- title: `How I Built A Modern Website In 2021`,
145
- },
146
- ])
130
+ rest.get('/posts', (req, res, ctx) => {
131
+ return res(
132
+ ctx.json([
133
+ {
134
+ id: 'f8dd058f-9006-4174-8d49-e3086bc39c21',
135
+ title: `Avoid Nesting When You're Testing`,
136
+ },
137
+ {
138
+ id: '8ac96078-6434-4959-80ed-cc834e7fef61',
139
+ title: `How I Built A Modern Website In 2021`,
140
+ },
141
+ ]),
142
+ )
147
143
  }),
148
144
  )
149
145
 
package/cli/init.js CHANGED
@@ -21,14 +21,14 @@ module.exports = async function init(args) {
21
21
 
22
22
  if (!dirExists) {
23
23
  // Try to create the directory if it doesn't exist
24
- const createDirectoryResult = await until(() =>
24
+ const [createDirectoryError] = await until(() =>
25
25
  fs.promises.mkdir(absolutePublicDir, { recursive: true }),
26
26
  )
27
27
  invariant(
28
- createDirectoryResult.error == null,
28
+ createDirectoryError == null,
29
29
  'Failed to create a Service Worker at "%s": directory does not exist and could not be created.\nMake sure to include a relative path to the root directory of your server.\n\nSee the original error below:\n%s',
30
30
  absolutePublicDir,
31
- createDirectoryResult.error,
31
+ createDirectoryError,
32
32
  )
33
33
  }
34
34
 
@@ -2,7 +2,8 @@ const path = require('path')
2
2
 
3
3
  const SERVICE_WORKER_SOURCE_PATH = path.resolve(
4
4
  __dirname,
5
- '../src/mockServiceWorker.js',
5
+ '../',
6
+ 'src/mockServiceWorker.js',
6
7
  )
7
8
 
8
9
  const SERVICE_WORKER_BUILD_PATH = path.resolve(
File without changes
@@ -0,0 +1,20 @@
1
+ import { IsomorphicResponse, BatchInterceptor, Interceptor, HttpRequestEventMap } from '@mswjs/interceptors';
2
+ import { L as LifeCycleEventsMap, S as SetupApi, K as SetupServer, c as RequestHandler, o as SharedOptions } from './glossary-de6278a9.js';
3
+
4
+ type ServerLifecycleEventsMap = LifeCycleEventsMap<IsomorphicResponse>;
5
+ declare class SetupServerApi extends SetupApi<ServerLifecycleEventsMap> implements SetupServer {
6
+ protected readonly interceptor: BatchInterceptor<Array<Interceptor<HttpRequestEventMap>>, HttpRequestEventMap>;
7
+ private resolvedOptions;
8
+ constructor(interceptors: Array<{
9
+ new (): Interceptor<HttpRequestEventMap>;
10
+ }>, ...handlers: Array<RequestHandler>);
11
+ /**
12
+ * Subscribe to all requests that are using the interceptor object
13
+ */
14
+ private init;
15
+ listen(options?: Partial<SharedOptions>): void;
16
+ printHandlers(): void;
17
+ close(): void;
18
+ }
19
+
20
+ export { ServerLifecycleEventsMap as S, SetupServerApi as a };
@@ -0,0 +1,385 @@
1
+ import { Emitter, EventMap } from 'strict-event-emitter';
2
+ import { PartialDeep } from 'type-fest';
3
+ import { RequestInit as RequestInit$1, IsomorphicRequest, IsomorphicResponse } from '@mswjs/interceptors';
4
+ import { FlatHeadersObject, Headers } from 'headers-polyfill';
5
+
6
+ type HeadersObject<KeyType extends string = string> = Record<KeyType, string | string[]>;
7
+ /**
8
+ * @see https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name
9
+ */
10
+ type ForbiddenHeaderNames = 'cookie' | 'cookie2' | 'set-cookie' | 'set-cookie2';
11
+ type ForbiddenHeaderError<HeaderName extends string> = `SafeResponseHeader: the '${HeaderName}' header cannot be set on the response. Please use the 'ctx.cookie()' function instead.`;
12
+ /**
13
+ * Sets one or multiple response headers.
14
+ * @example
15
+ * ctx.set('Content-Type', 'text/plain')
16
+ * ctx.set({
17
+ * 'Accept': 'application/javascript',
18
+ * 'Content-Type': "text/plain"
19
+ * })
20
+ * @see {@link https://mswjs.io/docs/api/context/set `ctx.set()`}
21
+ */
22
+ declare function set<N extends string | HeadersObject>(...args: N extends string ? Lowercase<N> extends ForbiddenHeaderNames ? [ForbiddenHeaderError<N>] : [N, string] : N extends HeadersObject<infer CookieName> ? Lowercase<CookieName> extends ForbiddenHeaderNames ? [ForbiddenHeaderError<CookieName>] : [N] : [N]): ResponseTransformer;
23
+
24
+ type DelayMode = 'real' | 'infinite';
25
+ /**
26
+ * Delays the response by the given duration (ms).
27
+ * @example
28
+ * res(ctx.delay(1200)) // delay response by 1200ms
29
+ * res(ctx.delay()) // emulate realistic server response time
30
+ * res(ctx.delay('infinite')) // delay response infinitely
31
+ * @see {@link https://mswjs.io/docs/api/context/delay `ctx.delay()`}
32
+ */
33
+ declare const delay: (durationOrMode?: DelayMode | number) => ResponseTransformer;
34
+
35
+ type RequestCache = 'default' | 'no-store' | 'reload' | 'no-cache' | 'force-cache' | 'only-if-cached';
36
+ type RequestMode = 'navigate' | 'same-origin' | 'no-cors' | 'cors';
37
+ type RequestRedirect = 'follow' | 'error' | 'manual';
38
+ type RequestDestination = '' | 'audio' | 'audioworklet' | 'document' | 'embed' | 'font' | 'frame' | 'iframe' | 'image' | 'manifest' | 'object' | 'paintworklet' | 'report' | 'script' | 'sharedworker' | 'style' | 'track' | 'video' | 'xslt' | 'worker';
39
+ type RequestPriority = 'high' | 'low' | 'auto';
40
+ type RequestReferrerPolicy = '' | 'no-referrer' | 'no-referrer-when-downgrade' | 'origin' | 'origin-when-cross-origin' | 'same-origin' | 'strict-origin' | 'strict-origin-when-cross-origin' | 'unsafe-url';
41
+ interface MockedRequestInit extends RequestInit$1 {
42
+ id?: string;
43
+ cache?: RequestCache;
44
+ redirect?: RequestRedirect;
45
+ integrity?: string;
46
+ keepalive?: boolean;
47
+ mode?: RequestMode;
48
+ priority?: RequestPriority;
49
+ destination?: RequestDestination;
50
+ referrer?: string;
51
+ referrerPolicy?: RequestReferrerPolicy;
52
+ cookies?: Record<string, string>;
53
+ }
54
+ declare class MockedRequest<RequestBody extends DefaultBodyType = DefaultBodyType> extends IsomorphicRequest {
55
+ readonly cache: RequestCache;
56
+ readonly cookies: Record<string, string>;
57
+ readonly destination: RequestDestination;
58
+ readonly integrity: string;
59
+ readonly keepalive: boolean;
60
+ readonly mode: RequestMode;
61
+ readonly priority: RequestPriority;
62
+ readonly redirect: RequestRedirect;
63
+ readonly referrer: string;
64
+ readonly referrerPolicy: RequestReferrerPolicy;
65
+ constructor(url: URL, init?: MockedRequestInit);
66
+ /**
67
+ * Get parsed request body. The type is inferred from the content type.
68
+ *
69
+ * @deprecated - Use `req.text()`, `req.json()` or `req.arrayBuffer()`
70
+ * to read the request body as a plain text, JSON, or ArrayBuffer.
71
+ */
72
+ get body(): RequestBody;
73
+ /**
74
+ * Bypass the intercepted request.
75
+ * This will make a call to the actual endpoint requested.
76
+ */
77
+ passthrough(): MockedResponse<null>;
78
+ private getCookies;
79
+ }
80
+
81
+ /**
82
+ * Performs a bypassed request inside a request handler.
83
+ * @example
84
+ * const originalResponse = await ctx.fetch(req)
85
+ * @see {@link https://mswjs.io/docs/api/context/fetch `ctx.fetch()`}
86
+ */
87
+ declare const fetch: (input: string | MockedRequest, requestInit?: RequestInit) => Promise<Response>;
88
+
89
+ interface ResponseLookupResult {
90
+ handler?: RequestHandler;
91
+ publicRequest?: any;
92
+ parsedRequest?: any;
93
+ response?: MockedResponse;
94
+ }
95
+ interface ResponseResolutionContext {
96
+ baseUrl?: string;
97
+ }
98
+
99
+ interface UnhandledRequestPrint {
100
+ warning(): void;
101
+ error(): void;
102
+ }
103
+ type UnhandledRequestCallback = (request: MockedRequest, print: UnhandledRequestPrint) => void;
104
+ type UnhandledRequestStrategy = 'bypass' | 'warn' | 'error' | UnhandledRequestCallback;
105
+
106
+ interface SharedOptions {
107
+ /**
108
+ * Specifies how to react to a request that has no corresponding
109
+ * request handler. Warns on unhandled requests by default.
110
+ *
111
+ * @example worker.start({ onUnhandledRequest: 'bypass' })
112
+ * @example worker.start({ onUnhandledRequest: 'warn' })
113
+ * @example server.listen({ onUnhandledRequest: 'error' })
114
+ */
115
+ onUnhandledRequest?: UnhandledRequestStrategy;
116
+ }
117
+ interface LifeCycleEventsMap<ResponseType> {
118
+ 'request:start': [MockedRequest];
119
+ 'request:match': [MockedRequest];
120
+ 'request:unhandled': [MockedRequest];
121
+ 'request:end': [MockedRequest];
122
+ 'response:mocked': [response: ResponseType, requestId: string];
123
+ 'response:bypass': [response: ResponseType, requestId: string];
124
+ unhandledException: [error: Error, request: MockedRequest];
125
+ [key: string]: Array<unknown>;
126
+ }
127
+ type LifeCycleEventEmitter<ResponseType extends Record<string | symbol, any>> = Pick<Emitter<ResponseType>, 'on' | 'removeListener' | 'removeAllListeners'>;
128
+
129
+ type WorkerLifecycleEventsMap = LifeCycleEventsMap<Response>;
130
+ type FindWorker = (scriptUrl: string, mockServiceWorkerUrl: string) => boolean;
131
+ interface StartOptions extends SharedOptions {
132
+ /**
133
+ * Service Worker registration options.
134
+ */
135
+ serviceWorker?: {
136
+ /**
137
+ * Custom url to the worker script.
138
+ * @default "/mockServiceWorker.js"
139
+ */
140
+ url?: string;
141
+ options?: RegistrationOptions;
142
+ };
143
+ /**
144
+ * Disables the logging of captured requests
145
+ * into browser's console.
146
+ * @default false
147
+ */
148
+ quiet?: boolean;
149
+ /**
150
+ * Defers any network requests until the Service Worker
151
+ * instance is activated.
152
+ * @default true
153
+ */
154
+ waitUntilReady?: boolean;
155
+ /**
156
+ * A custom lookup function to find a Mock Service Worker in the list
157
+ * of all registered Service Workers on the page.
158
+ */
159
+ findWorker?: FindWorker;
160
+ }
161
+ interface SerializedResponse<BodyType extends DefaultBodyType = any> {
162
+ status: number;
163
+ statusText: string;
164
+ headers: FlatHeadersObject;
165
+ body: BodyType;
166
+ delay?: number;
167
+ }
168
+ type StartReturnType = Promise<ServiceWorkerRegistration | undefined>;
169
+ type StopHandler = () => void;
170
+ interface SetupWorker {
171
+ /**
172
+ * Registers and activates the mock Service Worker.
173
+ * @see {@link https://mswjs.io/docs/api/setup-worker/start `worker.start()`}
174
+ */
175
+ start: (options?: StartOptions) => StartReturnType;
176
+ /**
177
+ * Stops requests interception for the current client.
178
+ * @see {@link https://mswjs.io/docs/api/setup-worker/stop `worker.stop()`}
179
+ */
180
+ stop: StopHandler;
181
+ /**
182
+ * Prepends given request handlers to the list of existing handlers.
183
+ * @param {RequestHandler[]} handlers List of runtime request handlers.
184
+ * @see {@link https://mswjs.io/docs/api/setup-worker/use `worker.use()`}
185
+ */
186
+ use: (...handlers: RequestHandler[]) => void;
187
+ /**
188
+ * Marks all request handlers that respond using `res.once()` as unused.
189
+ * @see {@link https://mswjs.io/docs/api/setup-worker/restore-handlers `worker.restoreHandlers()`}
190
+ */
191
+ restoreHandlers: () => void;
192
+ /**
193
+ * Resets request handlers to the initial list given to the `setupWorker` call, or to the explicit next request handlers list, if given.
194
+ * @param {RequestHandler[]} nextHandlers List of the new initial request handlers.
195
+ * @see {@link https://mswjs.io/docs/api/setup-worker/reset-handlers `worker.resetHandlers()`}
196
+ */
197
+ resetHandlers: (...nextHandlers: RequestHandler[]) => void;
198
+ /**
199
+ * Returns a readonly list of currently active request handlers.
200
+ * @see {@link https://mswjs.io/docs/api/setup-worker/list-handlers `worker.listHandlers()`}
201
+ */
202
+ listHandlers(): ReadonlyArray<RequestHandler<RequestHandlerDefaultInfo, MockedRequest<DefaultBodyType>, any, MockedRequest<DefaultBodyType>>>;
203
+ /**
204
+ * Lists all active request handlers.
205
+ * @see {@link https://mswjs.io/docs/api/setup-worker/print-handlers `worker.printHandlers()`}
206
+ */
207
+ printHandlers: () => void;
208
+ events: LifeCycleEventEmitter<WorkerLifecycleEventsMap>;
209
+ }
210
+
211
+ type DefaultContext = {
212
+ status: typeof status;
213
+ set: typeof set;
214
+ delay: typeof delay;
215
+ fetch: typeof fetch;
216
+ };
217
+ declare const defaultContext: DefaultContext;
218
+ type DefaultRequestMultipartBody = Record<string, string | File | (string | File)[]>;
219
+ type DefaultBodyType = Record<string, any> | DefaultRequestMultipartBody | string | number | boolean | null | undefined;
220
+ interface RequestHandlerDefaultInfo {
221
+ header: string;
222
+ }
223
+ interface RequestHandlerInternalInfo {
224
+ callFrame?: string;
225
+ }
226
+ type ContextMap = Record<string, (...args: any[]) => any>;
227
+ type ResponseResolverReturnType<ReturnType> = ReturnType | undefined | void;
228
+ type MaybeAsyncResponseResolverReturnType<ReturnType> = MaybePromise<ResponseResolverReturnType<ReturnType>>;
229
+ type AsyncResponseResolverReturnType<ReturnType> = MaybeAsyncResponseResolverReturnType<ReturnType> | Generator<MaybeAsyncResponseResolverReturnType<ReturnType>, MaybeAsyncResponseResolverReturnType<ReturnType>, MaybeAsyncResponseResolverReturnType<ReturnType>>;
230
+ type ResponseResolver<RequestType = MockedRequest, ContextType = typeof defaultContext, BodyType extends DefaultBodyType = any> = (req: RequestType, res: ResponseComposition<BodyType>, context: ContextType) => AsyncResponseResolverReturnType<MockedResponse<BodyType>>;
231
+ interface RequestHandlerOptions<HandlerInfo> {
232
+ info: HandlerInfo;
233
+ resolver: ResponseResolver<any, any>;
234
+ ctx?: ContextMap;
235
+ }
236
+ interface RequestHandlerExecutionResult<PublicRequestType> {
237
+ handler: RequestHandler;
238
+ parsedResult: any;
239
+ request: PublicRequestType;
240
+ response?: MockedResponse;
241
+ }
242
+ declare abstract class RequestHandler<HandlerInfo extends RequestHandlerDefaultInfo = RequestHandlerDefaultInfo, Request extends MockedRequest = MockedRequest, ParsedResult = any, PublicRequest extends MockedRequest = Request> {
243
+ info: HandlerInfo & RequestHandlerInternalInfo;
244
+ shouldSkip: boolean;
245
+ private ctx;
246
+ private resolverGenerator?;
247
+ private resolverGeneratorResult?;
248
+ protected resolver: ResponseResolver<any, any>;
249
+ constructor(options: RequestHandlerOptions<HandlerInfo>);
250
+ /**
251
+ * Determine if the captured request should be mocked.
252
+ */
253
+ abstract predicate(request: MockedRequest, parsedResult: ParsedResult, resolutionContext?: ResponseResolutionContext): boolean;
254
+ /**
255
+ * Print out the successfully handled request.
256
+ */
257
+ abstract log(request: Request, response: SerializedResponse<any>, parsedResult: ParsedResult): void;
258
+ /**
259
+ * Parse the captured request to extract additional information from it.
260
+ * Parsed result is then exposed to other methods of this request handler.
261
+ */
262
+ parse(_request: MockedRequest, _resolutionContext?: ResponseResolutionContext): ParsedResult;
263
+ /**
264
+ * Test if this handler matches the given request.
265
+ */
266
+ test(request: MockedRequest, resolutionContext?: ResponseResolutionContext): boolean;
267
+ /**
268
+ * Derive the publicly exposed request (`req`) instance of the response resolver
269
+ * from the captured request and its parsed result.
270
+ */
271
+ protected getPublicRequest(request: MockedRequest, _parsedResult: ParsedResult): PublicRequest;
272
+ markAsSkipped(shouldSkip?: boolean): void;
273
+ /**
274
+ * Execute this request handler and produce a mocked response
275
+ * using the given resolver function.
276
+ */
277
+ run(request: MockedRequest, resolutionContext?: ResponseResolutionContext): Promise<RequestHandlerExecutionResult<PublicRequest> | null>;
278
+ private wrapResolver;
279
+ private createExecutionResult;
280
+ }
281
+
282
+ type MaybePromise<ValueType = any> = ValueType | Promise<ValueType>;
283
+ /**
284
+ * Internal representation of a mocked response instance.
285
+ */
286
+ interface MockedResponse<BodyType extends DefaultBodyType = any> {
287
+ body: BodyType;
288
+ status: number;
289
+ statusText: string;
290
+ headers: Headers;
291
+ once: boolean;
292
+ passthrough: boolean;
293
+ delay?: number;
294
+ }
295
+ type ResponseTransformer<BodyType extends TransformerBodyType = any, TransformerBodyType extends DefaultBodyType = any> = (res: MockedResponse<TransformerBodyType>) => MaybePromise<MockedResponse<BodyType>>;
296
+ type ResponseFunction<BodyType extends DefaultBodyType = any> = (...transformers: ResponseTransformer<BodyType>[]) => MaybePromise<MockedResponse<BodyType>>;
297
+ type ResponseComposition<BodyType extends DefaultBodyType = any> = ResponseFunction<BodyType> & {
298
+ /**
299
+ * Respond using a given mocked response to the first captured request.
300
+ * Does not affect any subsequent captured requests.
301
+ */
302
+ once: ResponseFunction<BodyType>;
303
+ networkError: (message: string) => void;
304
+ };
305
+ declare const defaultResponse: Omit<MockedResponse, 'headers'>;
306
+ type ResponseCompositionOptions<BodyType> = {
307
+ defaultTransformers?: ResponseTransformer<BodyType>[];
308
+ mockedResponseOverrides?: Partial<MockedResponse>;
309
+ };
310
+ declare function createResponseComposition<BodyType extends DefaultBodyType>(responseOverrides?: Partial<MockedResponse<BodyType>>, defaultTransformers?: ResponseTransformer<BodyType>[]): ResponseFunction;
311
+ declare const response: ResponseFunction<any> & {
312
+ once: ResponseFunction<any>;
313
+ networkError(message: string): never;
314
+ };
315
+
316
+ /**
317
+ * Sets a response status code and text.
318
+ * @example
319
+ * res(ctx.status(301))
320
+ * res(ctx.status(400, 'Custom status text'))
321
+ * @see {@link https://mswjs.io/docs/api/context/status `ctx.status()`}
322
+ */
323
+ declare const status: (statusCode: number, statusText?: string) => ResponseTransformer;
324
+
325
+ /**
326
+ * Generic class for the mock API setup.
327
+ */
328
+ declare abstract class SetupApi<EventsMap extends EventMap> {
329
+ protected initialHandlers: ReadonlyArray<RequestHandler>;
330
+ protected currentHandlers: Array<RequestHandler>;
331
+ protected readonly emitter: Emitter<EventsMap>;
332
+ protected readonly publicEmitter: Emitter<EventsMap>;
333
+ readonly events: LifeCycleEventEmitter<EventsMap>;
334
+ constructor(...initialHandlers: Array<RequestHandler>);
335
+ private validateHandlers;
336
+ protected dispose(): void;
337
+ use(...runtimeHandlers: Array<RequestHandler>): void;
338
+ restoreHandlers(): void;
339
+ resetHandlers(...nextHandlers: Array<RequestHandler>): void;
340
+ listHandlers(): ReadonlyArray<RequestHandler<RequestHandlerDefaultInfo, MockedRequest<DefaultBodyType>, any, MockedRequest<DefaultBodyType>>>;
341
+ private createLifeCycleEvents;
342
+ abstract printHandlers(): void;
343
+ }
344
+
345
+ type ServerLifecycleEventsMap = LifeCycleEventsMap<IsomorphicResponse>;
346
+ interface SetupServer {
347
+ /**
348
+ * Starts requests interception based on the previously provided request handlers.
349
+ * @see {@link https://mswjs.io/docs/api/setup-server/listen `server.listen()`}
350
+ */
351
+ listen(options?: PartialDeep<SharedOptions>): void;
352
+ /**
353
+ * Stops requests interception by restoring all augmented modules.
354
+ * @see {@link https://mswjs.io/docs/api/setup-server/close `server.close()`}
355
+ */
356
+ close(): void;
357
+ /**
358
+ * Prepends given request handlers to the list of existing handlers.
359
+ * @see {@link https://mswjs.io/docs/api/setup-server/use `server.use()`}
360
+ */
361
+ use(...handlers: RequestHandler[]): void;
362
+ /**
363
+ * Marks all request handlers that respond using `res.once()` as unused.
364
+ * @see {@link https://mswjs.io/docs/api/setup-server/restore-handlers `server.restore-handlers()`}
365
+ */
366
+ restoreHandlers(): void;
367
+ /**
368
+ * Resets request handlers to the initial list given to the `setupServer` call, or to the explicit next request handlers list, if given.
369
+ * @see {@link https://mswjs.io/docs/api/setup-server/reset-handlers `server.reset-handlers()`}
370
+ */
371
+ resetHandlers(...nextHandlers: RequestHandler[]): void;
372
+ /**
373
+ * Returns a readonly list of currently active request handlers.
374
+ * @see {@link https://mswjs.io/docs/api/setup-server/list-handlers `server.listHandlers()`}
375
+ */
376
+ listHandlers(): ReadonlyArray<RequestHandler<RequestHandlerDefaultInfo, MockedRequest<DefaultBodyType>, any, MockedRequest<DefaultBodyType>>>;
377
+ /**
378
+ * Lists all active request handlers.
379
+ * @see {@link https://mswjs.io/docs/api/setup-server/print-handlers `server.print-handlers()`}
380
+ */
381
+ printHandlers(): void;
382
+ events: LifeCycleEventEmitter<ServerLifecycleEventsMap>;
383
+ }
384
+
385
+ export { AsyncResponseResolverReturnType as A, DelayMode as B, RequestCache as C, DefaultContext as D, RequestMode as E, RequestRedirect as F, RequestDestination as G, RequestPriority as H, RequestReferrerPolicy as I, MockedRequestInit as J, SetupServer as K, LifeCycleEventsMap as L, MockedRequest as M, ResponseTransformer as R, SetupApi as S, WorkerLifecycleEventsMap as W, set as a, SetupWorker as b, RequestHandler as c, delay as d, StartOptions as e, fetch as f, StartReturnType as g, DefaultBodyType as h, ResponseResolver as i, ResponseResolutionContext as j, SerializedResponse as k, RequestHandlerDefaultInfo as l, MockedResponse as m, ResponseLookupResult as n, SharedOptions as o, ServerLifecycleEventsMap as p, defaultResponse as q, response as r, status as s, createResponseComposition as t, defaultContext as u, ResponseResolverReturnType as v, DefaultRequestMultipartBody as w, ResponseComposition as x, ResponseCompositionOptions as y, ResponseFunction as z };