mock-config-server 3.1.1 → 3.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.
Files changed (82) hide show
  1. package/README.md +174 -14
  2. package/dist/bin/validateMockServerConfig/helpers/isDescriptorValueValid/isDescriptorValueValid.d.ts +2 -1
  3. package/dist/bin/validateMockServerConfig/helpers/isDescriptorValueValid/isDescriptorValueValid.js +30 -7
  4. package/dist/bin/validateMockServerConfig/validateGraphqlConfig/validateGraphqlConfig.js +9 -3
  5. package/dist/bin/validateMockServerConfig/validateGraphqlConfig/validateRoutes/validateRoutes.js +67 -18
  6. package/dist/bin/validateMockServerConfig/validateMockServerConfig.js +2 -2
  7. package/dist/bin/validateMockServerConfig/validateQueue/validateQueue.d.ts +1 -0
  8. package/dist/bin/validateMockServerConfig/validateQueue/validateQueue.js +29 -0
  9. package/dist/bin/validateMockServerConfig/validateRestConfig/validateRoutes/validateRoutes.js +67 -18
  10. package/dist/bin/validateMockServerConfig/validateSettings/validateSettings.d.ts +1 -0
  11. package/dist/bin/validateMockServerConfig/validateSettings/validateSettings.js +34 -0
  12. package/dist/src/core/database/createDatabaseRoutes/helpers/createNestedDatabaseRoutes/createNestedDatabaseRoutes.js +51 -2
  13. package/dist/src/core/database/createDatabaseRoutes/helpers/filter/filter.d.ts +2 -0
  14. package/dist/src/core/database/createDatabaseRoutes/helpers/filter/filter.js +17 -0
  15. package/dist/src/core/database/createDatabaseRoutes/helpers/index.d.ts +1 -1
  16. package/dist/src/core/database/createDatabaseRoutes/helpers/index.js +8 -8
  17. package/dist/src/core/database/createDatabaseRoutes/helpers/pagination/pagination.d.ts +13 -0
  18. package/dist/src/core/database/createDatabaseRoutes/helpers/pagination/pagination.js +36 -0
  19. package/dist/src/core/database/createDatabaseRoutes/helpers/sort/sort.d.ts +2 -0
  20. package/dist/src/core/database/createDatabaseRoutes/helpers/sort/sort.js +42 -0
  21. package/dist/src/core/database/createDatabaseRoutes/storages/File/FileStorage.d.ts +1 -2
  22. package/dist/src/core/database/createDatabaseRoutes/storages/Memory/MemoryStorage.d.ts +1 -2
  23. package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.d.ts +7 -1
  24. package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.js +65 -24
  25. package/dist/src/core/middlewares/index.d.ts +4 -4
  26. package/dist/src/core/middlewares/index.js +28 -28
  27. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getLevenshteinDistance/getLevenshteinDistance.js +1 -0
  28. package/dist/src/core/middlewares/notFoundMiddleware/notFoundMiddleware.js +1 -3
  29. package/dist/src/core/middlewares/requestInterceptorMiddleware/requestInterceptorMiddleware.d.ts +7 -1
  30. package/dist/src/core/middlewares/requestInterceptorMiddleware/requestInterceptorMiddleware.js +6 -2
  31. package/dist/src/core/rest/createRestRoutes/createRestRoutes.d.ts +7 -1
  32. package/dist/src/core/rest/createRestRoutes/createRestRoutes.js +55 -12
  33. package/dist/src/index.d.ts +1 -2
  34. package/dist/src/index.js +4 -15
  35. package/dist/src/server/createDatabaseMockServer/createDatabaseMockServer.d.ts +3 -0
  36. package/dist/src/server/createDatabaseMockServer/createDatabaseMockServer.js +58 -0
  37. package/dist/src/server/createGraphQLMockServer/createGraphQLMockServer.d.ts +3 -0
  38. package/dist/src/server/createGraphQLMockServer/createGraphQLMockServer.js +67 -0
  39. package/dist/src/server/createMockServer/createMockServer.d.ts +1 -1
  40. package/dist/src/server/createMockServer/createMockServer.js +29 -11
  41. package/dist/src/server/createRestMockServer/createRestMockServer.d.ts +3 -0
  42. package/dist/src/server/createRestMockServer/createRestMockServer.js +67 -0
  43. package/dist/src/server/index.d.ts +6 -0
  44. package/dist/src/server/index.js +66 -0
  45. package/dist/src/server/startDatabaseMockServer/startDatabaseMockServer.d.ts +5 -0
  46. package/dist/src/server/startDatabaseMockServer/startDatabaseMockServer.js +23 -0
  47. package/dist/src/server/startGraphQLMockServer/startGraphQLMockServer.d.ts +5 -0
  48. package/dist/src/server/startGraphQLMockServer/startGraphQLMockServer.js +23 -0
  49. package/dist/src/server/startRestMockServer/startRestMockServer.d.ts +5 -0
  50. package/dist/src/server/startRestMockServer/startRestMockServer.js +23 -0
  51. package/dist/src/static/views/assets/styles/global.css +2 -2
  52. package/dist/src/static/views/components/header/index.css +4 -4
  53. package/dist/src/static/views/components/header/index.ejs +6 -6
  54. package/dist/src/static/views/components/header/index.js +1 -1
  55. package/dist/src/static/views/features/scheme/dark.css +1 -0
  56. package/dist/src/static/views/features/scheme/index.js +1 -1
  57. package/dist/src/static/views/features/scheme/light.css +1 -0
  58. package/dist/src/static/views/features/tab/index.css +4 -4
  59. package/dist/src/static/views/features/tab/index.js +12 -12
  60. package/dist/src/static/views/pages/404/index.css +4 -4
  61. package/dist/src/static/views/pages/404/index.ejs +8 -8
  62. package/dist/src/utils/constants/checkModes.d.ts +1 -1
  63. package/dist/src/utils/helpers/entities/isEntityDescriptor/isEntityDescriptor.d.ts +2 -1
  64. package/dist/src/utils/helpers/graphql/getGraphQLInput/getGraphQLInput.d.ts +7 -2
  65. package/dist/src/utils/helpers/graphql/getGraphQLInput/getGraphQLInput.js +6 -4
  66. package/dist/src/utils/helpers/graphql/index.d.ts +1 -1
  67. package/dist/src/utils/helpers/graphql/index.js +11 -11
  68. package/dist/src/utils/helpers/graphql/parseQuery/parseQuery.d.ts +1 -1
  69. package/dist/src/utils/helpers/graphql/parseQuery/parseQuery.js +1 -1
  70. package/dist/src/utils/helpers/index.d.ts +5 -5
  71. package/dist/src/utils/helpers/index.js +40 -40
  72. package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.js +19 -10
  73. package/dist/src/utils/types/graphql.d.ts +60 -51
  74. package/dist/src/utils/types/index.d.ts +1 -0
  75. package/dist/src/utils/types/index.js +11 -0
  76. package/dist/src/utils/types/interceptors.d.ts +1 -1
  77. package/dist/src/utils/types/rest.d.ts +47 -40
  78. package/dist/src/utils/types/server.d.ts +18 -4
  79. package/dist/src/utils/types/utils.d.ts +8 -0
  80. package/dist/src/utils/types/utils.js +1 -0
  81. package/dist/src/utils/types/values.d.ts +0 -1
  82. package/package.json +9 -19
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.validateSettings = void 0;
7
+ var _helpers = require("../../../src/utils/helpers");
8
+ const ALLOWED_SETTINGS = ['polling'];
9
+ const validateSetting = (setting, settingName) => {
10
+ if (settingName === 'polling' && typeof setting !== 'boolean') {
11
+ throw new Error('polling');
12
+ }
13
+ };
14
+ const validateSettings = settings => {
15
+ const isSettingsObject = (0, _helpers.isPlainObject)(settings);
16
+ if (isSettingsObject) {
17
+ Object.keys(settings).forEach(settingName => {
18
+ const isSettingAllowed = ALLOWED_SETTINGS.includes(settingName);
19
+ if (!isSettingAllowed) {
20
+ throw new Error(`settings.${settingName}`);
21
+ }
22
+ try {
23
+ validateSetting(settings[settingName], settingName);
24
+ } catch (error) {
25
+ throw new Error(`settings.${error.message}`);
26
+ }
27
+ });
28
+ return;
29
+ }
30
+ if (typeof settings !== 'undefined') {
31
+ throw new Error('settings');
32
+ }
33
+ };
34
+ exports.validateSettings = validateSettings;
@@ -5,16 +5,65 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createNestedDatabaseRoutes = void 0;
7
7
  var _array = require("../array");
