mock-config-server 2.2.0 → 2.3.0
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/README.md +9 -4
- package/dist/bin/build.d.ts +2 -0
- package/dist/bin/build.js +49 -0
- package/dist/bin/cli.js +14 -2
- package/dist/bin/helpers/index.d.ts +3 -0
- package/dist/bin/helpers/index.js +19 -0
- package/dist/bin/helpers/resolveConfigFile.d.ts +2 -0
- package/dist/bin/helpers/resolveConfigFile.js +20 -0
- package/dist/bin/helpers/resolveConfigFilePath.d.ts +1 -0
- package/dist/bin/helpers/resolveConfigFilePath.js +39 -0
- package/dist/bin/resolveConfigFilePath/resolveConfigFilePath.d.ts +1 -0
- package/dist/bin/resolveConfigFilePath/resolveConfigFilePath.js +39 -0
- package/dist/bin/run.d.ts +6 -0
- package/dist/bin/run.js +17 -0
- package/dist/bin/validateMockServerConfig/validateGraphqlConfig/validateRoutes/validateRoutes.js +11 -11
- package/dist/bin/validateMockServerConfig/validateRestConfig/validateRoutes/validateRoutes.js +15 -15
- package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.d.ts +2 -2
- package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.js +9 -11
- package/dist/src/core/graphql/createGraphQLRoutes/helpers/prepareGraphQLRequestConfigs/prepareGraphQLRequestConfigs.js +3 -1
- package/dist/src/core/middlewares/cookieParseMiddleware/cookieParseMiddleware.d.ts +2 -0
- package/dist/src/core/middlewares/cookieParseMiddleware/cookieParseMiddleware.js +16 -0
- package/dist/src/core/middlewares/cookieParseMiddleware/helpers/index.d.ts +1 -0
- package/dist/src/core/middlewares/cookieParseMiddleware/helpers/index.js +17 -0
- package/dist/src/core/middlewares/cookieParseMiddleware/helpers/parseCookie/parseCookie.d.ts +3 -0
- package/dist/src/core/middlewares/cookieParseMiddleware/helpers/parseCookie/parseCookie.js +17 -0
- package/dist/src/core/middlewares/corsMiddleware/corsMiddleware.js +12 -12
- package/dist/src/core/middlewares/destroyerMiddleware/destroyerMiddleware.d.ts +7 -0
- package/dist/src/core/middlewares/destroyerMiddleware/destroyerMiddleware.js +23 -0
- package/dist/src/core/middlewares/index.d.ts +3 -0
- package/dist/src/core/middlewares/index.js +3 -0
- package/dist/src/core/middlewares/noCorsMiddleware/noCorsMiddleware.js +13 -13
- package/dist/src/core/middlewares/requestInterceptorMiddleware/requestInterceptorMiddleware.d.ts +3 -0
- package/dist/src/core/middlewares/requestInterceptorMiddleware/requestInterceptorMiddleware.js +11 -0
- package/dist/src/core/rest/createRestRoutes/createRestRoutes.d.ts +2 -2
- package/dist/src/core/rest/createRestRoutes/createRestRoutes.js +9 -11
- package/dist/src/core/rest/createRestRoutes/helpers/prepareRestRequestConfigs/prepareRestRequestConfigs.js +3 -1
- package/dist/src/server/createMockServer/createMockServer.js +15 -2
- package/dist/src/server/index.d.ts +1 -1
- package/dist/src/server/index.js +1 -1
- package/dist/src/server/startMockServer/startMockServer.d.ts +4 -1
- package/dist/src/server/startMockServer/startMockServer.js +4 -1
- package/dist/src/utils/helpers/interceptors/callRequestInterceptor/callRequestInterceptor.d.ts +8 -0
- package/dist/src/utils/helpers/interceptors/callRequestInterceptor/callRequestInterceptor.js +19 -0
- package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.d.ts +6 -5
- package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.js +20 -23
- package/dist/src/utils/helpers/interceptors/helpers/setDelay.d.ts +1 -0
- package/dist/src/utils/helpers/interceptors/helpers/setDelay.js +8 -0
- package/dist/src/utils/helpers/interceptors/index.d.ts +1 -1
- package/dist/src/utils/helpers/interceptors/index.js +1 -1
- package/dist/src/utils/helpers/sleep.d.ts +1 -1
- package/dist/src/utils/helpers/sleep.js +2 -2
- package/dist/src/utils/types/graphql.d.ts +1 -1
- package/dist/src/utils/types/interceptors.d.ts +15 -6
- package/dist/src/utils/types/rest.d.ts +7 -7
- package/dist/src/utils/types/server.d.ts +19 -9
- package/dist/src/utils/types/values.d.ts +1 -0
- package/package.json +1 -1
- package/dist/bin/start.d.ts +0 -3
- package/dist/bin/start.js +0 -73
- package/dist/src/utils/helpers/interceptors/callRequestInterceptors/callRequestInterceptors.d.ts +0 -12
- package/dist/src/utils/helpers/interceptors/callRequestInterceptors/callRequestInterceptors.js +0 -13
- /package/dist/bin/{resolveExportsFromSourceCode → helpers}/resolveExportsFromSourceCode.d.ts +0 -0
- /package/dist/bin/{resolveExportsFromSourceCode → helpers}/resolveExportsFromSourceCode.js +0 -0
|
@@ -3,20 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.noCorsMiddleware = void 0;
|
|
4
4
|
const constants_1 = require("../../../utils/constants");
|
|
5
5
|
const noCorsMiddleware = (server) => {
|
|
6
|
-
server.use((
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const isPreflightRequest =
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
server.use((request, response, next) => {
|
|
7
|
+
response.setHeader('Access-Control-Allow-Origin', constants_1.DEFAULT.CORS.ORIGIN);
|
|
8
|
+
response.setHeader('Access-Control-Allow-Credentials', `${constants_1.DEFAULT.CORS.CREDENTIALS}`);
|
|
9
|
+
response.setHeader('Access-Control-Expose-Headers', constants_1.DEFAULT.CORS.EXPOSED_HEADERS);
|
|
10
|
+
const isPreflightRequest = request.method === 'OPTIONS' &&
|
|
11
|
+
request.headers.origin &&
|
|
12
|
+
request.headers['access-control-request-method'] &&
|
|
13
|
+
request.headers['access-control-request-headers'];
|
|
14
14
|
if (isPreflightRequest) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return
|
|
15
|
+
response.setHeader('Access-Control-Allow-Methods', constants_1.DEFAULT.CORS.METHODS);
|
|
16
|
+
response.setHeader('Access-Control-Allow-Headers', constants_1.DEFAULT.CORS.ALLOWED_HEADERS);
|
|
17
|
+
response.setHeader('Access-Control-Max-Age', constants_1.DEFAULT.CORS.MAX_AGE);
|
|
18
|
+
response.sendStatus(204);
|
|
19
|
+
return response.end();
|
|
20
20
|
}
|
|
21
21
|
return next();
|
|
22
22
|
});
|
package/dist/src/core/middlewares/requestInterceptorMiddleware/requestInterceptorMiddleware.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requestInterceptorMiddleware = void 0;
|
|
4
|
+
const helpers_1 = require("../../../utils/helpers");
|
|
5
|
+
const requestInterceptorMiddleware = (server, interceptor) => {
|
|
6
|
+
server.use(async (request, _response, next) => {
|
|
7
|
+
await (0, helpers_1.callRequestInterceptor)({ request, interceptor });
|
|
8
|
+
return next();
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
exports.requestInterceptorMiddleware = requestInterceptorMiddleware;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { IRouter } from 'express';
|
|
2
|
-
import type { Interceptors,
|
|
3
|
-
export declare const createRestRoutes: (router: IRouter,
|
|
2
|
+
import type { Interceptors, RestConfig } from '../../../utils/types';
|
|
3
|
+
export declare const createRestRoutes: (router: IRouter, restConfig: RestConfig, serverResponseInterceptors?: Interceptors['response']) => IRouter;
|
|
@@ -3,16 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createRestRoutes = void 0;
|
|
4
4
|
const helpers_1 = require("../../../utils/helpers");
|
|
5
5
|
const helpers_2 = require("./helpers");
|
|
6
|
-
const createRestRoutes = (router,
|
|
7
|
-
(0, helpers_2.prepareRestRequestConfigs)(configs).forEach((requestConfig) => {
|
|
6
|
+
const createRestRoutes = (router, restConfig, serverResponseInterceptors) => {
|
|
7
|
+
(0, helpers_2.prepareRestRequestConfigs)(restConfig.configs).forEach((requestConfig) => {
|
|
8
8
|
router.route(requestConfig.path)[requestConfig.method](async (request, response, next) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
serverInterceptor: interceptors?.request
|
|
14
|
-
}
|
|
15
|
-
});
|
|
9
|
+
const requestInterceptor = requestConfig.interceptors?.request;
|
|
10
|
+
if (requestInterceptor) {
|
|
11
|
+
await (0, helpers_1.callRequestInterceptor)({ request, interceptor: requestInterceptor });
|
|
12
|
+
}
|
|
16
13
|
const matchedRouteConfig = requestConfig.routes.find(({ entities }) => {
|
|
17
14
|
if (!entities)
|
|
18
15
|
return true;
|
|
@@ -24,14 +21,15 @@ const createRestRoutes = (router, configs, interceptors) => {
|
|
|
24
21
|
const matchedRouteConfigData = typeof matchedRouteConfig.data === 'function'
|
|
25
22
|
? await matchedRouteConfig.data(request, matchedRouteConfig.entities ?? {})
|
|
26
23
|
: matchedRouteConfig.data;
|
|
27
|
-
const data = (0, helpers_1.callResponseInterceptors)({
|
|
24
|
+
const data = await (0, helpers_1.callResponseInterceptors)({
|
|
28
25
|
data: matchedRouteConfigData,
|
|
29
26
|
request,
|
|
30
27
|
response,
|
|
31
28
|
interceptors: {
|
|
32
29
|
routeInterceptor: matchedRouteConfig.interceptors?.response,
|
|
33
30
|
requestInterceptor: requestConfig.interceptors?.response,
|
|
34
|
-
|
|
31
|
+
apiInterceptor: restConfig.interceptors?.response,
|
|
32
|
+
serverInterceptor: serverResponseInterceptors
|
|
35
33
|
}
|
|
36
34
|
});
|
|
37
35
|
// ✅ important:
|
|
@@ -7,9 +7,11 @@ const calculateRouteConfigWeight = (restRouteConfig) => {
|
|
|
7
7
|
if (!entities)
|
|
8
8
|
return 0;
|
|
9
9
|
let routeConfigWeight = 0;
|
|
10
|
-
const { headers, query, params, body } = entities;
|
|
10
|
+
const { headers, cookies, query, params, body } = entities;
|
|
11
11
|
if (headers)
|
|
12
12
|
routeConfigWeight += Object.keys(headers).length;
|
|
13
|
+
if (cookies)
|
|
14
|
+
routeConfigWeight += Object.keys(cookies).length;
|
|
13
15
|
if (query)
|
|
14
16
|
routeConfigWeight += Object.keys(query).length;
|
|
15
17
|
if (params)
|
|
@@ -17,6 +17,11 @@ const createMockServer = (mockServerConfig) => {
|
|
|
17
17
|
server.set('view engine', 'ejs');
|
|
18
18
|
server.use(body_parser_1.default.urlencoded({ extended: false }));
|
|
19
19
|
server.use(body_parser_1.default.json({ limit: '10mb' }));
|
|
20
|
+
(0, middlewares_1.cookieParseMiddleware)(server);
|
|
21
|
+
const serverRequestInterceptor = mockServerConfig.interceptors?.request;
|
|
22
|
+
if (serverRequestInterceptor) {
|
|
23
|
+
(0, middlewares_1.requestInterceptorMiddleware)(server, serverRequestInterceptor);
|
|
24
|
+
}
|
|
20
25
|
const baseUrl = mockServerConfig.baseUrl ?? '/';
|
|
21
26
|
if (cors) {
|
|
22
27
|
(0, middlewares_1.corsMiddleware)(server, cors);
|
|
@@ -28,12 +33,20 @@ const createMockServer = (mockServerConfig) => {
|
|
|
28
33
|
(0, middlewares_1.staticMiddleware)(server, baseUrl, staticPath);
|
|
29
34
|
}
|
|
30
35
|
if (rest) {
|
|
31
|
-
const routerWithRestRoutes = (0, rest_1.createRestRoutes)(express_1.default.Router(), rest
|
|
36
|
+
const routerWithRestRoutes = (0, rest_1.createRestRoutes)(express_1.default.Router(), rest, interceptors?.response);
|
|
37
|
+
const apiRequestInterceptor = rest.interceptors?.request;
|
|
38
|
+
if (apiRequestInterceptor) {
|
|
39
|
+
(0, middlewares_1.requestInterceptorMiddleware)(server, apiRequestInterceptor);
|
|
40
|
+
}
|
|
32
41
|
const restBaseUrl = (0, helpers_1.urlJoin)(baseUrl, rest.baseUrl ?? '/');
|
|
33
42
|
server.use(restBaseUrl, routerWithRestRoutes);
|
|
34
43
|
}
|
|
35
44
|
if (graphql) {
|
|
36
|
-
const routerWithGraphQLRoutes = (0, graphql_1.createGraphQLRoutes)(express_1.default.Router(), graphql
|
|
45
|
+
const routerWithGraphQLRoutes = (0, graphql_1.createGraphQLRoutes)(express_1.default.Router(), graphql, interceptors?.response);
|
|
46
|
+
const apiRequestInterceptor = graphql.interceptors?.request;
|
|
47
|
+
if (apiRequestInterceptor) {
|
|
48
|
+
(0, middlewares_1.requestInterceptorMiddleware)(server, apiRequestInterceptor);
|
|
49
|
+
}
|
|
37
50
|
const graphqlBaseUrl = (0, helpers_1.urlJoin)(baseUrl, graphql.baseUrl ?? '/');
|
|
38
51
|
server.use(graphqlBaseUrl, routerWithGraphQLRoutes);
|
|
39
52
|
}
|
package/dist/src/server/index.js
CHANGED
|
@@ -14,5 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./startMockServer/startMockServer"), exports);
|
|
18
17
|
__exportStar(require("./createMockServer/createMockServer"), exports);
|
|
18
|
+
__exportStar(require("./startMockServer/startMockServer"), exports);
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import type { MockServerConfig } from '../../utils/types';
|
|
2
|
-
export declare const startMockServer: (mockServerConfig: MockServerConfig) =>
|
|
3
|
+
export declare const startMockServer: (mockServerConfig: MockServerConfig) => import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse> & {
|
|
4
|
+
destroy: (callback?: ((err?: Error | undefined) => void) | undefined) => import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
|
|
5
|
+
};
|
|
@@ -5,13 +5,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.startMockServer = void 0;
|
|
7
7
|
const ansi_colors_1 = __importDefault(require("ansi-colors"));
|
|
8
|
+
const middlewares_1 = require("../../core/middlewares");
|
|
8
9
|
const constants_1 = require("../../utils/constants");
|
|
9
10
|
const createMockServer_1 = require("../createMockServer/createMockServer");
|
|
10
11
|
const startMockServer = (mockServerConfig) => {
|
|
11
12
|
const mockServer = (0, createMockServer_1.createMockServer)(mockServerConfig);
|
|
12
13
|
const port = mockServerConfig.port ?? constants_1.DEFAULT.PORT;
|
|
13
|
-
mockServer.listen(port, () => {
|
|
14
|
+
const server = mockServer.listen(port, () => {
|
|
14
15
|
console.log(ansi_colors_1.default.green(`🎉 Mock Server is running at http://localhost:${port}`));
|
|
15
16
|
});
|
|
17
|
+
// ✅ important: add destroy method for closing keep-alive connections after server shutdown
|
|
18
|
+
return (0, middlewares_1.destroyerMiddleware)(server);
|
|
16
19
|
};
|
|
17
20
|
exports.startMockServer = startMockServer;
|
package/dist/src/utils/helpers/interceptors/callRequestInterceptor/callRequestInterceptor.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Request } from 'express';
|
|
2
|
+
import type { RequestInterceptor } from '../../../types';
|
|
3
|
+
interface CallRequestInterceptorParams {
|
|
4
|
+
request: Request;
|
|
5
|
+
interceptor: RequestInterceptor;
|
|
6
|
+
}
|
|
7
|
+
export declare const callRequestInterceptor: (params: CallRequestInterceptorParams) => Promise<void>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.callRequestInterceptor = void 0;
|
|
4
|
+
const setDelay_1 = require("../helpers/setDelay");
|
|
5
|
+
const callRequestInterceptor = async (params) => {
|
|
6
|
+
const { request, interceptor } = params;
|
|
7
|
+
const getHeader = (field) => request.headers[field];
|
|
8
|
+
const getHeaders = () => request.headers;
|
|
9
|
+
const getCookie = (name) => request.cookies[name];
|
|
10
|
+
const requestInterceptorParams = {
|
|
11
|
+
request,
|
|
12
|
+
setDelay: setDelay_1.setDelay,
|
|
13
|
+
getHeader,
|
|
14
|
+
getHeaders,
|
|
15
|
+
getCookie
|
|
16
|
+
};
|
|
17
|
+
await interceptor(requestInterceptorParams);
|
|
18
|
+
};
|
|
19
|
+
exports.callRequestInterceptor = callRequestInterceptor;
|
package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import type { Request, Response } from 'express';
|
|
2
|
-
import type { Data,
|
|
2
|
+
import type { Data, ResponseInterceptor } from '../../../types';
|
|
3
3
|
interface CallResponseInterceptorsParams {
|
|
4
4
|
data: Data;
|
|
5
5
|
request: Request;
|
|
6
6
|
response: Response;
|
|
7
7
|
interceptors?: {
|
|
8
|
-
routeInterceptor?:
|
|
9
|
-
requestInterceptor?:
|
|
10
|
-
|
|
8
|
+
routeInterceptor?: ResponseInterceptor;
|
|
9
|
+
requestInterceptor?: ResponseInterceptor;
|
|
10
|
+
apiInterceptor?: ResponseInterceptor;
|
|
11
|
+
serverInterceptor?: ResponseInterceptor;
|
|
11
12
|
};
|
|
12
13
|
}
|
|
13
|
-
export declare const callResponseInterceptors: (params: CallResponseInterceptorsParams) => Data
|
|
14
|
+
export declare const callResponseInterceptors: (params: CallResponseInterceptorsParams) => Promise<Data>;
|
|
14
15
|
export {};
|
package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.js
CHANGED
|
@@ -1,54 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.callResponseInterceptors = void 0;
|
|
4
|
-
const
|
|
5
|
-
const callResponseInterceptors = (params) => {
|
|
4
|
+
const setDelay_1 = require("../helpers/setDelay");
|
|
5
|
+
const callResponseInterceptors = async (params) => {
|
|
6
6
|
const { data, request, response, interceptors } = params;
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
const getHeader = (field) => response.getHeader(field);
|
|
8
|
+
const getHeaders = () => response.getHeaders();
|
|
9
|
+
const getCookie = (name) => request.cookies[name];
|
|
10
10
|
const setStatusCode = (statusCode) => {
|
|
11
11
|
response.statusCode = statusCode;
|
|
12
12
|
};
|
|
13
|
-
const setHeader = (field, value) =>
|
|
14
|
-
|
|
15
|
-
};
|
|
16
|
-
const appendHeader = (field, value) => {
|
|
17
|
-
response.append(field, value);
|
|
18
|
-
};
|
|
13
|
+
const setHeader = (field, value) => response.set(field, value);
|
|
14
|
+
const appendHeader = (field, value) => response.append(field, value);
|
|
19
15
|
const setCookie = (name, value, options) => {
|
|
20
16
|
if (options) {
|
|
21
17
|
response.cookie(name, value, options);
|
|
22
|
-
return;
|
|
23
18
|
}
|
|
24
19
|
response.cookie(name, value);
|
|
25
20
|
};
|
|
26
|
-
const clearCookie = (name, options) =>
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const attachment = (filename) => {
|
|
30
|
-
response.attachment(filename);
|
|
31
|
-
};
|
|
32
|
-
const interceptorResponseParams = {
|
|
21
|
+
const clearCookie = (name, options) => response.clearCookie(name, options);
|
|
22
|
+
const attachment = (filename) => response.attachment(filename);
|
|
23
|
+
const ResponseInterceptorParams = {
|
|
33
24
|
request,
|
|
34
25
|
response,
|
|
35
|
-
setDelay,
|
|
26
|
+
setDelay: setDelay_1.setDelay,
|
|
36
27
|
setStatusCode,
|
|
37
28
|
setHeader,
|
|
38
29
|
appendHeader,
|
|
30
|
+
getHeader,
|
|
31
|
+
getHeaders,
|
|
39
32
|
setCookie,
|
|
33
|
+
getCookie,
|
|
40
34
|
clearCookie,
|
|
41
35
|
attachment
|
|
42
36
|
};
|
|
43
37
|
let updatedData = data;
|
|
44
38
|
if (interceptors?.routeInterceptor) {
|
|
45
|
-
updatedData = interceptors.routeInterceptor(updatedData,
|
|
39
|
+
updatedData = await interceptors.routeInterceptor(updatedData, ResponseInterceptorParams);
|
|
46
40
|
}
|
|
47
41
|
if (interceptors?.requestInterceptor) {
|
|
48
|
-
updatedData = interceptors.requestInterceptor(updatedData,
|
|
42
|
+
updatedData = await interceptors.requestInterceptor(updatedData, ResponseInterceptorParams);
|
|
43
|
+
}
|
|
44
|
+
if (interceptors?.apiInterceptor) {
|
|
45
|
+
updatedData = await interceptors.apiInterceptor(updatedData, ResponseInterceptorParams);
|
|
49
46
|
}
|
|
50
47
|
if (interceptors?.serverInterceptor) {
|
|
51
|
-
updatedData = interceptors.serverInterceptor(updatedData,
|
|
48
|
+
updatedData = await interceptors.serverInterceptor(updatedData, ResponseInterceptorParams);
|
|
52
49
|
}
|
|
53
50
|
return updatedData;
|
|
54
51
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const setDelay: (delay: number) => Promise<void>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setDelay = void 0;
|
|
4
|
+
const sleep_1 = require("../../sleep");
|
|
5
|
+
const setDelay = async (delay) => {
|
|
6
|
+
await (0, sleep_1.sleep)(delay === Infinity ? 99999999 : delay);
|
|
7
|
+
};
|
|
8
|
+
exports.setDelay = setDelay;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './callRequestInterceptor/callRequestInterceptor';
|
|
2
2
|
export * from './callResponseInterceptors/callResponseInterceptors';
|
|
@@ -14,5 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
17
|
+
__exportStar(require("./callRequestInterceptor/callRequestInterceptor"), exports);
|
|
18
18
|
__exportStar(require("./callResponseInterceptors/callResponseInterceptors"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const sleep: (
|
|
1
|
+
export declare const sleep: (milliseconds: number) => Promise<unknown>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sleep = void 0;
|
|
4
|
-
const sleep = (
|
|
5
|
-
setTimeout(resolve,
|
|
4
|
+
const sleep = (milliseconds) => new Promise((resolve) => {
|
|
5
|
+
setTimeout(resolve, milliseconds);
|
|
6
6
|
});
|
|
7
7
|
exports.sleep = sleep;
|
|
@@ -6,7 +6,7 @@ export interface GraphQLInput {
|
|
|
6
6
|
query?: string;
|
|
7
7
|
variables: GraphQLVariables;
|
|
8
8
|
}
|
|
9
|
-
export type GraphQLEntities = 'headers' | 'query' | 'variables';
|
|
9
|
+
export type GraphQLEntities = 'headers' | 'cookies' | 'query' | 'variables';
|
|
10
10
|
export type GraphQLEntitiesValues = {
|
|
11
11
|
[Key in GraphQLEntities]: Key extends 'variables' ? VariablesValue : PlainObject;
|
|
12
12
|
};
|
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
import type { CookieOptions, Request, Response } from 'express';
|
|
2
|
-
export
|
|
2
|
+
export type RequestInterceptorCookieValue = string | undefined;
|
|
3
|
+
export type RequestInterceptorHeaderValue = string | number | string[] | undefined;
|
|
4
|
+
export interface RequestInterceptorParams {
|
|
3
5
|
request: Request;
|
|
6
|
+
setDelay: (delay: number) => Promise<void>;
|
|
7
|
+
getCookie: (name: string) => RequestInterceptorCookieValue;
|
|
8
|
+
getHeader: (field: string) => RequestInterceptorHeaderValue;
|
|
9
|
+
getHeaders: () => Record<string, RequestInterceptorHeaderValue>;
|
|
4
10
|
}
|
|
5
|
-
export type
|
|
6
|
-
export interface
|
|
11
|
+
export type RequestInterceptor = (params: RequestInterceptorParams) => void;
|
|
12
|
+
export interface ResponseInterceptorParams {
|
|
7
13
|
request: Request;
|
|
8
14
|
response: Response;
|
|
9
15
|
setDelay: (delay: number) => Promise<void>;
|
|
10
16
|
setStatusCode: (statusCode: number) => void;
|
|
11
17
|
setHeader: (field: string, value?: string | string[]) => void;
|
|
12
18
|
appendHeader: (field: string, value?: string[] | string) => void;
|
|
19
|
+
getHeader: (field: string) => RequestInterceptorHeaderValue;
|
|
20
|
+
getHeaders: () => Record<string, RequestInterceptorHeaderValue>;
|
|
13
21
|
setCookie: (name: string, value: string, options?: CookieOptions) => void;
|
|
22
|
+
getCookie: (name: string) => RequestInterceptorCookieValue;
|
|
14
23
|
clearCookie: (name: string, options?: CookieOptions) => void;
|
|
15
24
|
attachment: (filename: string) => void;
|
|
16
25
|
}
|
|
17
|
-
export type
|
|
26
|
+
export type ResponseInterceptor<Data extends any = any> = (data: Data, params: ResponseInterceptorParams) => any;
|
|
18
27
|
export interface Interceptors {
|
|
19
|
-
request?:
|
|
20
|
-
response?:
|
|
28
|
+
request?: RequestInterceptor;
|
|
29
|
+
response?: ResponseInterceptor;
|
|
21
30
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import type { Request } from 'express';
|
|
2
2
|
import type { Interceptors } from './interceptors';
|
|
3
|
-
import type { BodyValue, Data, HeadersValue, ParamsValue, QueryValue } from './values';
|
|
4
|
-
export type RestEntities = 'headers' | 'query' | 'params' | 'body';
|
|
5
|
-
export type RestEntitiesValue = BodyValue | QueryValue | HeadersValue | ParamsValue;
|
|
3
|
+
import type { BodyValue, CookiesValue, Data, HeadersValue, ParamsValue, QueryValue } from './values';
|
|
4
|
+
export type RestEntities = 'headers' | 'cookies' | 'query' | 'params' | 'body';
|
|
5
|
+
export type RestEntitiesValue = BodyValue | QueryValue | HeadersValue | CookiesValue | ParamsValue;
|
|
6
6
|
export type RestEntitiesValues = {
|
|
7
|
-
[Key in RestEntities]: Key extends 'body' ? BodyValue : Key extends 'query' ? QueryValue : Key extends 'headers' ? HeadersValue : Key extends 'params' ? ParamsValue : never;
|
|
7
|
+
[Key in RestEntities]: Key extends 'body' ? BodyValue : Key extends 'query' ? QueryValue : Key extends 'headers' ? HeadersValue : Key extends 'cookies' ? CookiesValue : Key extends 'params' ? ParamsValue : never;
|
|
8
8
|
};
|
|
9
9
|
export interface RestMethodsEntities {
|
|
10
|
-
get:
|
|
11
|
-
delete:
|
|
10
|
+
get: Exclude<RestEntities, 'body'>;
|
|
11
|
+
delete: Exclude<RestEntities, 'body'>;
|
|
12
12
|
post: RestEntities;
|
|
13
13
|
put: RestEntities;
|
|
14
14
|
patch: RestEntities;
|
|
15
|
-
options:
|
|
15
|
+
options: Exclude<RestEntities, 'body'>;
|
|
16
16
|
}
|
|
17
17
|
export type RestRouteConfigEntities<Method extends RestMethod> = {
|
|
18
18
|
[Key in RestMethodsEntities[Method]]?: RestEntitiesValues[Key];
|
|
@@ -19,19 +19,29 @@ export type Cors = {
|
|
|
19
19
|
};
|
|
20
20
|
export type Port = number;
|
|
21
21
|
export type BaseUrl = `/${string}`;
|
|
22
|
+
export interface RestConfig {
|
|
23
|
+
baseUrl?: BaseUrl;
|
|
24
|
+
configs: RestRequestConfig[];
|
|
25
|
+
interceptors?: Interceptors;
|
|
26
|
+
}
|
|
27
|
+
export interface GraphqlConfig {
|
|
28
|
+
baseUrl?: BaseUrl;
|
|
29
|
+
configs: GraphQLRequestConfig[];
|
|
30
|
+
interceptors?: Interceptors;
|
|
31
|
+
}
|
|
22
32
|
export interface MockServerConfig {
|
|
23
33
|
baseUrl?: BaseUrl;
|
|
24
|
-
rest?:
|
|
25
|
-
|
|
26
|
-
configs: RestRequestConfig[];
|
|
27
|
-
};
|
|
28
|
-
graphql?: {
|
|
29
|
-
baseUrl?: BaseUrl;
|
|
30
|
-
configs: GraphQLRequestConfig[];
|
|
31
|
-
};
|
|
34
|
+
rest?: RestConfig;
|
|
35
|
+
graphql?: GraphqlConfig;
|
|
32
36
|
port?: Port;
|
|
33
37
|
staticPath?: StaticPath;
|
|
34
38
|
interceptors?: Interceptors;
|
|
35
39
|
cors?: Cors;
|
|
36
40
|
}
|
|
37
|
-
export
|
|
41
|
+
export interface MockServerConfigArgv {
|
|
42
|
+
baseUrl?: string;
|
|
43
|
+
port?: number;
|
|
44
|
+
staticPath?: string;
|
|
45
|
+
config?: string;
|
|
46
|
+
watch?: boolean;
|
|
47
|
+
}
|
|
@@ -5,5 +5,6 @@ export type BodyValue = any;
|
|
|
5
5
|
export type VariablesValue = any;
|
|
6
6
|
export type QueryValue = ParsedQs;
|
|
7
7
|
export type HeadersValue = Record<string, string>;
|
|
8
|
+
export type CookiesValue = Record<string, string>;
|
|
8
9
|
export type ParamsValue = Record<string, string>;
|
|
9
10
|
export type Data = boolean | number | string | any[] | Record<any, any> | null | undefined;
|
package/package.json
CHANGED
package/dist/bin/start.d.ts
DELETED
package/dist/bin/start.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
-
if (k2 === undefined) k2 = k;
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(o, k2, desc);
|
|
10
|
-
}) : (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
o[k2] = m[k];
|
|
13
|
-
}));
|
|
14
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
-
}) : function(o, v) {
|
|
17
|
-
o["default"] = v;
|
|
18
|
-
});
|
|
19
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
-
if (mod && mod.__esModule) return mod;
|
|
21
|
-
var result = {};
|
|
22
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
-
__setModuleDefault(result, mod);
|
|
24
|
-
return result;
|
|
25
|
-
};
|
|
26
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
-
exports.start = void 0;
|
|
28
|
-
const fs = __importStar(require("fs"));
|
|
29
|
-
const esbuild_1 = require("esbuild");
|
|
30
|
-
const server_1 = require("../src/server");
|
|
31
|
-
const helpers_1 = require("../src/utils/helpers");
|
|
32
|
-
const resolveExportsFromSourceCode_1 = require("./resolveExportsFromSourceCode/resolveExportsFromSourceCode");
|
|
33
|
-
const validateMockServerConfig_1 = require("./validateMockServerConfig/validateMockServerConfig");
|
|
34
|
-
const start = async (argv) => {
|
|
35
|
-
try {
|
|
36
|
-
const appPath = process.cwd();
|
|
37
|
-
const mockServerConfigFileRegex = /mock-server.config.(?:ts|js)/;
|
|
38
|
-
const mockServerConfigFile = fs
|
|
39
|
-
.readdirSync(appPath)
|
|
40
|
-
.find((file) => mockServerConfigFileRegex.test(file));
|
|
41
|
-
if (!mockServerConfigFile) {
|
|
42
|
-
throw new Error('Cannot find config file mock-server.config.(ts|js)');
|
|
43
|
-
}
|
|
44
|
-
const { outputFiles } = await (0, esbuild_1.build)({
|
|
45
|
-
entryPoints: [mockServerConfigFile],
|
|
46
|
-
bundle: true,
|
|
47
|
-
platform: 'node',
|
|
48
|
-
target: 'esnext',
|
|
49
|
-
minifySyntax: true,
|
|
50
|
-
minify: true,
|
|
51
|
-
write: false,
|
|
52
|
-
metafile: false
|
|
53
|
-
});
|
|
54
|
-
const mockServerConfigSourceCode = outputFiles[0]?.text;
|
|
55
|
-
if (!mockServerConfigSourceCode) {
|
|
56
|
-
throw new Error('Cannot handle source code of mock-server.config.(ts|js)');
|
|
57
|
-
}
|
|
58
|
-
const mockServerConfigExports = (0, resolveExportsFromSourceCode_1.resolveExportsFromSourceCode)(mockServerConfigSourceCode);
|
|
59
|
-
if (!mockServerConfigExports?.default) {
|
|
60
|
-
throw new Error('Cannot handle exports of mock-server.config.(ts|js)');
|
|
61
|
-
}
|
|
62
|
-
if (!(0, helpers_1.isPlainObject)(mockServerConfigExports.default)) {
|
|
63
|
-
throw new Error('configuration should be plain object; see our doc (https://www.npmjs.com/package/mock-config-server) for more information');
|
|
64
|
-
}
|
|
65
|
-
const mergedMockServerConfig = { ...mockServerConfigExports.default, ...argv };
|
|
66
|
-
(0, validateMockServerConfig_1.validateMockServerConfig)(mergedMockServerConfig);
|
|
67
|
-
(0, server_1.startMockServer)(mergedMockServerConfig);
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
console.error(error.message);
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
exports.start = start;
|
package/dist/src/utils/helpers/interceptors/callRequestInterceptors/callRequestInterceptors.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Request } from 'express';
|
|
2
|
-
import type { InterceptorRequest } from '../../../types';
|
|
3
|
-
interface CallRequestInterceptorsParams {
|
|
4
|
-
request: Request;
|
|
5
|
-
interceptors?: {
|
|
6
|
-
routeInterceptor?: InterceptorRequest | undefined;
|
|
7
|
-
requestInterceptor?: InterceptorRequest | undefined;
|
|
8
|
-
serverInterceptor?: InterceptorRequest | undefined;
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
export declare const callRequestInterceptors: (params: CallRequestInterceptorsParams) => void;
|
|
12
|
-
export {};
|
package/dist/src/utils/helpers/interceptors/callRequestInterceptors/callRequestInterceptors.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.callRequestInterceptors = void 0;
|
|
4
|
-
const callRequestInterceptors = (params) => {
|
|
5
|
-
const { request, interceptors } = params;
|
|
6
|
-
if (interceptors?.routeInterceptor)
|
|
7
|
-
interceptors.routeInterceptor({ request });
|
|
8
|
-
if (interceptors?.requestInterceptor)
|
|
9
|
-
interceptors.requestInterceptor({ request });
|
|
10
|
-
if (interceptors?.serverInterceptor)
|
|
11
|
-
interceptors.serverInterceptor({ request });
|
|
12
|
-
};
|
|
13
|
-
exports.callRequestInterceptors = callRequestInterceptors;
|
/package/dist/bin/{resolveExportsFromSourceCode → helpers}/resolveExportsFromSourceCode.d.ts
RENAMED
|
File without changes
|
|
File without changes
|