msw 0.20.5 → 0.21.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/README.md +1 -1
- package/lib/esm/fetch-deps.js +26 -23
- package/lib/esm/graphql.js +92 -79
- package/lib/esm/index.js +90 -44
- package/lib/esm/{matchRequest-deps.js → matchRequestUrl-deps.js} +29 -17
- package/lib/esm/mockServiceWorker.js +8 -1
- package/lib/esm/rest-deps.js +27 -18
- package/lib/esm/rest.js +1 -1
- package/lib/esm/xml-deps.js +3 -3
- package/lib/types/LiveStorage.d.ts +17 -0
- package/lib/types/context/body.d.ts +2 -2
- package/lib/types/context/errors.d.ts +3 -1
- package/lib/types/context/fetch.d.ts +2 -2
- package/lib/types/context/json.d.ts +5 -3
- package/lib/types/context/text.d.ts +2 -2
- package/lib/types/context/xml.d.ts +2 -2
- package/lib/types/graphql.d.ts +8 -10
- package/lib/types/index.d.ts +3 -3
- package/lib/types/native/index.d.ts +7 -1
- package/lib/types/node/createSetupServer.d.ts +29 -0
- package/lib/types/node/setupServer.d.ts +4 -24
- package/lib/types/response.d.ts +10 -7
- package/lib/types/rest.d.ts +158 -16
- package/lib/types/setupWorker/glossary.d.ts +14 -4
- package/lib/types/setupWorker/start/utils/getWorkerByRegistration.d.ts +2 -1
- package/lib/types/setupWorker/start/utils/getWorkerInstance.d.ts +2 -2
- package/lib/types/sharedOptions.d.ts +1 -1
- package/lib/types/utils/getResponse.d.ts +2 -2
- package/lib/types/utils/handlers/requestHandler.d.ts +74 -0
- package/lib/types/utils/{requestHandlerUtils.d.ts → handlers/requestHandlerUtils.d.ts} +2 -2
- package/lib/types/utils/{isNodeProcess.d.ts → internal/isNodeProcess.d.ts} +1 -0
- package/lib/types/utils/{isStringEqual.d.ts → internal/isStringEqual.d.ts} +0 -0
- package/lib/types/utils/{jsonParse.d.ts → internal/jsonParse.d.ts} +0 -0
- package/lib/types/utils/internal/mergeRight.d.ts +5 -0
- package/lib/types/utils/{logger → logging}/getStatusCodeColor.d.ts +0 -0
- package/lib/types/utils/{logger → logging}/getTimestamp.d.ts +0 -0
- package/lib/types/utils/{logger → logging}/prepareRequest.d.ts +3 -3
- package/lib/types/utils/{logger → logging}/prepareResponse.d.ts +2 -2
- package/lib/types/utils/matching/{matchRequest.d.ts → matchRequestUrl.d.ts} +0 -0
- package/lib/types/utils/request/getPublicUrlFromRequest.d.ts +6 -0
- package/lib/types/utils/request/getRequestCookies.d.ts +1 -1
- package/lib/types/{onUnhandledRequest.d.ts → utils/request/onUnhandledRequest.d.ts} +1 -1
- package/lib/types/utils/request/parseBody.d.ts +5 -0
- package/lib/types/utils/url/getAbsoluteUrl.d.ts +6 -0
- package/lib/types/utils/{getAbsoluteWorkerUrl.d.ts → url/getAbsoluteWorkerUrl.d.ts} +0 -0
- package/lib/types/utils/url/getUrlByMask.d.ts +5 -0
- package/lib/umd/index.js +696 -613
- package/lib/umd/mockServiceWorker.js +8 -1
- package/native/index.js +1508 -133
- package/node/context/delay.d.ts +11 -0
- package/node/context/fetch.d.ts +8 -0
- package/node/context/set.d.ts +2 -0
- package/node/context/status.d.ts +2 -0
- package/node/index.js +1507 -133
- package/node/node/createSetupServer.d.ts +29 -0
- package/node/node/index.d.ts +5 -0
- package/node/node/setupServer.d.ts +7 -0
- package/node/response.d.ts +25 -0
- package/node/utils/NetworkError.d.ts +3 -0
- package/node/utils/getResponse.d.ts +14 -0
- package/{lib/types → node/utils}/handlers/requestHandler.d.ts +13 -12
- package/node/utils/handlers/requestHandlerUtils.d.ts +4 -0
- package/node/utils/internal/compose.d.ts +5 -0
- package/node/utils/internal/isNodeProcess.d.ts +5 -0
- package/node/utils/internal/jsonParse.d.ts +5 -0
- package/node/utils/request/getPublicUrlFromRequest.d.ts +6 -0
- package/node/utils/request/onUnhandledRequest.d.ts +5 -0
- package/node/utils/request/parseBody.d.ts +5 -0
- package/package.json +34 -29
- package/lib/types/utils/getJsonBody.d.ts +0 -5
- package/lib/types/utils/request/parseRequestBody.d.ts +0 -2
- package/lib/types/utils/resolveMask.d.ts +0 -6
- package/lib/types/utils/resolveRelativeUrl.d.ts +0 -6
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Interceptor } from 'node-request-interceptor';
|
|
2
|
+
import { RequestHandlersList } from '../setupWorker/glossary';
|
|
3
|
+
import { SharedOptions } from '../sharedOptions';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a `setupServer` API using given request interceptors.
|
|
6
|
+
* Useful to generate identical API using different patches to request issuing modules.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createSetupServer(...interceptors: Interceptor[]): (...requestHandlers: RequestHandlersList) => {
|
|
9
|
+
/**
|
|
10
|
+
* Enables requests interception based on the previously provided mock definition.
|
|
11
|
+
*/
|
|
12
|
+
listen(options?: SharedOptions | undefined): void;
|
|
13
|
+
/**
|
|
14
|
+
* Prepends given request handlers to the list of existing handlers.
|
|
15
|
+
*/
|
|
16
|
+
use(...handlers: RequestHandlersList): void;
|
|
17
|
+
/**
|
|
18
|
+
* Marks all request handlers that respond using `res.once()` as unused.
|
|
19
|
+
*/
|
|
20
|
+
restoreHandlers(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Resets request handlers to the initial list given to the `setupServer` call, or to the explicit next request handlers list, if given.
|
|
23
|
+
*/
|
|
24
|
+
resetHandlers(...nextHandlers: RequestHandlersList): void;
|
|
25
|
+
/**
|
|
26
|
+
* Stops requests interception by restoring all augmented modules.
|
|
27
|
+
*/
|
|
28
|
+
close(): void;
|
|
29
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const setupServer: (...requestHandlers: import("../setupWorker/glossary").RequestHandlersList) => {
|
|
2
|
+
listen(options?: import("../sharedOptions").SharedOptions | undefined): void;
|
|
3
|
+
use(...handlers: import("../setupWorker/glossary").RequestHandlersList): void;
|
|
4
|
+
restoreHandlers(): void;
|
|
5
|
+
resetHandlers(...nextHandlers: import("../setupWorker/glossary").RequestHandlersList): void;
|
|
6
|
+
close(): void;
|
|
7
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Headers } from 'headers-utils';
|
|
2
|
+
export interface MockedResponse<BodyType = any> {
|
|
3
|
+
body: BodyType;
|
|
4
|
+
status: number;
|
|
5
|
+
statusText: string;
|
|
6
|
+
headers: Headers;
|
|
7
|
+
once: boolean;
|
|
8
|
+
delay?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare type ResponseTransformer<BodyType = any> = (res: MockedResponse<BodyType>) => MockedResponse<BodyType>;
|
|
11
|
+
declare type ResponseFunction<BodyType = any> = (...transformers: ResponseTransformer<BodyType>[]) => MockedResponse<BodyType>;
|
|
12
|
+
export declare type ResponseComposition<BodyType = any> = ResponseFunction<BodyType> & {
|
|
13
|
+
/**
|
|
14
|
+
* Respond using a given mocked response to the first captured request.
|
|
15
|
+
* Does not affect any subsequent captured requests.
|
|
16
|
+
*/
|
|
17
|
+
once: ResponseFunction<BodyType>;
|
|
18
|
+
networkError: (message: string) => void;
|
|
19
|
+
};
|
|
20
|
+
export declare const defaultResponse: Omit<MockedResponse, 'headers'>;
|
|
21
|
+
export declare const response: ResponseFunction<any> & {
|
|
22
|
+
once: ResponseFunction<any>;
|
|
23
|
+
networkError(message: string): never;
|
|
24
|
+
};
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RequestHandlersList } from '../setupWorker/glossary';
|
|
2
|
+
import { RequestHandler, MockedRequest } from './handlers/requestHandler';
|
|
3
|
+
import { MockedResponse } from '../response';
|
|
4
|
+
interface ResponsePayload {
|
|
5
|
+
response: MockedResponse | null;
|
|
6
|
+
handler: RequestHandler<any, any> | null;
|
|
7
|
+
publicRequest?: any;
|
|
8
|
+
parsedRequest?: any;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Returns a mocked response for a given request using following request handlers.
|
|
12
|
+
*/
|
|
13
|
+
export declare const getResponse: <R extends MockedRequest<import("./handlers/requestHandler").DefaultRequestBodyType>, H extends RequestHandlersList>(req: R, handlers: H) => Promise<ResponsePayload>;
|
|
14
|
+
export {};
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { Headers } from 'headers-utils';
|
|
2
|
-
import { ResponseWithSerializedHeaders } from '
|
|
3
|
-
import { ResponseComposition, MockedResponse } from '
|
|
4
|
-
import { set } from '
|
|
2
|
+
import { ResponseWithSerializedHeaders } from '../../setupWorker/glossary';
|
|
3
|
+
import { ResponseComposition, MockedResponse } from '../../response';
|
|
4
|
+
import { set } from '../../context/set';
|
|
5
5
|
export declare const defaultContext: {
|
|
6
|
-
status: (statusCode: number, statusText?: string | undefined) => import("
|
|
6
|
+
status: (statusCode: number, statusText?: string | undefined) => import("../../response").ResponseTransformer<any>;
|
|
7
7
|
set: typeof set;
|
|
8
|
-
delay: (durationMs?: number | undefined) => import("
|
|
9
|
-
fetch:
|
|
8
|
+
delay: (durationMs?: number | undefined) => import("../../response").ResponseTransformer<any>;
|
|
9
|
+
fetch: (input: string | MockedRequest<DefaultRequestBodyType>, requestInit?: RequestInit) => Promise<Response>;
|
|
10
10
|
};
|
|
11
|
-
export
|
|
11
|
+
export declare type DefaultRequestBodyType = Record<string, any> | string | undefined;
|
|
12
|
+
export interface MockedRequest<BodyType = DefaultRequestBodyType> {
|
|
12
13
|
url: URL;
|
|
13
14
|
method: Request['method'];
|
|
14
15
|
headers: Headers;
|
|
@@ -22,7 +23,7 @@ export interface MockedRequest {
|
|
|
22
23
|
redirect: Request['redirect'];
|
|
23
24
|
referrer: Request['referrer'];
|
|
24
25
|
referrerPolicy: Request['referrerPolicy'];
|
|
25
|
-
body:
|
|
26
|
+
body: BodyType;
|
|
26
27
|
bodyUsed: Request['bodyUsed'];
|
|
27
28
|
params: RequestParams;
|
|
28
29
|
}
|
|
@@ -34,8 +35,8 @@ export declare type RequestParams = {
|
|
|
34
35
|
};
|
|
35
36
|
export declare type ResponseResolverReturnType<R> = R | undefined | void;
|
|
36
37
|
export declare type AsyncResponseResolverReturnType<R> = Promise<ResponseResolverReturnType<R>> | ResponseResolverReturnType<R>;
|
|
37
|
-
export declare type ResponseResolver<RequestType = MockedRequest, ContextType = typeof defaultContext> = (req: RequestType, res: ResponseComposition
|
|
38
|
-
export interface RequestHandler<RequestType = MockedRequest, ContextType = typeof defaultContext, ParsedRequest = any, PublicRequest = RequestType> {
|
|
38
|
+
export declare type ResponseResolver<RequestType = MockedRequest, ContextType = typeof defaultContext, BodyType = any> = (req: RequestType, res: ResponseComposition<BodyType>, context: ContextType) => AsyncResponseResolverReturnType<MockedResponse<BodyType>>;
|
|
39
|
+
export interface RequestHandler<RequestType = MockedRequest, ContextType = typeof defaultContext, ParsedRequest = any, PublicRequest = RequestType, ResponseBodyType = any> {
|
|
39
40
|
/**
|
|
40
41
|
* Parses a captured request to retrieve additional
|
|
41
42
|
* information meant for internal usage in the request handler.
|
|
@@ -52,7 +53,7 @@ export interface RequestHandler<RequestType = MockedRequest, ContextType = typeo
|
|
|
52
53
|
/**
|
|
53
54
|
* Returns a mocked response object to the captured request.
|
|
54
55
|
*/
|
|
55
|
-
resolver: ResponseResolver<RequestType, ContextType>;
|
|
56
|
+
resolver: ResponseResolver<RequestType, ContextType, ResponseBodyType>;
|
|
56
57
|
/**
|
|
57
58
|
* Returns a map of context utility functions available
|
|
58
59
|
* under the `ctx` argument of request handler.
|
|
@@ -62,7 +63,7 @@ export interface RequestHandler<RequestType = MockedRequest, ContextType = typeo
|
|
|
62
63
|
* Prints out a mocked request/response information
|
|
63
64
|
* upon each request capture into browser's console.
|
|
64
65
|
*/
|
|
65
|
-
log: (req: PublicRequest, res: ResponseWithSerializedHeaders, handler: RequestHandler<RequestType, ContextType>, parsedRequest: ParsedRequest) => void;
|
|
66
|
+
log: (req: PublicRequest, res: ResponseWithSerializedHeaders, handler: RequestHandler<RequestType, ContextType, ParsedRequest, PublicRequest, ResponseBodyType>, parsedRequest: ParsedRequest) => void;
|
|
66
67
|
/**
|
|
67
68
|
* Describes whether this request handler should be skipped
|
|
68
69
|
* when dealing with any subsequent matching requests.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { RequestHandlersList } from '../../setupWorker/glossary';
|
|
2
|
+
export declare function use(currentHandlers: RequestHandlersList, ...handlers: RequestHandlersList): void;
|
|
3
|
+
export declare function restoreHandlers(handlers: RequestHandlersList): void;
|
|
4
|
+
export declare function resetHandlers(initialHandlers: RequestHandlersList, ...nextHandlers: RequestHandlersList): import("./requestHandler").RequestHandler<any, any, any, any, any>[];
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MockedRequest } from '../handlers/requestHandler';
|
|
2
|
+
/**
|
|
3
|
+
* Returns a relative URL if the given request URL is relative to the current origin.
|
|
4
|
+
* Otherwise returns an absolute URL.
|
|
5
|
+
*/
|
|
6
|
+
export declare const getPublicUrlFromRequest: (request: MockedRequest) => string;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { MockedRequest } from '../handlers/requestHandler';
|
|
2
|
+
declare type UnhandledRequestCallback = (req: MockedRequest) => void;
|
|
3
|
+
export declare type OnUnhandledRequest = 'bypass' | 'warn' | 'error' | UnhandledRequestCallback;
|
|
4
|
+
export declare function onUnhandledRequest(request: MockedRequest, onUnhandledRequest?: OnUnhandledRequest): void;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { MockedRequest } from '../handlers/requestHandler';
|
|
2
|
+
/**
|
|
3
|
+
* Parses a given request/response body based on the `Content-Type` header.
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseBody(body?: MockedRequest['body'], headers?: Headers): import("../handlers/requestHandler").DefaultRequestBodyType;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "msw",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.21.3",
|
|
4
|
+
"description": "Seamless REST/GraphQL API mocking library for browser and Node.",
|
|
5
5
|
"main": "lib/umd/index.js",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
7
7
|
"types": "lib/types",
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"scripts": {
|
|
12
12
|
"start": "cross-env NODE_ENV=development rollup -c rollup.config.ts -w",
|
|
13
13
|
"clean": "rimraf lib node/**/*.js",
|
|
14
|
-
"lint": "eslint
|
|
14
|
+
"lint": "eslint \"{cli,config,src,test}/**/*.ts\"",
|
|
15
15
|
"build": "yarn clean && cross-env NODE_ENV=production rollup -c rollup.config.ts",
|
|
16
16
|
"test": "yarn test:unit && yarn test:integration",
|
|
17
17
|
"test:unit": "cross-env BABEL_ENV=test jest --runInBand",
|
|
18
|
-
"test:integration": "node --max_old_space_size=8000 node_modules
|
|
18
|
+
"test:integration": "node --max_old_space_size=8000 node_modules/jest/bin/jest.js --config=test/jest.config.js --runInBand",
|
|
19
19
|
"test:smoke": "config/scripts/smoke.sh",
|
|
20
|
-
"test:focused": "node_modules
|
|
20
|
+
"test:focused": "node node_modules/ts-node/dist/bin.js --project=test/tsconfig.json test/focusedTest.ts",
|
|
21
21
|
"prepublishOnly": "yarn lint && yarn test:unit && yarn build && yarn test:integration"
|
|
22
22
|
},
|
|
23
23
|
"husky": {
|
|
@@ -64,52 +64,57 @@
|
|
|
64
64
|
"@open-draft/until": "^1.0.3",
|
|
65
65
|
"@types/cookie": "^0.4.0",
|
|
66
66
|
"chalk": "^4.1.0",
|
|
67
|
+
"chokidar": "^3.4.2",
|
|
67
68
|
"cookie": "^0.4.1",
|
|
68
69
|
"graphql": "^15.3.0",
|
|
69
70
|
"headers-utils": "^1.2.0",
|
|
70
|
-
"node-fetch": "^2.6.
|
|
71
|
+
"node-fetch": "^2.6.1",
|
|
71
72
|
"node-match-path": "^0.4.4",
|
|
72
|
-
"node-request-interceptor": "^0.
|
|
73
|
+
"node-request-interceptor": "^0.5.1",
|
|
73
74
|
"statuses": "^2.0.0",
|
|
74
|
-
"yargs": "^
|
|
75
|
+
"yargs": "^16.0.3"
|
|
75
76
|
},
|
|
76
77
|
"devDependencies": {
|
|
77
|
-
"@babel/core": "^7.
|
|
78
|
-
"@babel/preset-env": "^7.
|
|
79
|
-
"@rollup/plugin-commonjs": "^
|
|
78
|
+
"@babel/core": "^7.11.6",
|
|
79
|
+
"@babel/preset-env": "^7.11.5",
|
|
80
|
+
"@rollup/plugin-commonjs": "^15.0.0",
|
|
80
81
|
"@rollup/plugin-inject": "^4.0.2",
|
|
81
82
|
"@rollup/plugin-json": "^4.1.0",
|
|
82
|
-
"@rollup/plugin-node-resolve": "^
|
|
83
|
+
"@rollup/plugin-node-resolve": "^9.0.0",
|
|
83
84
|
"@rollup/plugin-replace": "^2.3.3",
|
|
84
|
-
"@types/
|
|
85
|
-
"@types/
|
|
85
|
+
"@types/express": "^4.17.8",
|
|
86
|
+
"@types/fs-extra": "^9.0.1",
|
|
87
|
+
"@types/jest": "^26.0.13",
|
|
88
|
+
"@types/node": "^14.6.4",
|
|
86
89
|
"@types/node-fetch": "^2.5.7",
|
|
87
|
-
"@types/puppeteer": "^3.0.
|
|
90
|
+
"@types/puppeteer": "^3.0.2",
|
|
88
91
|
"@types/webpack-dev-server": "^3.11.0",
|
|
89
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
90
|
-
"@typescript-eslint/parser": "^
|
|
92
|
+
"@typescript-eslint/eslint-plugin": "^4.1.0",
|
|
93
|
+
"@typescript-eslint/parser": "^4.1.0",
|
|
91
94
|
"apollo-fetch": "^0.7.0",
|
|
92
95
|
"babel-loader": "^8.1.0",
|
|
93
96
|
"babel-minify": "^0.5.1",
|
|
94
97
|
"cross-env": "^7.0.0",
|
|
95
|
-
"eslint": "^7.
|
|
98
|
+
"eslint": "^7.8.1",
|
|
96
99
|
"eslint-config-prettier": "^6.11.0",
|
|
97
100
|
"eslint-plugin-prettier": "^3.1.4",
|
|
98
|
-
"
|
|
99
|
-
"
|
|
101
|
+
"express": "^4.17.1",
|
|
102
|
+
"fs-extra": "^9.0.1",
|
|
103
|
+
"html-webpack-plugin": "^4.4.1",
|
|
104
|
+
"husky": "^4.3.0",
|
|
100
105
|
"ignore-loader": "^0.1.2",
|
|
101
|
-
"jest": "^26.
|
|
102
|
-
"lint-staged": "^10.
|
|
103
|
-
"prettier": "^2.
|
|
106
|
+
"jest": "^26.4.2",
|
|
107
|
+
"lint-staged": "^10.3.0",
|
|
108
|
+
"prettier": "^2.1.1",
|
|
104
109
|
"puppeteer": "^5.2.1",
|
|
105
110
|
"regenerator-runtime": "^0.13.7",
|
|
106
111
|
"rimraf": "^3.0.2",
|
|
107
|
-
"rollup": "^2.
|
|
108
|
-
"rollup-plugin-typescript2": "^0.27.
|
|
109
|
-
"ts-jest": "^26.
|
|
110
|
-
"ts-loader": "^8.0.
|
|
111
|
-
"ts-node": "^
|
|
112
|
-
"typescript": "^
|
|
112
|
+
"rollup": "^2.26.11",
|
|
113
|
+
"rollup-plugin-typescript2": "^0.27.2",
|
|
114
|
+
"ts-jest": "^26.3.0",
|
|
115
|
+
"ts-loader": "^8.0.3",
|
|
116
|
+
"ts-node": "^9.0.0",
|
|
117
|
+
"typescript": "^4.0.2",
|
|
113
118
|
"url-loader": "^4.1.0",
|
|
114
119
|
"webpack": "^4.44.1",
|
|
115
120
|
"webpack-cli": "^3.3.12",
|