8
+ var _filter = require("../filter/filter");
9
+ var _pagination = require("../pagination/pagination");
10
+ var _sort2 = require("../sort/sort");
8
11
  const createNestedDatabaseRoutes = (router, database, storage) => {
9
12
  Object.keys(database).forEach(key => {
10
13
  const collectionPath = `/${key}`;
11
14
  const itemPath = `/${key}/:id`;
12
- router.route(collectionPath).get((_request, response) => {
15
+ router.route(collectionPath).get((request, response) => {
16
+ var _request$query;
17
+ let data = storage.read(key);
18
+ if (request.query && Object.keys(request.query).length) {
19
+ const {
20
+ _page,
21
+ _limit,
22
+ _begin,
23
+ _end,
24
+ _sort,
25
+ _order,
26
+ ...filters
27
+ } = request.query;
28
+ data = (0, _filter.filter)(data, filters);
29
+ }
30
+ if ((_request$query = request.query) !== null && _request$query !== void 0 && _request$query._page) {
31
+ data = (0, _pagination.pagination)(data, request.query);
32
+ if (data._link) {
33
+ const links = {};
34
+ const fullUrl = `${request.protocol}://${request.get('host')}${request.originalUrl}`;
35
+ if (data._link.first) {
36
+ links.first = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.first}`);
37
+ }
38
+ if (data._link.prev) {
39
+ links.prev = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.prev}`);
40
+ }
41
+ if (data._link.next) {
42
+ links.next = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.next}`);
43
+ }
44
+ if (data._link.last) {
45
+ links.last = fullUrl.replace(`page=${data._link.current}`, `page=${data._link.last}`);
46
+ }
47
+ data._link = {
48
+ ...data._link,
49
+ ...links
50
+ };
51
+ response.links(links);
52
+ }
53
+ }
54
+ if (request.query && request.query._sort) {
55
+ data = (0, _sort2.sort)(data, request.query);
56
+ }
57
+ if (request.query._begin || request.query._end) {
58
+ var _request$query$_begin;
59
+ data = data.slice((_request$query$_begin = request.query._begin) !== null && _request$query$_begin !== void 0 ? _request$query$_begin : 0, request.query._end);
60
+ response.set('X-Total-Count', data.length);
61
+ }
13
62
  // ✅ important:
14
63
  // set 'Cache-Control' header for explicit browsers response revalidate
15
64
  // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
16
65
  response.set('Cache-control', 'max-age=0, must-revalidate');
17
- response.json(storage.read(key));
66
+ response.json(data);
18
67
  });
19
68
  router.route(collectionPath).post((request, response) => {
20
69
  const collection = storage.read(key);
@@ -0,0 +1,2 @@
1
+ import type { ParsedUrlQuery } from 'node:querystring';
2
+ export declare const filter: (array: any[], filters: ParsedUrlQuery) => any[];
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.filter = void 0;
7
+ var _flat = require("flat");
8
+ const filter = (array, filters) => array.filter(element => {
9
+ const flattenedElement = (0, _flat.flatten)(element);
10
+ return Object.entries(filters).every(([key, value]) => {
11
+ if (Array.isArray(value)) {
12
+ return value.includes(`${flattenedElement[key]}`);
13
+ }
14
+ return `${flattenedElement[key]}` === value;
15
+ });
16
+ });
17
+ exports.filter = filter;
@@ -1,5 +1,5 @@
1
1
  export * from './array';
2
- export * from './createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes';
3
2
  export * from './createNestedDatabaseRoutes/createNestedDatabaseRoutes';
3
+ export * from './createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes';
4
4
  export * from './createShallowDatabaseRoutes/createShallowDatabaseRoutes';
5
5
  export * from './splitDatabaseByNesting/splitDatabaseByNesting';
@@ -14,25 +14,25 @@ Object.keys(_array).forEach(function (key) {
14
14
  }
15
15
  });
16
16
  });
17
- var _createRewrittenDatabaseRoutes = require("./createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes");
18
- Object.keys(_createRewrittenDatabaseRoutes).forEach(function (key) {
17
+ var _createNestedDatabaseRoutes = require("./createNestedDatabaseRoutes/createNestedDatabaseRoutes");
18
+ Object.keys(_createNestedDatabaseRoutes).forEach(function (key) {
19
19
  if (key === "default" || key === "__esModule") return;
20
- if (key in exports && exports[key] === _createRewrittenDatabaseRoutes[key]) return;
20
+ if (key in exports && exports[key] === _createNestedDatabaseRoutes[key]) return;
21
21
  Object.defineProperty(exports, key, {
22
22
  enumerable: true,
23
23
  get: function () {
24
- return _createRewrittenDatabaseRoutes[key];
24
+ return _createNestedDatabaseRoutes[key];
25
25
  }
26
26
  });
27
27
  });
28
- var _createNestedDatabaseRoutes = require("./createNestedDatabaseRoutes/createNestedDatabaseRoutes");
29
- Object.keys(_createNestedDatabaseRoutes).forEach(function (key) {
28
+ var _createRewrittenDatabaseRoutes = require("./createRewrittenDatabaseRoutes/createRewrittenDatabaseRoutes");
29
+ Object.keys(_createRewrittenDatabaseRoutes).forEach(function (key) {
30
30
  if (key === "default" || key === "__esModule") return;
31
- if (key in exports && exports[key] === _createNestedDatabaseRoutes[key]) return;
31
+ if (key in exports && exports[key] === _createRewrittenDatabaseRoutes[key]) return;
32
32
  Object.defineProperty(exports, key, {
33
33
  enumerable: true,
34
34
  get: function () {
35
- return _createNestedDatabaseRoutes[key];
35
+ return _createRewrittenDatabaseRoutes[key];
36
36
  }
37
37
  });
38
38
  });
@@ -0,0 +1,13 @@
1
+ import type { ParsedUrlQuery } from 'node:querystring';
2
+ export declare const pagination: (array: any[], queries: ParsedUrlQuery) => any[] | {
3
+ _link: {
4
+ count: number;
5
+ pages: number;
6
+ first: number;
7
+ current: number;
8
+ next: number | null;
9
+ prev: number | null;
10
+ last: number | null;
11
+ };
12
+ results: any[];
13
+ };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.pagination = void 0;
7
+ const DEFAULT_LIMIT = 10;
8
+ const pagination = (array, queries) => {
9
+ const {
10
+ _page
11
+ } = queries;
12
+ if (!_page || +_page <= 0) return array;
13
+ const page = +_page;
14
+ const limit = queries._limit && +queries._limit > 0 ? +queries._limit : DEFAULT_LIMIT;
15
+ const pages = Math.ceil(array.length / limit);
16
+ if (page > pages) return array;
17
+ const start = page * limit - limit;
18
+ const end = page * limit;
19
+ const results = array.slice(start, end);
20
+ const next = page + 1 <= pages ? page + 1 : null;
21
+ const prev = page - 1 !== 0 ? page - 1 : null;
22
+ const last = pages > 0 ? pages : null;
23
+ return {
24
+ _link: {
25
+ count: array.length,
26
+ pages,
27
+ first: 1,
28
+ current: page,
29
+ next,
30
+ prev,
31
+ last
32
+ },
33
+ results
34
+ };
35
+ };
36
+ exports.pagination = pagination;
@@ -0,0 +1,2 @@
1
+ import type { ParsedUrlQuery } from 'node:querystring';
2
+ export declare const sort: (array: any[], queries: ParsedUrlQuery) => any[];
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.sort = void 0;
7
+ var _flat = _interopRequireDefault(require("flat"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ const DEFAULT_ORDER = 'asc';
10
+ const getOrder = order => {
11
+ if (order === 'asc' || order === 'desc') return order;
12
+ return DEFAULT_ORDER;
13
+ };
14
+ const sortArray = (array, key, order) => array.sort((a, b) => {
15
+ const flattenedA = (0, _flat.default)(a);
16
+ const flattenedB = (0, _flat.default)(b);
17
+ if (!flattenedA[key] || !flattenedB[key]) return 0;
18
+ if (typeof flattenedA[key] === 'string' && typeof flattenedB[key] === 'string') {
19
+ return order === 'asc' ? flattenedA[key].localeCompare(flattenedB[key]) : flattenedB[key].localeCompare(flattenedA[key]);
20
+ }
21
+ return order === 'asc' ? Number(flattenedA[key]) - Number(flattenedB[key]) : Number(flattenedB[key]) - Number(flattenedA[key]);
22
+ });
23
+ const sort = (array, queries) => {
24
+ const {
25
+ _sort,
26
+ _order = DEFAULT_ORDER
27
+ } = queries;
28
+ if (!_sort) return array;
29
+ const result = [...array];
30
+ if (Array.isArray(_sort)) {
31
+ const orders = Array.isArray(_order) ? _order : [_order];
32
+ _sort.forEach((key, index) => {
33
+ const order = getOrder(orders[index]);
34
+ sortArray(result, key, order);
35
+ });
36
+ return result;
37
+ }
38
+ const order = getOrder(Array.isArray(_order) ? _order[0] : _order);
39
+ sortArray(result, _sort, order);
40
+ return result;
41
+ };
42
+ exports.sort = sort;
@@ -1,6 +1,5 @@
1
1
  type Index = string | number;
2
- type Object = Record<Index, any>;
3
- export declare class FileStorage<T extends Object = Object> {
2
+ export declare class FileStorage<T extends Record<Index, any> = Record<Index, any>> {
4
3
  private readonly fileWriter;
5
4
  private readonly data;
6
5
  constructor(fileName: string);
@@ -1,6 +1,5 @@
1
1
  type Index = string | number;
2
- type Object = Record<Index, any>;
3
- export declare class MemoryStorage<T extends Object = Object> {
2
+ export declare class MemoryStorage<T extends Record<Index, any> = Record<Index, any>> {
4
3
  private readonly data;
5
4
  constructor(initialData: T);
6
5
  read(key?: Index | Index[]): any;
@@ -1,3 +1,9 @@
1
1
  import type { IRouter } from 'express';
2
2
  import type { GraphqlConfig, Interceptors } from '../../../utils/types';
3
- export declare const createGraphQLRoutes: (router: IRouter, graphqlConfig: GraphqlConfig, serverResponseInterceptors?: Interceptors['response']) => IRouter;
3
+ interface CreateGraphQLRoutesParams {
4
+ router: IRouter;
5
+ graphqlConfig: GraphqlConfig;
6
+ serverResponseInterceptor?: Interceptors['response'];
7
+ }
8
+ export declare const createGraphQLRoutes: ({ router, graphqlConfig, serverResponseInterceptor }: CreateGraphQLRoutesParams) => IRouter;
9
+ export {};
@@ -7,12 +7,16 @@ exports.createGraphQLRoutes = void 0;
7
7
  var _flat = require("flat");
8
8
  var _helpers = require("../../../utils/helpers");
9
9
  var _helpers2 = require("./helpers");
10
- const createGraphQLRoutes = (router, graphqlConfig, serverResponseInterceptors) => {
10
+ const createGraphQLRoutes = ({
11
+ router,
12
+ graphqlConfig,
13
+ serverResponseInterceptor
14
+ }) => {
11
15
  const preparedGraphQLRequestConfig = (0, _helpers2.prepareGraphQLRequestConfigs)(graphqlConfig.configs);
12
16
  const graphqlMiddleware = async (request, response, next) => {
13
- var _matchedRequestConfig, _matchedRouteConfig$e, _matchedRouteConfig$i, _matchedRequestConfig2, _graphqlConfig$interc;
17
+ var _matchedRequestConfig, _matchedRouteConfig$s, _matchedRouteConfig$e, _matchedRouteConfig$i, _matchedRequestConfig2, _graphqlConfig$interc;
14
18
  const graphQLInput = (0, _helpers.getGraphQLInput)(request);
15
- if (!graphQLInput || !graphQLInput.query) {
19
+ if (!graphQLInput.query) {
16
20
  return response.status(400).json({
17
21
  message: 'Query is missing, you must pass a valid GraphQL query'
18
22
  });
@@ -23,16 +27,16 @@ const createGraphQLRoutes = (router, graphqlConfig, serverResponseInterceptors)
23
27
  message: 'Query is invalid, you must use a valid GraphQL query'
24
28
  });
25
29
  }
26
- if (!query.operationName || !query.operationType) {
27
- return response.status(400).json({
28
- message: `You should to specify operationName and operationType for ${request.method}:${request.baseUrl}${request.path}`
29
- });
30
- }
31
30
  const matchedRequestConfig = preparedGraphQLRequestConfig.find(requestConfig => {
32
- if (requestConfig.operationName instanceof RegExp) {
33
- return new RegExp(requestConfig.operationName).test(query.operationName) && requestConfig.operationType === query.operationType;
31
+ var _graphQLInput$query;
32
+ if (requestConfig.operationType !== query.operationType) return false;
33
+ if ('query' in requestConfig && requestConfig.query.replace(/\s+/gi, ' ') !== ((_graphQLInput$query = graphQLInput.query) === null || _graphQLInput$query === void 0 ? void 0 : _graphQLInput$query.replace(/\s+/gi, ' '))) return false;
34
+ if ('operationName' in requestConfig) {
35
+ if (!query.operationName) return false;
36
+ if (requestConfig.operationName instanceof RegExp) return new RegExp(requestConfig.operationName).test(query.operationName);
37
+ return requestConfig.operationName === query.operationName;
34
38
  }
35
- return requestConfig.operationName === query.operationName && requestConfig.operationType === query.operationType;
39
+ return true;
36
40
  });
37
41
  if (!matchedRequestConfig) {
38
42
  return next();
@@ -49,25 +53,29 @@ const createGraphQLRoutes = (router, graphqlConfig, serverResponseInterceptors)
49
53
  }) => {
50
54
  if (!entities) return true;
51
55
  const entries = Object.entries(entities);
52
- return entries.every(([entityName, valueOrDescriptor]) => {
56
+ return entries.every(([entityName, entityDescriptorOrValue]) => {
53
57
  const {
54
58
  checkMode,
55
- value: descriptorValue
56
- } = (0, _helpers.convertToEntityDescriptor)(valueOrDescriptor);
59
+ value: entityDescriptorValue
60
+ } = (0, _helpers.convertToEntityDescriptor)(entityDescriptorOrValue);
57
61
 
58
62
  // ✅ important: check whole variables as plain value strictly if descriptor used for variables
59
- const isVariablesPlain = entityName === 'variables' && (0, _helpers.isEntityDescriptor)(valueOrDescriptor);
60
- if (isVariablesPlain) {
61
- // important: getGraphQLInput returns empty object if variables not sent or invalid, so count {} as undefined
62
- return (0, _helpers.resolveEntityValues)(checkMode, Object.keys(graphQLInput.variables).length ? graphQLInput.variables : undefined, descriptorValue);
63
+ const isEntityVariablesByTopLevelDescriptor = entityName === 'variables' && (0, _helpers.isEntityDescriptor)(entityDescriptorOrValue);
64
+ if (isEntityVariablesByTopLevelDescriptor) {
65
+ return (0, _helpers.resolveEntityValues)(checkMode, graphQLInput.variables, entityDescriptorValue);
63
66
  }
64
- const mappedEntityDescriptors = Object.entries(valueOrDescriptor);
65
- return mappedEntityDescriptors.every(([entityKey, mappedEntityDescriptor]) => {
67
+ const isEntityVariablesByTopLevelArray = entityName === 'variables' && Array.isArray(entityDescriptorOrValue);
68
+ if (isEntityVariablesByTopLevelArray) {
69
+ return entityDescriptorOrValue.some(entityDescriptorOrValueElement => (0, _helpers.resolveEntityValues)(checkMode, graphQLInput.variables, entityDescriptorOrValueElement));
70
+ }
71
+ const recordOrArrayEntries = Object.entries(entityDescriptorOrValue);
72
+ return recordOrArrayEntries.every(([entityKey, entityValue]) => {
66
73
  const {
67
74
  checkMode,
68
75
  value: descriptorValue
69
- } = (0, _helpers.convertToEntityDescriptor)(mappedEntityDescriptor);
76
+ } = (0, _helpers.convertToEntityDescriptor)(entityValue);
70
77
  const flattenEntity = (0, _flat.flatten)(entityName === 'variables' ? graphQLInput.variables : request[entityName]);
78
+
71
79
  // ✅ important: transform header keys to lower case because browsers send headers in lowercase
72
80
  return (0, _helpers.resolveEntityValues)(checkMode, flattenEntity[entityName === 'headers' ? entityKey.toLowerCase() : entityKey], descriptorValue);
73
81
  });
@@ -76,16 +84,49 @@ const createGraphQLRoutes = (router, graphqlConfig, serverResponseInterceptors)
76
84
  if (!matchedRouteConfig) {
77
85
  return next();
78
86
  }
79
- const matchedRouteConfigData = typeof matchedRouteConfig.data === 'function' ? await matchedRouteConfig.data(request, (_matchedRouteConfig$e = matchedRouteConfig.entities) !== null && _matchedRouteConfig$e !== void 0 ? _matchedRouteConfig$e : {}) : matchedRouteConfig.data;
87
+ let matchedRouteConfigData = null;
88
+ if ((_matchedRouteConfig$s = matchedRouteConfig.settings) !== null && _matchedRouteConfig$s !== void 0 && _matchedRouteConfig$s.polling && 'queue' in matchedRouteConfig) {
89
+ var _shallowMatchedRouteC;
90
+ if (!matchedRouteConfig.queue.length) return next();
91
+ const shallowMatchedRouteConfig = matchedRouteConfig;
92
+ let index = (_shallowMatchedRouteC = shallowMatchedRouteConfig.__pollingIndex) !== null && _shallowMatchedRouteC !== void 0 ? _shallowMatchedRouteC : 0;
93
+ const {
94
+ time,
95
+ data
96
+ } = matchedRouteConfig.queue[index];
97
+ const updateIndex = () => {
98
+ if (matchedRouteConfig.queue.length - 1 === index) {
99
+ index = 0;
100
+ } else {
101
+ index += 1;
102
+ }
103
+ shallowMatchedRouteConfig.__pollingIndex = index;
104
+ };
105
+ if (time && !shallowMatchedRouteConfig.__timeoutInProgress) {
106
+ shallowMatchedRouteConfig.__timeoutInProgress = true;
107
+ setTimeout(() => {
108
+ shallowMatchedRouteConfig.__timeoutInProgress = false;
109
+ updateIndex();
110
+ }, time);
111
+ }
112
+ if (!time && !shallowMatchedRouteConfig.__timeoutInProgress) {
113
+ updateIndex();
114
+ }
115
+ matchedRouteConfigData = data;
116
+ }
117
+ if ('data' in matchedRouteConfig) {
118
+ matchedRouteConfigData = matchedRouteConfig.data;
119
+ }
120
+ const resolvedData = typeof matchedRouteConfigData === 'function' ? await matchedRouteConfigData(request, (_matchedRouteConfig$e = matchedRouteConfig.entities) !== null && _matchedRouteConfig$e !== void 0 ? _matchedRouteConfig$e : {}) : matchedRouteConfigData;
80
121
  const data = await (0, _helpers.callResponseInterceptors)({
81
- data: matchedRouteConfigData,
122
+ data: resolvedData,
82
123
  request,
83
124
  response,
84
125
  interceptors: {
85
126
  routeInterceptor: (_matchedRouteConfig$i = matchedRouteConfig.interceptors) === null || _matchedRouteConfig$i === void 0 ? void 0 : _matchedRouteConfig$i.response,
86
127
  requestInterceptor: (_matchedRequestConfig2 = matchedRequestConfig.interceptors) === null || _matchedRequestConfig2 === void 0 ? void 0 : _matchedRequestConfig2.response,
87
128
  apiInterceptor: (_graphqlConfig$interc = graphqlConfig.interceptors) === null || _graphqlConfig$interc === void 0 ? void 0 : _graphqlConfig$interc.response,
88
- serverInterceptor: serverResponseInterceptors
129
+ serverInterceptor: serverResponseInterceptor
89
130
  }
90
131
  });
91
132
 
@@ -1,8 +1,8 @@
1
- export * from './staticMiddleware/staticMiddleware';
1
+ export * from './cookieParseMiddleware/cookieParseMiddleware';
2
2
  export * from './corsMiddleware/corsMiddleware';
3
+ export * from './destroyerMiddleware/destroyerMiddleware';
4
+ export * from './errorMiddleware/errorMiddleware';
3
5
  export * from './noCorsMiddleware/noCorsMiddleware';
4
6
  export * from './notFoundMiddleware/notFoundMiddleware';
5
7
  export * from './requestInterceptorMiddleware/requestInterceptorMiddleware';
6
- export * from './destroyerMiddleware/destroyerMiddleware';
7
- export * from './cookieParseMiddleware/cookieParseMiddleware';
8
- export * from './errorMiddleware/errorMiddleware';
8
+ export * from './staticMiddleware/staticMiddleware';
@@ -3,14 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- var _staticMiddleware = require("./staticMiddleware/staticMiddleware");
7
- Object.keys(_staticMiddleware).forEach(function (key) {
6
+ var _cookieParseMiddleware = require("./cookieParseMiddleware/cookieParseMiddleware");
7
+ Object.keys(_cookieParseMiddleware).forEach(function (key) {
8
8
  if (key === "default" || key === "__esModule") return;
9
- if (key in exports && exports[key] === _staticMiddleware[key]) return;
9
+ if (key in exports && exports[key] === _cookieParseMiddleware[key]) return;
10
10
  Object.defineProperty(exports, key, {
11
11
  enumerable: true,
12
12
  get: function () {
13
- return _staticMiddleware[key];
13
+ return _cookieParseMiddleware[key];
14
14
  }
15
15
  });
16
16
  });
@@ -25,69 +25,69 @@ Object.keys(_corsMiddleware).forEach(function (key) {
25
25
  }
26
26
  });
27
27
  });
28
- var _noCorsMiddleware = require("./noCorsMiddleware/noCorsMiddleware");
29
- Object.keys(_noCorsMiddleware).forEach(function (key) {
28
+ var _destroyerMiddleware = require("./destroyerMiddleware/destroyerMiddleware");
29
+ Object.keys(_destroyerMiddleware).forEach(function (key) {
30
30
  if (key === "default" || key === "__esModule") return;
31
- if (key in exports && exports[key] === _noCorsMiddleware[key]) return;
31
+ if (key in exports && exports[key] === _destroyerMiddleware[key]) return;
32
32
  Object.defineProperty(exports, key, {
33
33
  enumerable: true,
34
34
  get: function () {
35
- return _noCorsMiddleware[key];
35
+ return _destroyerMiddleware[key];
36
36
  }
37
37
  });
38
38
  });
39
- var _notFoundMiddleware = require("./notFoundMiddleware/notFoundMiddleware");
40
- Object.keys(_notFoundMiddleware).forEach(function (key) {
39
+ var _errorMiddleware = require("./errorMiddleware/errorMiddleware");
40
+ Object.keys(_errorMiddleware).forEach(function (key) {
41
41
  if (key === "default" || key === "__esModule") return;
42
- if (key in exports && exports[key] === _notFoundMiddleware[key]) return;
42
+ if (key in exports && exports[key] === _errorMiddleware[key]) return;
43
43
  Object.defineProperty(exports, key, {
44
44
  enumerable: true,
45
45
  get: function () {
46
- return _notFoundMiddleware[key];
46
+ return _errorMiddleware[key];
47
47
  }
48
48
  });
49
49
  });
50
- var _requestInterceptorMiddleware = require("./requestInterceptorMiddleware/requestInterceptorMiddleware");
51
- Object.keys(_requestInterceptorMiddleware).forEach(function (key) {
50
+ var _noCorsMiddleware = require("./noCorsMiddleware/noCorsMiddleware");
51
+ Object.keys(_noCorsMiddleware).forEach(function (key) {
52
52
  if (key === "default" || key === "__esModule") return;
53
- if (key in exports && exports[key] === _requestInterceptorMiddleware[key]) return;
53
+ if (key in exports && exports[key] === _noCorsMiddleware[key]) return;
54
54
  Object.defineProperty(exports, key, {
55
55
  enumerable: true,
56
56
  get: function () {
57
- return _requestInterceptorMiddleware[key];
57
+ return _noCorsMiddleware[key];
58
58
  }
59
59
  });
60
60
  });
61
- var _destroyerMiddleware = require("./destroyerMiddleware/destroyerMiddleware");
62
- Object.keys(_destroyerMiddleware).forEach(function (key) {
61
+ var _notFoundMiddleware = require("./notFoundMiddleware/notFoundMiddleware");
62
+ Object.keys(_notFoundMiddleware).forEach(function (key) {
63
63
  if (key === "default" || key === "__esModule") return;
64
- if (key in exports && exports[key] === _destroyerMiddleware[key]) return;
64
+ if (key in exports && exports[key] === _notFoundMiddleware[key]) return;
65
65
  Object.defineProperty(exports, key, {
66
66
  enumerable: true,
67
67
  get: function () {
68
- return _destroyerMiddleware[key];
68
+ return _notFoundMiddleware[key];
69
69
  }
70
70
  });
71
71
  });
72
- var _cookieParseMiddleware = require("./cookieParseMiddleware/cookieParseMiddleware");
73
- Object.keys(_cookieParseMiddleware).forEach(function (key) {
72
+ var _requestInterceptorMiddleware = require("./requestInterceptorMiddleware/requestInterceptorMiddleware");
73
+ Object.keys(_requestInterceptorMiddleware).forEach(function (key) {
74
74
  if (key === "default" || key === "__esModule") return;
75
- if (key in exports && exports[key] === _cookieParseMiddleware[key]) return;
75
+ if (key in exports && exports[key] === _requestInterceptorMiddleware[key]) return;
76
76
  Object.defineProperty(exports, key, {
77
77
  enumerable: true,
78
78
  get: function () {
79
- return _cookieParseMiddleware[key];
79
+ return _requestInterceptorMiddleware[key];
80
80
  }
81
81
  });
82
82
  });
83
- var _errorMiddleware = require("./errorMiddleware/errorMiddleware");
84
- Object.keys(_errorMiddleware).forEach(function (key) {
83
+ var _staticMiddleware = require("./staticMiddleware/staticMiddleware");
84
+ Object.keys(_staticMiddleware).forEach(function (key) {
85
85
  if (key === "default" || key === "__esModule") return;
86
- if (key in exports && exports[key] === _errorMiddleware[key]) return;
86
+ if (key in exports && exports[key] === _staticMiddleware[key]) return;
87
87
  Object.defineProperty(exports, key, {
88
88
  enumerable: true,
89
89
  get: function () {
90
- return _errorMiddleware[key];
90
+ return _staticMiddleware[key];
91
91
  }
92
92
  });
93
93
  });
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.getLevenshteinDistance = void 0;
7
+ /* eslint-disable eslint-comments/disable-enable-pair, eslint-comments/no-unlimited-disable */
7
8
  /* eslint-disable */
8
9
 
9
10
  const min = (d0, d1, d2, bx, ay) => d0 < d1 || d2 < d1 ? d0 > d2 ? d2 + 1 : d0 + 1 : bx === ay ? d1 : d1 + 1;
@@ -22,9 +22,7 @@ const notFoundMiddleware = (server, mockServerConfig) => {
22
22
  path: `${serverBaseUrl !== null && serverBaseUrl !== void 0 ? serverBaseUrl : ''}${(_rest$baseUrl = rest === null || rest === void 0 ? void 0 : rest.baseUrl) !== null && _rest$baseUrl !== void 0 ? _rest$baseUrl : ''}${request.path}`
23
23
  };
24
24
  })) !== null && _rest$configs$filter$ !== void 0 ? _rest$configs$filter$ : [];
25
- const graphqlRequestConfigs = (_graphql$configs$filt = graphql === null || graphql === void 0 ? void 0 : graphql.configs.filter(({
26
- operationName
27
- }) => !(operationName instanceof RegExp)).map(request => {
25
+ const graphqlRequestConfigs = (_graphql$configs$filt = graphql === null || graphql === void 0 ? void 0 : graphql.configs.filter(request => 'operationName' in request && !(request.operationName instanceof RegExp)).map(request => {
28
26
  var _graphql$baseUrl;
29
27
  return {
30
28
  operationType: request.operationType,
@@ -1,3 +1,9 @@
1
1
  import type { Express } from 'express';
2
2
  import type { RequestInterceptor } from '../../../utils/types';
3
- export declare const requestInterceptorMiddleware: (server: Express, interceptor: RequestInterceptor) => void;
3
+ interface RequestInterceptorMiddlewareParams {
4
+ server: Express;
5
+ path?: string;
6
+ interceptor: RequestInterceptor;
7
+ }
8
+ export declare const requestInterceptorMiddleware: ({ server, path, interceptor }: RequestInterceptorMiddlewareParams) => void;
9
+ export {};
@@ -5,8 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.requestInterceptorMiddleware = void 0;
7
7
  var _helpers = require("../../../utils/helpers");
8
- const requestInterceptorMiddleware = (server, interceptor) => {
9
- server.use((0, _helpers.asyncHandler)(async (request, _response, next) => {
8
+ const requestInterceptorMiddleware = ({
9
+ server,
10
+ path = '*',
11
+ interceptor
12
+ }) => {
13
+ server.use(path, (0, _helpers.asyncHandler)(async (request, _response, next) => {
10
14
  await (0, _helpers.callRequestInterceptor)({
11
15
  request,
12
16
  interceptor
@@ -1,3 +1,9 @@
1
1
  import type { IRouter } from 'express';
2
2
  import type { Interceptors, RestConfig } from '../../../utils/types';
3
- export declare const createRestRoutes: (router: IRouter, restConfig: RestConfig, serverResponseInterceptors?: Interceptors['response']) => IRouter;
3
+ interface CreateRestRoutesParams {
4
+ router: IRouter;
5
+ restConfig: RestConfig;
6
+ serverResponseInterceptor?: Interceptors['response'];
7
+ }
8
+ export declare const createRestRoutes: ({ router, restConfig, serverResponseInterceptor }: CreateRestRoutesParams) => IRouter;
9
+ export {};