msw 0.33.3 → 0.36.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.
- package/lib/esm/RequestHandler-deps.js +391 -66
- package/lib/esm/errors-deps.js +15 -1
- package/lib/esm/fetch-deps.js +9 -5
- package/lib/esm/graphql-deps.js +14 -9
- package/lib/esm/graphql.js +1 -0
- package/lib/esm/index-deps.js +2 -1
- package/lib/esm/index.js +231 -5257
- package/lib/esm/index2.js +1 -1
- package/lib/esm/mockServiceWorker.js +21 -12
- package/lib/esm/rest-deps.js +8 -15
- package/lib/esm/rest.js +1 -0
- package/lib/iife/index.js +3 -3
- package/lib/iife/mockServiceWorker.js +21 -12
- package/lib/types/context/data.d.ts +2 -3
- package/lib/types/context/extensions.d.ts +8 -0
- package/lib/types/context/index.d.ts +1 -0
- package/lib/types/graphql.d.ts +2 -1
- package/lib/types/handlers/GraphQLHandler.d.ts +5 -4
- package/lib/types/handlers/RequestHandler.d.ts +1 -1
- package/lib/types/handlers/RestHandler.d.ts +8 -10
- package/lib/types/index.d.ts +17 -7
- package/lib/types/node/glossary.d.ts +4 -14
- package/lib/types/node/index.d.ts +1 -1
- package/lib/types/rest.d.ts +10 -9
- package/lib/types/setupWorker/glossary.d.ts +16 -26
- package/lib/types/setupWorker/start/utils/prepareStartHandler.d.ts +3 -3
- package/lib/types/sharedOptions.d.ts +12 -1
- package/lib/types/typeUtils.d.ts +5 -3
- package/lib/types/utils/handleRequest.d.ts +4 -4
- package/lib/types/utils/internal/getCallFrame.d.ts +1 -1
- package/lib/types/utils/internal/jsonParse.d.ts +2 -2
- package/lib/types/utils/internal/pipeEvents.d.ts +6 -0
- package/lib/types/utils/logging/prepareResponse.d.ts +1 -1
- package/lib/types/utils/matching/matchRequestUrl.d.ts +12 -2
- package/lib/types/utils/matching/normalizePath.d.ts +1 -1
- package/lib/types/utils/request/parseBody.d.ts +2 -2
- package/lib/types/utils/request/parseWorkerRequest.d.ts +2 -2
- package/lib/types/utils/worker/createFallbackRequestListener.d.ts +2 -1
- package/lib/types/utils/worker/createRequestListener.d.ts +2 -1
- package/lib/umd/index.js +1383 -1777
- package/lib/umd/mockServiceWorker.js +21 -12
- package/native/lib/index.js +494 -491
- package/node/lib/index.js +496 -493
- package/package.json +19 -19
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
/* tslint:disable */
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* Mock Service Worker (0.
|
|
5
|
+
* Mock Service Worker (0.36.1).
|
|
6
6
|
* @see https://github.com/mswjs/msw
|
|
7
7
|
* - Please do NOT modify this file.
|
|
8
8
|
* - Please do NOT serve this file on production.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
const INTEGRITY_CHECKSUM = '
|
|
11
|
+
const INTEGRITY_CHECKSUM = '02f4ad4a2797f85668baf196e553d929'
|
|
12
12
|
const bypassHeaderName = 'x-msw-bypass'
|
|
13
13
|
const activeClientIds = new Set()
|
|
14
14
|
|
|
@@ -83,11 +83,11 @@ self.addEventListener('message', async function (event) {
|
|
|
83
83
|
}
|
|
84
84
|
})
|
|
85
85
|
|
|
86
|
-
// Resolve the "
|
|
86
|
+
// Resolve the "main" client for the given event.
|
|
87
87
|
// Client that issues a request doesn't necessarily equal the client
|
|
88
88
|
// that registered the worker. It's with the latter the worker should
|
|
89
89
|
// communicate with during the response resolving phase.
|
|
90
|
-
async function
|
|
90
|
+
async function resolveMainClient(event) {
|
|
91
91
|
const client = await self.clients.get(event.clientId)
|
|
92
92
|
|
|
93
93
|
if (client.frameType === 'top-level') {
|
|
@@ -109,7 +109,7 @@ async function resolveMasterClient(event) {
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
async function handleRequest(event, requestId) {
|
|
112
|
-
const client = await
|
|
112
|
+
const client = await resolveMainClient(event)
|
|
113
113
|
const response = await getResponse(event, client, requestId)
|
|
114
114
|
|
|
115
115
|
// Send back the response clone for the "response:*" life-cycle events.
|
|
@@ -221,13 +221,11 @@ async function getResponse(event, client, requestId) {
|
|
|
221
221
|
|
|
222
222
|
console.error(
|
|
223
223
|
`\
|
|
224
|
-
[MSW]
|
|
224
|
+
[MSW] Uncaught exception in the request handler for "%s %s":
|
|
225
225
|
|
|
226
|
-
${parsedBody.
|
|
227
|
-
(see more detailed error stack trace in the mocked response body)
|
|
226
|
+
${parsedBody.location}
|
|
228
227
|
|
|
229
|
-
This exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error.
|
|
230
|
-
If you wish to mock an error response, please refer to this guide: https://mswjs.io/docs/recipes/mocking-error-responses\
|
|
228
|
+
This exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error, as it indicates a mistake in your code. If you wish to mock an error response, please see this guide: https://mswjs.io/docs/recipes/mocking-error-responses\
|
|
231
229
|
`,
|
|
232
230
|
request.method,
|
|
233
231
|
request.url,
|
|
@@ -271,11 +269,22 @@ self.addEventListener('fetch', function (event) {
|
|
|
271
269
|
|
|
272
270
|
return event.respondWith(
|
|
273
271
|
handleRequest(event, requestId).catch((error) => {
|
|
272
|
+
if (error.name === 'NetworkError') {
|
|
273
|
+
console.warn(
|
|
274
|
+
'[MSW] Successfully emulated a network error for the "%s %s" request.',
|
|
275
|
+
request.method,
|
|
276
|
+
request.url,
|
|
277
|
+
)
|
|
278
|
+
return
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// At this point, any exception indicates an issue with the original request/response.
|
|
274
282
|
console.error(
|
|
275
|
-
|
|
283
|
+
`\
|
|
284
|
+
[MSW] Caught an exception from the "%s %s" request (%s). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.`,
|
|
276
285
|
request.method,
|
|
277
286
|
request.url,
|
|
278
|
-
error
|
|
287
|
+
`${error.name}: ${error.message}`,
|
|
279
288
|
)
|
|
280
289
|
}),
|
|
281
290
|
)
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare type DataContext<T> = (payload: T) => ResponseTransformer;
|
|
1
|
+
import { GraphQLPayloadContext } from '../typeUtils';
|
|
3
2
|
/**
|
|
4
3
|
* Sets a given payload as a GraphQL response body.
|
|
5
4
|
* @example
|
|
6
5
|
* res(ctx.data({ user: { firstName: 'John' }}))
|
|
7
6
|
* @see {@link https://mswjs.io/docs/api/context/data `ctx.data()`}
|
|
8
7
|
*/
|
|
9
|
-
export declare const data:
|
|
8
|
+
export declare const data: GraphQLPayloadContext<Record<string, unknown>>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { GraphQLPayloadContext } from '../typeUtils';
|
|
2
|
+
/**
|
|
3
|
+
* Sets the GraphQL extensions on a given response.
|
|
4
|
+
* @example
|
|
5
|
+
* res(ctx.extensions({ tracing: { version: 1 }}))
|
|
6
|
+
* @see {@link https://mswjs.io/docs/api/context/extensions `ctx.extensions()`}
|
|
7
|
+
*/
|
|
8
|
+
export declare const extensions: GraphQLPayloadContext<Record<string, unknown>>;
|
|
@@ -3,6 +3,7 @@ export { set } from './set';
|
|
|
3
3
|
export { cookie } from './cookie';
|
|
4
4
|
export { body } from './body';
|
|
5
5
|
export { data } from './data';
|
|
6
|
+
export { extensions } from './extensions';
|
|
6
7
|
export { delay } from './delay';
|
|
7
8
|
export { errors } from './errors';
|
|
8
9
|
export { fetch } from './fetch';
|
package/lib/types/graphql.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { DocumentNode } from 'graphql';
|
|
2
|
-
import { Path } from 'node-match-path';
|
|
3
2
|
import { ResponseResolver } from './handlers/RequestHandler';
|
|
4
3
|
import { GraphQLHandler, GraphQLContext, GraphQLRequest, GraphQLVariables, GraphQLHandlerNameSelector } from './handlers/GraphQLHandler';
|
|
4
|
+
import { Path } from './utils/matching/matchRequestUrl';
|
|
5
5
|
export interface TypedDocumentNode<Result = {
|
|
6
6
|
[key: string]: any;
|
|
7
7
|
}, Variables = {
|
|
8
8
|
[key: string]: any;
|
|
9
9
|
}> extends DocumentNode {
|
|
10
|
+
__apiType?: (variables: Variables) => Result;
|
|
10
11
|
__resultType?: Result;
|
|
11
12
|
__variablesType?: Variables;
|
|
12
13
|
}
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import { DocumentNode, OperationTypeNode } from 'graphql';
|
|
2
|
-
import { Path } from 'node-match-path';
|
|
3
2
|
import { SerializedResponse } from '../setupWorker/glossary';
|
|
4
3
|
import { set } from '../context/set';
|
|
5
4
|
import { status } from '../context/status';
|
|
6
5
|
import { delay } from '../context/delay';
|
|
7
6
|
import { fetch } from '../context/fetch';
|
|
8
|
-
import { DataContext } from '../context/data';
|
|
9
7
|
import { errors } from '../context/errors';
|
|
8
|
+
import { GraphQLPayloadContext } from '../typeUtils';
|
|
10
9
|
import { cookie } from '../context/cookie';
|
|
11
10
|
import { MockedRequest, RequestHandler, ResponseResolver } from './RequestHandler';
|
|
11
|
+
import { Path } from '../utils/matching/matchRequestUrl';
|
|
12
12
|
import { ParsedGraphQLRequest, GraphQLMultipartRequestBody } from '../utils/internal/parseGraphQLRequest';
|
|
13
13
|
export declare type ExpectedOperationTypeNode = OperationTypeNode | 'all';
|
|
14
14
|
export declare type GraphQLHandlerNameSelector = DocumentNode | RegExp | string;
|
|
15
|
-
export declare type GraphQLContext<QueryType
|
|
15
|
+
export declare type GraphQLContext<QueryType extends Record<string, unknown>> = {
|
|
16
16
|
set: typeof set;
|
|
17
17
|
status: typeof status;
|
|
18
18
|
delay: typeof delay;
|
|
19
19
|
fetch: typeof fetch;
|
|
20
|
-
data:
|
|
20
|
+
data: GraphQLPayloadContext<QueryType>;
|
|
21
|
+
extensions: GraphQLPayloadContext<QueryType>;
|
|
21
22
|
errors: typeof errors;
|
|
22
23
|
cookie: typeof cookie;
|
|
23
24
|
};
|
|
@@ -10,7 +10,7 @@ export declare const defaultContext: {
|
|
|
10
10
|
fetch: (input: string | MockedRequest<DefaultRequestBody>, requestInit?: RequestInit) => Promise<Response>;
|
|
11
11
|
};
|
|
12
12
|
export declare type DefaultRequestMultipartBody = Record<string, string | File | (string | File)[]>;
|
|
13
|
-
export declare type DefaultRequestBody = Record<string, any> | DefaultRequestMultipartBody | string | undefined;
|
|
13
|
+
export declare type DefaultRequestBody = Record<string, any> | DefaultRequestMultipartBody | string | number | undefined;
|
|
14
14
|
export interface MockedRequest<Body = DefaultRequestBody> {
|
|
15
15
|
id: string;
|
|
16
16
|
url: URL;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Match, Path } from 'node-match-path';
|
|
2
1
|
import { body, cookie, delay, fetch, json, set, status, text, xml } from '../context';
|
|
3
2
|
import { SerializedResponse } from '../setupWorker/glossary';
|
|
4
3
|
import { ResponseResolutionContext } from '../utils/getResponse';
|
|
4
|
+
import { Match, Path, PathParams } from '../utils/matching/matchRequestUrl';
|
|
5
5
|
import { DefaultRequestBody, MockedRequest, RequestHandler, ResponseResolver } from './RequestHandler';
|
|
6
|
+
declare type RestHandlerMethod = string | RegExp;
|
|
6
7
|
interface RestHandlerInfo {
|
|
7
|
-
method:
|
|
8
|
+
method: RestHandlerMethod;
|
|
8
9
|
path: Path;
|
|
9
10
|
}
|
|
10
11
|
export declare enum RESTMethods {
|
|
@@ -28,13 +29,10 @@ export declare type RestContext = {
|
|
|
28
29
|
fetch: typeof fetch;
|
|
29
30
|
};
|
|
30
31
|
export declare const restContext: RestContext;
|
|
31
|
-
export declare type RequestParams = {
|
|
32
|
-
[paramName: string]: any;
|
|
33
|
-
};
|
|
34
32
|
export declare type RequestQuery = {
|
|
35
|
-
[queryName: string]:
|
|
33
|
+
[queryName: string]: string;
|
|
36
34
|
};
|
|
37
|
-
export interface RestRequest<BodyType extends DefaultRequestBody = DefaultRequestBody, ParamsType extends
|
|
35
|
+
export interface RestRequest<BodyType extends DefaultRequestBody = DefaultRequestBody, ParamsType extends PathParams = PathParams> extends MockedRequest<BodyType> {
|
|
38
36
|
params: ParamsType;
|
|
39
37
|
}
|
|
40
38
|
export declare type ParsedRestRequest = Match;
|
|
@@ -42,11 +40,11 @@ export declare type ParsedRestRequest = Match;
|
|
|
42
40
|
* Request handler for REST API requests.
|
|
43
41
|
* Provides request matching based on method and URL.
|
|
44
42
|
*/
|
|
45
|
-
export declare class RestHandler<RequestType extends MockedRequest<DefaultRequestBody> = MockedRequest<DefaultRequestBody>> extends RequestHandler<RestHandlerInfo, RequestType, ParsedRestRequest, RestRequest<
|
|
46
|
-
constructor(method:
|
|
43
|
+
export declare class RestHandler<RequestType extends MockedRequest<DefaultRequestBody> = MockedRequest<DefaultRequestBody>> extends RequestHandler<RestHandlerInfo, RequestType, ParsedRestRequest, RestRequest<RequestType extends MockedRequest<infer RequestBodyType> ? RequestBodyType : any, PathParams>> {
|
|
44
|
+
constructor(method: RestHandlerMethod, path: Path, resolver: ResponseResolver<any, any>);
|
|
47
45
|
private checkRedundantQueryParameters;
|
|
48
46
|
parse(request: RequestType, resolutionContext?: ResponseResolutionContext): Match;
|
|
49
|
-
protected getPublicRequest(request: RequestType, parsedResult: ParsedRestRequest): RestRequest<any,
|
|
47
|
+
protected getPublicRequest(request: RequestType, parsedResult: ParsedRestRequest): RestRequest<any, PathParams>;
|
|
50
48
|
predicate(request: RequestType, parsedResult: ParsedRestRequest): boolean;
|
|
51
49
|
log(request: RequestType, response: SerializedResponse): void;
|
|
52
50
|
}
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,16 +1,26 @@
|
|
|
1
1
|
import * as context from './context';
|
|
2
2
|
export { context };
|
|
3
3
|
export { setupWorker } from './setupWorker/setupWorker';
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export { RequestHandler, MockedRequest, ResponseResolver, ResponseResolverReturnType, AsyncResponseResolverReturnType, DefaultRequestBody, DefaultRequestMultipartBody, defaultContext, } from './handlers/RequestHandler';
|
|
4
|
+
export { response, defaultResponse, createResponseComposition, } from './response';
|
|
5
|
+
export { RequestHandler, defaultContext } from './handlers/RequestHandler';
|
|
7
6
|
export { rest } from './rest';
|
|
8
|
-
export { RestHandler, RESTMethods,
|
|
7
|
+
export { RestHandler, RESTMethods, restContext } from './handlers/RestHandler';
|
|
9
8
|
export { graphql } from './graphql';
|
|
10
|
-
export { GraphQLHandler,
|
|
9
|
+
export { GraphQLHandler, graphqlContext } from './handlers/GraphQLHandler';
|
|
11
10
|
export { matchRequestUrl } from './utils/matching/matchRequestUrl';
|
|
12
11
|
export { compose } from './utils/internal/compose';
|
|
13
|
-
export { DelayMode } from './context/delay';
|
|
14
|
-
export { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest';
|
|
15
12
|
export * from './utils/handleRequest';
|
|
16
13
|
export * from './utils/request/parseIsomorphicRequest';
|
|
14
|
+
export { cleanUrl } from './utils/url/cleanUrl';
|
|
15
|
+
/**
|
|
16
|
+
* Type definitions.
|
|
17
|
+
*/
|
|
18
|
+
export type { SetupWorkerApi, StartOptions } from './setupWorker/glossary';
|
|
19
|
+
export type { SharedOptions } from './sharedOptions';
|
|
20
|
+
export type { MockedRequest, ResponseResolver, ResponseResolverReturnType, AsyncResponseResolverReturnType, DefaultRequestBody, DefaultRequestMultipartBody, } from './handlers/RequestHandler';
|
|
21
|
+
export type { MockedResponse, ResponseTransformer, ResponseComposition, ResponseCompositionOptions, ResponseFunction, } from './response';
|
|
22
|
+
export type { RestContext, RequestQuery, RestRequest, ParsedRestRequest, } from './handlers/RestHandler';
|
|
23
|
+
export type { GraphQLContext, GraphQLVariables, GraphQLRequest, GraphQLRequestBody, GraphQLJsonRequestBody, } from './handlers/GraphQLHandler';
|
|
24
|
+
export type { Path, PathParams, Match } from './utils/matching/matchRequestUrl';
|
|
25
|
+
export type { DelayMode } from './context/delay';
|
|
26
|
+
export { ParsedGraphQLRequest } from './utils/internal/parseGraphQLRequest';
|
|
@@ -1,15 +1,8 @@
|
|
|
1
1
|
import { PartialDeep } from 'type-fest';
|
|
2
2
|
import { IsomorphicResponse } from '@mswjs/interceptors';
|
|
3
|
-
import {
|
|
4
|
-
import { SharedOptions } from '../sharedOptions';
|
|
5
|
-
export
|
|
6
|
-
'request:start': (request: MockedRequest) => void;
|
|
7
|
-
'request:match': (request: MockedRequest) => void;
|
|
8
|
-
'request:unhandled': (request: MockedRequest) => void;
|
|
9
|
-
'request:end': (request: MockedRequest) => void;
|
|
10
|
-
'response:mocked': (response: IsomorphicResponse, requestId: string) => void;
|
|
11
|
-
'response:bypass': (response: IsomorphicResponse, requestId: string) => void;
|
|
12
|
-
}
|
|
3
|
+
import { RequestHandler } from '../handlers/RequestHandler';
|
|
4
|
+
import { LifeCycleEventEmitter, LifeCycleEventsMap, SharedOptions } from '../sharedOptions';
|
|
5
|
+
export declare type ServerLifecycleEventsMap = LifeCycleEventsMap<IsomorphicResponse>;
|
|
13
6
|
export interface SetupServerApi {
|
|
14
7
|
/**
|
|
15
8
|
* Starts requests interception based on the previously provided request handlers.
|
|
@@ -41,8 +34,5 @@ export interface SetupServerApi {
|
|
|
41
34
|
* @see {@link https://mswjs.io/docs/api/setup-server/print-handlers `server.print-handlers()`}
|
|
42
35
|
*/
|
|
43
36
|
printHandlers(): void;
|
|
44
|
-
|
|
45
|
-
* Attaches a listener to one of the life-cycle events.
|
|
46
|
-
*/
|
|
47
|
-
on<EventType extends keyof ServerLifecycleEventsMap>(eventType: EventType, listener: ServerLifecycleEventsMap[EventType]): void;
|
|
37
|
+
events: LifeCycleEventEmitter<ServerLifecycleEventsMap>;
|
|
48
38
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { setupServer } from './setupServer';
|
|
2
|
-
export { SetupServerApi } from './glossary';
|
|
2
|
+
export type { SetupServerApi } from './glossary';
|
package/lib/types/rest.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { Path } from 'node-match-path';
|
|
2
1
|
import { DefaultRequestBody, ResponseResolver } from './handlers/RequestHandler';
|
|
3
|
-
import { RestContext, RestHandler, RestRequest
|
|
2
|
+
import { RestContext, RestHandler, RestRequest } from './handlers/RestHandler';
|
|
3
|
+
import { Path, PathParams } from './utils/matching/matchRequestUrl';
|
|
4
4
|
export declare const rest: {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
all: <RequestBodyType extends DefaultRequestBody = DefaultRequestBody, Params extends PathParams = PathParams, ResponseBody extends DefaultRequestBody = DefaultRequestBody>(path: Path, resolver: ResponseResolver<RestRequest<RequestBodyType, Params>, RestContext, ResponseBody>) => RestHandler<import("./handlers/RequestHandler").MockedRequest<DefaultRequestBody>>;
|
|
6
|
+
head: <RequestBodyType_1 extends DefaultRequestBody = DefaultRequestBody, Params_1 extends PathParams = PathParams, ResponseBody_1 extends DefaultRequestBody = DefaultRequestBody>(path: Path, resolver: ResponseResolver<RestRequest<never, Params_1>, RestContext, ResponseBody_1>) => RestHandler<import("./handlers/RequestHandler").MockedRequest<DefaultRequestBody>>;
|
|
7
|
+
get: <RequestBodyType_2 extends DefaultRequestBody = DefaultRequestBody, Params_2 extends PathParams = PathParams, ResponseBody_2 extends DefaultRequestBody = DefaultRequestBody>(path: Path, resolver: ResponseResolver<RestRequest<never, Params_2>, RestContext, ResponseBody_2>) => RestHandler<import("./handlers/RequestHandler").MockedRequest<DefaultRequestBody>>;
|
|
8
|
+
post: <RequestBodyType_3 extends DefaultRequestBody = DefaultRequestBody, Params_3 extends PathParams = PathParams, ResponseBody_3 extends DefaultRequestBody = DefaultRequestBody>(path: Path, resolver: ResponseResolver<RestRequest<RequestBodyType_3, Params_3>, RestContext, ResponseBody_3>) => RestHandler<import("./handlers/RequestHandler").MockedRequest<DefaultRequestBody>>;
|
|
9
|
+
put: <RequestBodyType_4 extends DefaultRequestBody = DefaultRequestBody, Params_4 extends PathParams = PathParams, ResponseBody_4 extends DefaultRequestBody = DefaultRequestBody>(path: Path, resolver: ResponseResolver<RestRequest<RequestBodyType_4, Params_4>, RestContext, ResponseBody_4>) => RestHandler<import("./handlers/RequestHandler").MockedRequest<DefaultRequestBody>>;
|
|
10
|
+
delete: <RequestBodyType_5 extends DefaultRequestBody = DefaultRequestBody, Params_5 extends PathParams = PathParams, ResponseBody_5 extends DefaultRequestBody = DefaultRequestBody>(path: Path, resolver: ResponseResolver<RestRequest<RequestBodyType_5, Params_5>, RestContext, ResponseBody_5>) => RestHandler<import("./handlers/RequestHandler").MockedRequest<DefaultRequestBody>>;
|
|
11
|
+
patch: <RequestBodyType_6 extends DefaultRequestBody = DefaultRequestBody, Params_6 extends PathParams = PathParams, ResponseBody_6 extends DefaultRequestBody = DefaultRequestBody>(path: Path, resolver: ResponseResolver<RestRequest<RequestBodyType_6, Params_6>, RestContext, ResponseBody_6>) => RestHandler<import("./handlers/RequestHandler").MockedRequest<DefaultRequestBody>>;
|
|
12
|
+
options: <RequestBodyType_7 extends DefaultRequestBody = DefaultRequestBody, Params_7 extends PathParams = PathParams, ResponseBody_7 extends DefaultRequestBody = DefaultRequestBody>(path: Path, resolver: ResponseResolver<RestRequest<RequestBodyType_7, Params_7>, RestContext, ResponseBody_7>) => RestHandler<import("./handlers/RequestHandler").MockedRequest<DefaultRequestBody>>;
|
|
12
13
|
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Path } from 'node-match-path';
|
|
2
|
-
import { PartialDeep } from 'type-fest';
|
|
3
1
|
import { FlatHeadersObject } from 'headers-utils';
|
|
4
2
|
import { StrictEventEmitter } from 'strict-event-emitter';
|
|
5
|
-
import { SharedOptions } from '../sharedOptions';
|
|
3
|
+
import { LifeCycleEventEmitter, LifeCycleEventsMap, SharedOptions } from '../sharedOptions';
|
|
6
4
|
import { ServiceWorkerMessage } from '../utils/createBroadcastChannel';
|
|
7
|
-
import {
|
|
5
|
+
import { RequestHandler } from '../handlers/RequestHandler';
|
|
8
6
|
import { InterceptorApi } from '@mswjs/interceptors';
|
|
7
|
+
import { Path } from '../utils/matching/matchRequestUrl';
|
|
8
|
+
import { RequiredDeep } from '../typeUtils';
|
|
9
9
|
export declare type ResolvedPath = Path | URL;
|
|
10
10
|
declare type RequestWithoutMethods = Omit<Request, 'text' | 'body' | 'json' | 'blob' | 'arrayBuffer' | 'formData' | 'clone' | 'signal' | 'isHistoryNavigation' | 'isReloadNavigation'>;
|
|
11
11
|
/**
|
|
@@ -45,16 +45,9 @@ export declare type ServiceWorkerOutgoingEventTypes = 'MOCK_ACTIVATE' | 'MOCK_DE
|
|
|
45
45
|
* only as a part of a single `fetch` event handler.
|
|
46
46
|
*/
|
|
47
47
|
export declare type ServiceWorkerFetchEventTypes = 'MOCK_SUCCESS' | 'MOCK_NOT_FOUND' | 'NETWORK_ERROR' | 'INTERNAL_ERROR';
|
|
48
|
-
export
|
|
49
|
-
'request:start': (request: MockedRequest) => void;
|
|
50
|
-
'request:match': (request: MockedRequest) => void;
|
|
51
|
-
'request:unhandled': (request: MockedRequest) => void;
|
|
52
|
-
'request:end': (request: MockedRequest) => void;
|
|
53
|
-
'response:mocked': (response: Response, requestId: string) => void;
|
|
54
|
-
'response:bypass': (response: Response, requestId: string) => void;
|
|
55
|
-
}
|
|
48
|
+
export declare type WorkerLifecycleEventsMap = LifeCycleEventsMap<Response>;
|
|
56
49
|
export interface SetupWorkerInternalContext {
|
|
57
|
-
startOptions?: StartOptions
|
|
50
|
+
startOptions?: RequiredDeep<StartOptions>;
|
|
58
51
|
worker: ServiceWorker | null;
|
|
59
52
|
registration: ServiceWorkerRegistration | null;
|
|
60
53
|
requestHandlers: RequestHandler[];
|
|
@@ -72,7 +65,7 @@ export interface SetupWorkerInternalContext {
|
|
|
72
65
|
* Adds an event listener on the given target.
|
|
73
66
|
* Returns a clean-up function that removes that listener.
|
|
74
67
|
*/
|
|
75
|
-
addListener<
|
|
68
|
+
addListener<EventType extends Event = Event>(target: EventTarget, eventType: string, listener: (event: EventType) => void): () => void;
|
|
76
69
|
/**
|
|
77
70
|
* Removes all currently attached listeners.
|
|
78
71
|
*/
|
|
@@ -94,25 +87,25 @@ export interface StartOptions extends SharedOptions {
|
|
|
94
87
|
/**
|
|
95
88
|
* Service Worker instance options.
|
|
96
89
|
*/
|
|
97
|
-
serviceWorker
|
|
98
|
-
url
|
|
99
|
-
options
|
|
90
|
+
serviceWorker?: {
|
|
91
|
+
url?: string;
|
|
92
|
+
options?: RegistrationOptions;
|
|
100
93
|
};
|
|
101
94
|
/**
|
|
102
95
|
* Disables the logging of captured requests
|
|
103
96
|
* into browser's console.
|
|
104
97
|
*/
|
|
105
|
-
quiet
|
|
98
|
+
quiet?: boolean;
|
|
106
99
|
/**
|
|
107
100
|
* Defers any network requests until the Service Worker
|
|
108
101
|
* instance is ready. Defaults to `true`.
|
|
109
102
|
*/
|
|
110
|
-
waitUntilReady
|
|
103
|
+
waitUntilReady?: boolean;
|
|
111
104
|
/**
|
|
112
105
|
* A custom lookup function to find a Mock Service Worker in the list
|
|
113
106
|
* of all registered Service Workers on the page.
|
|
114
107
|
*/
|
|
115
|
-
findWorker
|
|
108
|
+
findWorker?: FindWorker;
|
|
116
109
|
}
|
|
117
110
|
export interface SerializedResponse<BodyType = any> {
|
|
118
111
|
status: number;
|
|
@@ -121,14 +114,14 @@ export interface SerializedResponse<BodyType = any> {
|
|
|
121
114
|
body: BodyType;
|
|
122
115
|
}
|
|
123
116
|
export declare type StartReturnType = Promise<ServiceWorkerRegistration | undefined>;
|
|
124
|
-
export declare type StartHandler = (options: StartOptions
|
|
117
|
+
export declare type StartHandler = (options: RequiredDeep<StartOptions>, initialOptions: StartOptions) => StartReturnType;
|
|
125
118
|
export declare type StopHandler = () => void;
|
|
126
119
|
export interface SetupWorkerApi {
|
|
127
120
|
/**
|
|
128
121
|
* Registers and activates the mock Service Worker.
|
|
129
122
|
* @see {@link https://mswjs.io/docs/api/setup-worker/start `worker.start()`}
|
|
130
123
|
*/
|
|
131
|
-
start: (options?:
|
|
124
|
+
start: (options?: StartOptions) => StartReturnType;
|
|
132
125
|
/**
|
|
133
126
|
* Stops requests interception for the current client.
|
|
134
127
|
* @see {@link https://mswjs.io/docs/api/setup-worker/stop `worker.stop()`}
|
|
@@ -156,9 +149,6 @@ export interface SetupWorkerApi {
|
|
|
156
149
|
* @see {@link https://mswjs.io/docs/api/setup-worker/print-handlers `worker.printHandlers()`}
|
|
157
150
|
*/
|
|
158
151
|
printHandlers: () => void;
|
|
159
|
-
|
|
160
|
-
* Attaches a listener to one of the life-cycle events.
|
|
161
|
-
*/
|
|
162
|
-
on<EventType extends keyof WorkerLifecycleEventsMap>(eventType: EventType, listener: WorkerLifecycleEventsMap[EventType]): void;
|
|
152
|
+
events: LifeCycleEventEmitter<WorkerLifecycleEventsMap>;
|
|
163
153
|
}
|
|
164
154
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RequiredDeep } from '../../../typeUtils';
|
|
2
2
|
import { SetupWorkerApi, SetupWorkerInternalContext, StartHandler, StartOptions } from '../../glossary';
|
|
3
|
-
export declare const DEFAULT_START_OPTIONS: StartOptions
|
|
3
|
+
export declare const DEFAULT_START_OPTIONS: RequiredDeep<StartOptions>;
|
|
4
4
|
/**
|
|
5
5
|
* Returns resolved worker start options, merging the default options
|
|
6
6
|
* with the given custom options.
|
|
7
7
|
*/
|
|
8
|
-
export declare function resolveStartOptions(initialOptions?:
|
|
8
|
+
export declare function resolveStartOptions(initialOptions?: StartOptions): RequiredDeep<StartOptions>;
|
|
9
9
|
export declare function prepareStartHandler(handler: StartHandler, context: SetupWorkerInternalContext): SetupWorkerApi['start'];
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { StrictEventEmitter } from 'strict-event-emitter';
|
|
2
|
+
import { MockedRequest } from './handlers/RequestHandler';
|
|
1
3
|
import { UnhandledRequestStrategy } from './utils/request/onUnhandledRequest';
|
|
2
4
|
export interface SharedOptions {
|
|
3
5
|
/**
|
|
@@ -8,5 +10,14 @@ export interface SharedOptions {
|
|
|
8
10
|
* @example worker.start({ onUnhandledRequest: 'warn' })
|
|
9
11
|
* @example server.listen({ onUnhandledRequest: 'error' })
|
|
10
12
|
*/
|
|
11
|
-
onUnhandledRequest
|
|
13
|
+
onUnhandledRequest?: UnhandledRequestStrategy;
|
|
12
14
|
}
|
|
15
|
+
export interface LifeCycleEventsMap<ResponseType> {
|
|
16
|
+
'request:start': (request: MockedRequest) => void;
|
|
17
|
+
'request:match': (request: MockedRequest) => void;
|
|
18
|
+
'request:unhandled': (request: MockedRequest) => void;
|
|
19
|
+
'request:end': (request: MockedRequest) => void;
|
|
20
|
+
'response:mocked': (response: ResponseType, requestId: string) => void;
|
|
21
|
+
'response:bypass': (response: ResponseType, requestId: string) => void;
|
|
22
|
+
}
|
|
23
|
+
export declare type LifeCycleEventEmitter<ResponseType> = Pick<StrictEventEmitter<ResponseType>, 'on' | 'removeListener' | 'removeAllListeners'>;
|
package/lib/types/typeUtils.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { ResponseTransformer } from './response';
|
|
1
2
|
declare type Fn = (...arg: any[]) => any;
|
|
2
|
-
export declare type
|
|
3
|
-
[
|
|
4
|
-
} :
|
|
3
|
+
export declare type RequiredDeep<Type, U extends Record<string, unknown> | Fn | undefined = undefined> = Type extends Fn ? Type : Type extends Record<string, any> ? {
|
|
4
|
+
[Key in keyof Type]-?: NonNullable<Type[Key]> extends NonNullable<U> ? NonNullable<Type[Key]> : RequiredDeep<NonNullable<Type[Key]>, U>;
|
|
5
|
+
} : Type;
|
|
6
|
+
export declare type GraphQLPayloadContext<QueryType extends Record<string, unknown>> = (payload: QueryType) => ResponseTransformer;
|
|
5
7
|
export {};
|
|
@@ -3,7 +3,7 @@ import { MockedRequest, RequestHandler } from '../handlers/RequestHandler';
|
|
|
3
3
|
import { ServerLifecycleEventsMap } from '../node/glossary';
|
|
4
4
|
import { MockedResponse } from '../response';
|
|
5
5
|
import { SharedOptions } from '../sharedOptions';
|
|
6
|
-
import {
|
|
6
|
+
import { RequiredDeep } from '../typeUtils';
|
|
7
7
|
import { ResponseLookupResult } from './getResponse';
|
|
8
8
|
export interface HandleRequestOptions<ResponseType> {
|
|
9
9
|
/**
|
|
@@ -24,11 +24,11 @@ export interface HandleRequestOptions<ResponseType> {
|
|
|
24
24
|
/**
|
|
25
25
|
* Invoked when the mocked response is ready to be sent.
|
|
26
26
|
*/
|
|
27
|
-
onMockedResponse?(response: ResponseType, handler:
|
|
27
|
+
onMockedResponse?(response: ResponseType, handler: RequiredDeep<ResponseLookupResult>): void;
|
|
28
28
|
/**
|
|
29
29
|
* Invoked when the mocked response is sent.
|
|
30
30
|
* Respects the response delay duration.
|
|
31
31
|
*/
|
|
32
|
-
onMockedResponseSent?(response: ResponseType, handler:
|
|
32
|
+
onMockedResponseSent?(response: ResponseType, handler: RequiredDeep<ResponseLookupResult>): void;
|
|
33
33
|
}
|
|
34
|
-
export declare function handleRequest<ResponseType extends Record<string, any> = MockedResponse<string>>(request: MockedRequest, handlers: RequestHandler[], options: SharedOptions
|
|
34
|
+
export declare function handleRequest<ResponseType extends Record<string, any> = MockedResponse<string>>(request: MockedRequest, handlers: RequestHandler[], options: RequiredDeep<SharedOptions>, emitter: StrictEventEmitter<ServerLifecycleEventsMap>, handleRequestOptions?: HandleRequestOptions<ResponseType>): Promise<ResponseType | undefined>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Parses a given
|
|
2
|
+
* Parses a given value into a JSON.
|
|
3
3
|
* Does not throw an exception on an invalid JSON string.
|
|
4
4
|
*/
|
|
5
|
-
export declare function jsonParse<
|
|
5
|
+
export declare function jsonParse<ValueType extends Record<string, any>>(value: any): ValueType | undefined;
|
|
@@ -3,7 +3,7 @@ import { SerializedResponse } from '../../setupWorker/glossary';
|
|
|
3
3
|
* Formats a mocked response for introspection in the browser's console.
|
|
4
4
|
*/
|
|
5
5
|
export declare function prepareResponse(res: SerializedResponse<any>): {
|
|
6
|
-
body: string | Record<string, any> | undefined;
|
|
6
|
+
body: string | number | Record<string, any> | undefined;
|
|
7
7
|
status: number;
|
|
8
8
|
statusText: string;
|
|
9
9
|
headers: import("headers-utils").FlatHeadersObject;
|
|
@@ -1,5 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
export declare type Path = string | RegExp;
|
|
2
|
+
export declare type PathParams = Record<string, string | string[]>;
|
|
3
|
+
export interface Match {
|
|
4
|
+
matches: boolean;
|
|
5
|
+
params?: PathParams;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Coerce a path supported by MSW into a path
|
|
9
|
+
* supported by "path-to-regexp".
|
|
10
|
+
*/
|
|
11
|
+
export declare function coercePath(path: string): string;
|
|
2
12
|
/**
|
|
3
13
|
* Returns the result of matching given request URL against a mask.
|
|
4
14
|
*/
|
|
5
|
-
export declare function matchRequestUrl(url: URL, path: Path, baseUrl?: string):
|
|
15
|
+
export declare function matchRequestUrl(url: URL, path: Path, baseUrl?: string): Match;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MockedRequest } from '../../handlers/RequestHandler';
|
|
2
2
|
/**
|
|
3
|
-
* Parses a given request/response body based on the
|
|
3
|
+
* Parses a given request/response body based on the "Content-Type" header.
|
|
4
4
|
*/
|
|
5
|
-
export declare function parseBody(body?: MockedRequest['body'], headers?: Headers): string | Record<string, any> | undefined;
|
|
5
|
+
export declare function parseBody(body?: MockedRequest['body'], headers?: Headers): string | number | Record<string, any> | undefined;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RestRequest } from '../../handlers/RestHandler';
|
|
2
2
|
import { ServiceWorkerIncomingRequest } from '../../setupWorker/glossary';
|
|
3
3
|
/**
|
|
4
4
|
* Converts a given request received from the Service Worker
|
|
5
5
|
* into a `MockedRequest` instance.
|
|
6
6
|
*/
|
|
7
|
-
export declare function parseWorkerRequest(rawRequest: ServiceWorkerIncomingRequest):
|
|
7
|
+
export declare function parseWorkerRequest(rawRequest: ServiceWorkerIncomingRequest): RestRequest;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { InterceptorApi } from '@mswjs/interceptors';
|
|
2
2
|
import { SetupWorkerInternalContext, StartOptions } from '../../setupWorker/glossary';
|
|
3
|
-
|
|
3
|
+
import { RequiredDeep } from '../../typeUtils';
|
|
4
|
+
export declare function createFallbackRequestListener(context: SetupWorkerInternalContext, options: RequiredDeep<StartOptions>): InterceptorApi;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { StartOptions, SetupWorkerInternalContext, ServiceWorkerIncomingEventsMap } from '../../setupWorker/glossary';
|
|
2
2
|
import { ServiceWorkerMessage } from '../createBroadcastChannel';
|
|
3
|
-
|
|
3
|
+
import { RequiredDeep } from '../../typeUtils';
|
|
4
|
+
export declare const createRequestListener: (context: SetupWorkerInternalContext, options: RequiredDeep<StartOptions>) => (event: MessageEvent, message: ServiceWorkerMessage<'REQUEST', ServiceWorkerIncomingEventsMap['REQUEST']>) => Promise<void>;
|