mock-config-server 3.6.1 → 3.7.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/README.md +291 -90
- package/dist/bin/validateMockServerConfig/graphqlConfigSchema/graphqlConfigSchema.d.ts +6 -6
- package/dist/bin/validateMockServerConfig/restConfigSchema/restConfigSchema.d.ts +14 -14
- package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.d.ts +1 -1
- package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.js +1 -3
- package/dist/src/core/middlewares/contextMiddleware/contextMiddleware.d.ts +17 -0
- package/dist/src/core/middlewares/contextMiddleware/contextMiddleware.js +35 -0
- package/dist/src/core/middlewares/cookieParseMiddleware/helpers/parseCookie/parseCookie.d.ts +1 -2
- package/dist/src/core/middlewares/index.d.ts +1 -0
- package/dist/src/core/middlewares/index.js +1 -0
- package/dist/src/core/middlewares/notFoundMiddleware/notFoundMiddleware.js +4 -3
- package/dist/src/core/rest/createRestRoutes/createRestRoutes.d.ts +1 -1
- package/dist/src/core/rest/createRestRoutes/createRestRoutes.js +1 -3
- package/dist/src/server/createDatabaseMockServer/createDatabaseMockServer.js +1 -0
- package/dist/src/server/createGraphQLMockServer/createGraphQLMockServer.js +1 -0
- package/dist/src/server/createMockServer/createMockServer.js +1 -0
- package/dist/src/server/createRestMockServer/createRestMockServer.js +1 -0
- package/dist/src/server/startDatabaseMockServer/startDatabaseMockServer.js +1 -1
- package/dist/src/server/startGraphQLMockServer/startGraphQLMockServer.js +1 -1
- package/dist/src/server/startMockServer/startMockServer.js +1 -1
- package/dist/src/server/startRestMockServer/startRestMockServer.js +1 -1
- package/dist/src/static/views/pages/404/index.ejs +66 -69
- package/dist/src/utils/helpers/date/formatTimestamp/formatTimestamp.d.ts +1 -0
- package/dist/src/utils/helpers/date/formatTimestamp/formatTimestamp.js +18 -0
- package/dist/src/utils/helpers/date/index.d.ts +1 -0
- package/dist/src/utils/helpers/date/index.js +18 -0
- package/dist/src/utils/helpers/index.d.ts +2 -0
- package/dist/src/utils/helpers/index.js +2 -0
- package/dist/src/utils/helpers/interceptors/callRequestInterceptor/callRequestInterceptor.js +7 -1
- package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.js +9 -1
- package/dist/src/utils/helpers/logger/callRequestLogger/callRequestLogger.d.ts +8 -0
- package/dist/src/utils/helpers/logger/callRequestLogger/callRequestLogger.js +50 -0
- package/dist/src/utils/helpers/logger/callResponseLogger/callResponseLogger.d.ts +10 -0
- package/dist/src/utils/helpers/logger/callResponseLogger/callResponseLogger.js +54 -0
- package/dist/src/utils/helpers/logger/helpers/filterTokens/filterTokens.d.ts +5 -0
- package/dist/src/utils/helpers/logger/helpers/filterTokens/filterTokens.js +44 -0
- package/dist/src/utils/helpers/logger/helpers/formatTokens/formatTokens.d.ts +2 -0
- package/dist/src/utils/helpers/logger/helpers/formatTokens/formatTokens.js +23 -0
- package/dist/src/utils/helpers/logger/helpers/index.d.ts +2 -0
- package/dist/src/utils/helpers/logger/helpers/index.js +19 -0
- package/dist/src/utils/helpers/logger/index.d.ts +2 -0
- package/dist/src/utils/helpers/logger/index.js +19 -0
- package/dist/src/utils/types/checkModes.d.ts +0 -1
- package/dist/src/utils/types/graphql.d.ts +2 -5
- package/dist/src/utils/types/index.d.ts +2 -0
- package/dist/src/utils/types/index.js +2 -0
- package/dist/src/utils/types/interceptors.d.ts +11 -7
- package/dist/src/utils/types/logger.d.ts +43 -0
- package/dist/src/utils/types/logger.js +4 -0
- package/dist/src/utils/types/rest.d.ts +2 -2
- package/dist/src/utils/types/server.d.ts +2 -2
- package/dist/src/utils/types/shared.d.ts +1 -0
- package/dist/src/utils/types/shared.js +4 -0
- package/dist/src/utils/types/values.d.ts +7 -0
- package/package.json +1 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "filterTokens", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return filterTokens;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _isPlainObject = require("../../../isPlainObject/isPlainObject");
|
|
12
|
+
const resolveNestedOptionFilterMode = (nestedOption)=>{
|
|
13
|
+
const values = Object.values(nestedOption);
|
|
14
|
+
return values.some(Boolean) ? 'whitelist' : 'blacklist';
|
|
15
|
+
};
|
|
16
|
+
const filterTokens = (tokens, options)=>Object.entries(options).reduce((acc, [name, option])=>{
|
|
17
|
+
const token = tokens[name];
|
|
18
|
+
if (option === true) {
|
|
19
|
+
acc[name] = token;
|
|
20
|
+
return acc;
|
|
21
|
+
}
|
|
22
|
+
const isNestedOption = (0, _isPlainObject.isPlainObject)(option);
|
|
23
|
+
const isNestedToken = (0, _isPlainObject.isPlainObject)(token);
|
|
24
|
+
if (isNestedOption && isNestedToken) {
|
|
25
|
+
const nestedOptionFilterMode = resolveNestedOptionFilterMode(option);
|
|
26
|
+
if (nestedOptionFilterMode === 'whitelist') {
|
|
27
|
+
acc[name] = Object.entries(option).reduce((acc, [name, nestedOption])=>{
|
|
28
|
+
if (nestedOption) {
|
|
29
|
+
acc[name] = token[name];
|
|
30
|
+
}
|
|
31
|
+
return acc;
|
|
32
|
+
}, {});
|
|
33
|
+
}
|
|
34
|
+
if (nestedOptionFilterMode === 'blacklist') {
|
|
35
|
+
acc[name] = Object.keys(token).reduce((acc, name)=>{
|
|
36
|
+
if (option[name] !== false) {
|
|
37
|
+
acc[name] = token[name];
|
|
38
|
+
}
|
|
39
|
+
return acc;
|
|
40
|
+
}, {});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return acc;
|
|
44
|
+
}, {});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "formatTokens", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return formatTokens;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _date = require("../../../date");
|
|
12
|
+
const formatTokens = (tokens)=>{
|
|
13
|
+
const { timestamp, method } = tokens;
|
|
14
|
+
return {
|
|
15
|
+
...tokens,
|
|
16
|
+
...timestamp && {
|
|
17
|
+
timestamp: (0, _date.formatTimestamp)(timestamp)
|
|
18
|
+
},
|
|
19
|
+
...method && {
|
|
20
|
+
method: method.toUpperCase()
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
_export_star(require("./filterTokens/filterTokens"), exports);
|
|
6
|
+
_export_star(require("./formatTokens/formatTokens"), exports);
|
|
7
|
+
function _export_star(from, to) {
|
|
8
|
+
Object.keys(from).forEach(function(k) {
|
|
9
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
10
|
+
Object.defineProperty(to, k, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function() {
|
|
13
|
+
return from[k];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
return from;
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
_export_star(require("./callRequestLogger/callRequestLogger"), exports);
|
|
6
|
+
_export_star(require("./callResponseLogger/callResponseLogger"), exports);
|
|
7
|
+
function _export_star(from, to) {
|
|
8
|
+
Object.keys(from).forEach(function(k) {
|
|
9
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
10
|
+
Object.defineProperty(to, k, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function() {
|
|
13
|
+
return from[k];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
return from;
|
|
19
|
+
}
|
|
@@ -4,7 +4,6 @@ export type CompareWithDescriptorStringValueCheckMode = 'includes' | 'notInclude
|
|
|
4
4
|
export type CompareWithDescriptorValueCheckMode = CompareWithDescriptorAnyValueCheckMode | CompareWithDescriptorStringValueCheckMode;
|
|
5
5
|
export type CalculateByDescriptorValueCheckMode = 'regExp' | 'function';
|
|
6
6
|
export type CheckMode = CheckActualValueCheckMode | CompareWithDescriptorValueCheckMode | CalculateByDescriptorValueCheckMode;
|
|
7
|
-
export type PlainEntityCheckMode = Exclude<CheckMode, CompareWithDescriptorStringValueCheckMode | Extract<CalculateByDescriptorValueCheckMode, 'regExp'>>;
|
|
8
7
|
export interface EntityDescriptor {
|
|
9
8
|
checkMode: CheckMode;
|
|
10
9
|
value?: any;
|
|
@@ -6,9 +6,6 @@ export type GraphQLEntityName = 'headers' | 'cookies' | 'query' | 'variables';
|
|
|
6
6
|
export type GraphQLEntity<EntityName extends GraphQLEntityName = GraphQLEntityName> = EntityName extends 'variables' ? PlainEntity : MappedEntity;
|
|
7
7
|
export type GraphQLOperationType = 'query' | 'mutation';
|
|
8
8
|
export type GraphQLOperationName = string | RegExp;
|
|
9
|
-
export type GraphQLEntityNamesByOperationType = {
|
|
10
|
-
[operationType in GraphQLOperationType]: GraphQLEntityName;
|
|
11
|
-
};
|
|
12
9
|
export type GraphQLEntitiesByEntityName = {
|
|
13
10
|
[EntityName in GraphQLEntityName]?: GraphQLEntity<EntityName>;
|
|
14
11
|
};
|
|
@@ -32,12 +29,12 @@ export type GraphQLRouteConfig = ({
|
|
|
32
29
|
data: ((request: Request, entities: GraphQLEntitiesByEntityName) => Data | Promise<Data>) | Data;
|
|
33
30
|
}) & {
|
|
34
31
|
entities?: GraphQLEntitiesByEntityName;
|
|
35
|
-
interceptors?: Interceptors
|
|
32
|
+
interceptors?: Interceptors<'graphql'>;
|
|
36
33
|
};
|
|
37
34
|
interface BaseGraphQLRequestConfig {
|
|
38
35
|
operationType: GraphQLOperationType;
|
|
39
36
|
routes: GraphQLRouteConfig[];
|
|
40
|
-
interceptors?: Interceptors
|
|
37
|
+
interceptors?: Interceptors<'graphql'>;
|
|
41
38
|
}
|
|
42
39
|
export interface OperationNameGraphQLRequestConfig extends BaseGraphQLRequestConfig {
|
|
43
40
|
operationName: GraphQLOperationName;
|
|
@@ -3,7 +3,9 @@ export * from './database';
|
|
|
3
3
|
export * from './entities';
|
|
4
4
|
export * from './graphql';
|
|
5
5
|
export * from './interceptors';
|
|
6
|
+
export * from './logger';
|
|
6
7
|
export * from './rest';
|
|
7
8
|
export * from './server';
|
|
9
|
+
export * from './shared';
|
|
8
10
|
export * from './utils';
|
|
9
11
|
export * from './values';
|
|
@@ -7,8 +7,10 @@ _export_star(require("./database"), exports);
|
|
|
7
7
|
_export_star(require("./entities"), exports);
|
|
8
8
|
_export_star(require("./graphql"), exports);
|
|
9
9
|
_export_star(require("./interceptors"), exports);
|
|
10
|
+
_export_star(require("./logger"), exports);
|
|
10
11
|
_export_star(require("./rest"), exports);
|
|
11
12
|
_export_star(require("./server"), exports);
|
|
13
|
+
_export_star(require("./shared"), exports);
|
|
12
14
|
_export_star(require("./utils"), exports);
|
|
13
15
|
_export_star(require("./values"), exports);
|
|
14
16
|
function _export_star(from, to) {
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import type { CookieOptions, Request, Response } from 'express';
|
|
2
|
+
import type { Logger, LoggerTokens } from './logger';
|
|
3
|
+
import type { ApiType } from './shared';
|
|
2
4
|
type RequestInterceptorCookieValue = string | undefined;
|
|
3
5
|
type RequestInterceptorHeaderValue = string | number | string[] | undefined;
|
|
4
|
-
export interface RequestInterceptorParams {
|
|
6
|
+
export interface RequestInterceptorParams<Api extends ApiType = ApiType> {
|
|
5
7
|
request: Request;
|
|
6
8
|
setDelay: (delay: number) => Promise<void>;
|
|
7
9
|
getCookie: (name: string) => RequestInterceptorCookieValue;
|
|
8
10
|
getHeader: (field: string) => RequestInterceptorHeaderValue;
|
|
9
11
|
getHeaders: () => Record<string, RequestInterceptorHeaderValue>;
|
|
12
|
+
log: (logger?: Logger<'request', Api>) => Partial<LoggerTokens>;
|
|
10
13
|
}
|
|
11
|
-
export type RequestInterceptor = (params: RequestInterceptorParams) => void | Promise<void>;
|
|
12
|
-
export interface ResponseInterceptorParams {
|
|
14
|
+
export type RequestInterceptor<Api extends ApiType = ApiType> = (params: RequestInterceptorParams<Api>) => void | Promise<void>;
|
|
15
|
+
export interface ResponseInterceptorParams<Api extends ApiType = ApiType> {
|
|
13
16
|
request: Request;
|
|
14
17
|
response: Response;
|
|
15
18
|
setDelay: (delay: number) => Promise<void>;
|
|
@@ -22,10 +25,11 @@ export interface ResponseInterceptorParams {
|
|
|
22
25
|
getCookie: (name: string) => RequestInterceptorCookieValue;
|
|
23
26
|
clearCookie: (name: string, options?: CookieOptions) => void;
|
|
24
27
|
attachment: (filename: string) => void;
|
|
28
|
+
log: (logger?: Logger<'response', Api>) => Partial<LoggerTokens>;
|
|
25
29
|
}
|
|
26
|
-
export type ResponseInterceptor<Data = any> = (data: Data, params: ResponseInterceptorParams) => any;
|
|
27
|
-
export interface Interceptors {
|
|
28
|
-
request?: RequestInterceptor
|
|
29
|
-
response?: ResponseInterceptor
|
|
30
|
+
export type ResponseInterceptor<Data = any, Api extends ApiType = ApiType> = (data: Data, params: ResponseInterceptorParams<Api>) => any;
|
|
31
|
+
export interface Interceptors<Api extends ApiType = ApiType> {
|
|
32
|
+
request?: RequestInterceptor<Api>;
|
|
33
|
+
response?: ResponseInterceptor<any, Api>;
|
|
30
34
|
}
|
|
31
35
|
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { GraphQLOperationName, GraphQLOperationType } from './graphql';
|
|
2
|
+
import type { RestMethod } from './rest';
|
|
3
|
+
import type { ApiType } from './shared';
|
|
4
|
+
import type { Cookies, Headers, Params, PlainObject, Query } from './values';
|
|
5
|
+
export interface LoggerBaseTokens {
|
|
6
|
+
type: string;
|
|
7
|
+
id: number;
|
|
8
|
+
timestamp: number;
|
|
9
|
+
method: RestMethod;
|
|
10
|
+
url: string;
|
|
11
|
+
headers: Headers;
|
|
12
|
+
cookies: Cookies;
|
|
13
|
+
query: Query;
|
|
14
|
+
params: Params;
|
|
15
|
+
body: any;
|
|
16
|
+
}
|
|
17
|
+
interface LoggerRestRequestTokens extends LoggerBaseTokens {
|
|
18
|
+
}
|
|
19
|
+
interface LoggerRestResponseTokens extends LoggerRestRequestTokens {
|
|
20
|
+
statusCode: number;
|
|
21
|
+
data: any;
|
|
22
|
+
}
|
|
23
|
+
interface LoggerGraphQLRequestTokens extends LoggerBaseTokens {
|
|
24
|
+
graphQLOperationType: GraphQLOperationType | null;
|
|
25
|
+
graphQLOperationName: GraphQLOperationName | null;
|
|
26
|
+
graphQLQuery: string | null;
|
|
27
|
+
variables: PlainObject | null;
|
|
28
|
+
}
|
|
29
|
+
interface LoggerGraphQLResponseTokens extends LoggerGraphQLRequestTokens {
|
|
30
|
+
statusCode: number;
|
|
31
|
+
data: any;
|
|
32
|
+
}
|
|
33
|
+
export type LoggerType = 'request' | 'response';
|
|
34
|
+
export type LoggerTokens<Type extends LoggerType = LoggerType, Api extends ApiType = ApiType> = Type extends 'request' ? Api extends 'rest' ? LoggerRestRequestTokens : Api extends 'graphql' ? LoggerGraphQLRequestTokens : never : Type extends 'response' ? Api extends 'rest' ? LoggerRestResponseTokens : Api extends 'graphql' ? LoggerGraphQLResponseTokens : never : never;
|
|
35
|
+
type LoggerTokensToLoggerOptions<Type> = {
|
|
36
|
+
[Key in keyof Type]?: Type[Key] extends PlainObject ? Record<string, boolean> | boolean : boolean;
|
|
37
|
+
};
|
|
38
|
+
export type LoggerOptions<Type extends LoggerType = LoggerType, Api extends ApiType = ApiType> = LoggerTokensToLoggerOptions<LoggerTokens<Type, Api>>;
|
|
39
|
+
export interface Logger<Type extends LoggerType = LoggerType, Api extends ApiType = ApiType> {
|
|
40
|
+
options?: LoggerOptions<Type, Api>;
|
|
41
|
+
rewrite?: (tokens: Partial<LoggerTokens<Type, Api>>) => void;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
@@ -36,14 +36,14 @@ export type RestRouteConfig<Method extends RestMethod> = ({
|
|
|
36
36
|
file: string;
|
|
37
37
|
}) & {
|
|
38
38
|
entities?: RestEntitiesByEntityName<Method>;
|
|
39
|
-
interceptors?: Interceptors
|
|
39
|
+
interceptors?: Interceptors<'rest'>;
|
|
40
40
|
};
|
|
41
41
|
export type RestPathString = `/${string}`;
|
|
42
42
|
interface BaseRestRequestConfig<Method extends RestMethod> {
|
|
43
43
|
path: RestPathString | RegExp;
|
|
44
44
|
method: Method;
|
|
45
45
|
routes: RestRouteConfig<Method>[];
|
|
46
|
-
interceptors?: Interceptors
|
|
46
|
+
interceptors?: Interceptors<'rest'>;
|
|
47
47
|
}
|
|
48
48
|
type RestGetRequestConfig = BaseRestRequestConfig<'get'>;
|
|
49
49
|
type RestPostRequestConfig = BaseRestRequestConfig<'post'>;
|
|
@@ -23,12 +23,12 @@ export type BaseUrl = `/${string}`;
|
|
|
23
23
|
export interface RestConfig {
|
|
24
24
|
baseUrl?: BaseUrl;
|
|
25
25
|
configs: RestRequestConfig[];
|
|
26
|
-
interceptors?: Interceptors
|
|
26
|
+
interceptors?: Interceptors<'rest'>;
|
|
27
27
|
}
|
|
28
28
|
export interface GraphqlConfig {
|
|
29
29
|
baseUrl?: BaseUrl;
|
|
30
30
|
configs: GraphQLRequestConfig[];
|
|
31
|
-
interceptors?: Interceptors
|
|
31
|
+
interceptors?: Interceptors<'graphql'>;
|
|
32
32
|
}
|
|
33
33
|
export type DatabaseConfig = {
|
|
34
34
|
data: Record<string, unknown> | `${string}.json`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type ApiType = 'rest' | 'graphql';
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { ParamsDictionary, Query as ExpressQuery } from 'express-serve-static-core';
|
|
3
|
+
import type { IncomingHttpHeaders } from 'http';
|
|
1
4
|
export type PlainObject = Record<string, any>;
|
|
2
5
|
export type Primitive = boolean | number | bigint | string | null | undefined | symbol;
|
|
6
|
+
export type Headers = IncomingHttpHeaders;
|
|
7
|
+
export type Query = ExpressQuery;
|
|
8
|
+
export type Params = ParamsDictionary;
|
|
9
|
+
export type Cookies = Record<string, string>;
|
|
3
10
|
export type Data = boolean | number | string | any[] | Record<any, any> | null | undefined;
|