mock-config-server 3.7.0 → 4.0.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 (216) hide show
  1. package/README.md +272 -224
  2. package/dist/bin/bin.js +1 -1
  3. package/dist/bin/build.d.ts +3 -1
  4. package/dist/bin/build.js +10 -0
  5. package/dist/bin/helpers/createTemplate.d.ts +3 -3
  6. package/dist/bin/helpers/createTemplate.js +1 -1
  7. package/dist/bin/helpers/index.d.ts +0 -3
  8. package/dist/bin/helpers/index.js +0 -3
  9. package/dist/bin/helpers/resolveConfigFile.d.ts +2 -2
  10. package/dist/bin/helpers/resolveConfigFile.js +2 -2
  11. package/dist/bin/helpers/resolveConfigFilePath.js +4 -4
  12. package/dist/bin/helpers/resolveExportsFromSourceCode.js +1 -2
  13. package/dist/bin/init.js +5 -8
  14. package/dist/bin/run.d.ts +1 -2
  15. package/dist/bin/run.js +1 -6
  16. package/dist/bin/runFlatConfig.d.ts +5 -0
  17. package/dist/bin/runFlatConfig.js +36 -0
  18. package/dist/bin/templates/js/full/mock-server.config.js +10 -7
  19. package/dist/bin/templates/js/graphql/mock-server.config.js +11 -6
  20. package/dist/bin/templates/js/rest/mock-server.config.js +11 -6
  21. package/dist/bin/templates/ts/full/mock-requests/graphql/index.ts +2 -2
  22. package/dist/bin/templates/ts/full/mock-requests/graphql/user.ts +37 -37
  23. package/dist/bin/templates/ts/full/mock-requests/graphql/users.ts +14 -14
  24. package/dist/bin/templates/ts/full/mock-requests/rest/index.ts +2 -2
  25. package/dist/bin/templates/ts/full/mock-requests/rest/user.ts +37 -37
  26. package/dist/bin/templates/ts/full/mock-requests/rest/users.ts +14 -14
  27. package/dist/bin/templates/ts/full/mock-server.config.ts +11 -8
  28. package/dist/bin/templates/ts/graphql/mock-requests/index.ts +2 -2
  29. package/dist/bin/templates/ts/graphql/mock-requests/user.ts +37 -37
  30. package/dist/bin/templates/ts/graphql/mock-requests/users.ts +14 -14
  31. package/dist/bin/templates/ts/graphql/mock-server.config.ts +12 -7
  32. package/dist/bin/templates/ts/rest/mock-requests/index.ts +2 -2
  33. package/dist/bin/templates/ts/rest/mock-requests/user.ts +37 -37
  34. package/dist/bin/templates/ts/rest/mock-requests/users.ts +14 -14
  35. package/dist/bin/templates/ts/rest/mock-server.config.ts +12 -7
  36. package/dist/src/core/database/createDatabaseRoutes/createDatabaseRoutes.js +2 -1
  37. package/dist/src/core/database/createDatabaseRoutes/helpers/createNestedDatabaseRoutes/createNestedDatabaseRoutes.js +8 -12
  38. package/dist/src/core/database/createDatabaseRoutes/helpers/filter/filter.d.ts +0 -1
  39. package/dist/src/core/database/createDatabaseRoutes/helpers/pagination/pagination.d.ts +0 -1
  40. package/dist/src/core/database/createDatabaseRoutes/helpers/search/search.d.ts +0 -1
  41. package/dist/src/core/database/createDatabaseRoutes/helpers/sort/sort.d.ts +0 -1
  42. package/dist/src/core/database/createDatabaseRoutes/helpers/splitDatabaseByNesting/splitDatabaseByNesting.d.ts +1 -1
  43. package/dist/src/core/database/createDatabaseRoutes/storages/File/FileStorage.d.ts +5 -6
  44. package/dist/src/core/database/createDatabaseRoutes/storages/File/FileStorage.js +4 -4
  45. package/dist/src/core/database/createDatabaseRoutes/storages/File/FileWriter.js +2 -2
  46. package/dist/src/core/database/createDatabaseRoutes/storages/Memory/MemoryStorage.d.ts +6 -7
  47. package/dist/src/core/database/createOrm/createOrm.d.ts +2 -0
  48. package/dist/src/core/database/createOrm/createOrm.js +119 -0
  49. package/dist/src/core/database/createStorage/createStorage.d.ts +2 -0
  50. package/dist/src/core/database/createStorage/createStorage.js +13 -0
  51. package/dist/src/core/database/index.d.ts +2 -0
  52. package/dist/src/core/database/index.js +2 -0
  53. package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.d.ts +1 -1
  54. package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.js +39 -17
  55. package/dist/src/core/graphql/createGraphQLRoutes/helpers/prepareGraphQLRequestConfigs/prepareGraphQLRequestConfigs.js +2 -2
  56. package/dist/src/core/middlewares/contextMiddleware/contextMiddleware.d.ts +2 -2
  57. package/dist/src/core/middlewares/contextMiddleware/contextMiddleware.js +24 -12
  58. package/dist/src/core/middlewares/destroyerMiddleware/destroyerMiddleware.d.ts +1 -2
  59. package/dist/src/core/middlewares/index.d.ts +0 -1
  60. package/dist/src/core/middlewares/index.js +0 -1
  61. package/dist/src/core/middlewares/requestInterceptorMiddleware/requestInterceptorMiddleware.d.ts +2 -2
  62. package/dist/src/core/rest/createRestRoutes/createRestRoutes.d.ts +1 -1
  63. package/dist/src/core/rest/createRestRoutes/createRestRoutes.js +80 -24
  64. package/dist/src/server/createDatabaseMockServer/createDatabaseMockServer.d.ts +1 -1
  65. package/dist/src/server/createDatabaseMockServer/createDatabaseMockServer.js +6 -6
  66. package/dist/src/server/createFlatMockServer/createFlatMockServer.d.ts +3 -0
  67. package/dist/src/server/createFlatMockServer/createFlatMockServer.js +127 -0
  68. package/dist/src/server/createGraphQLMockServer/createGraphQLMockServer.d.ts +1 -1
  69. package/dist/src/server/createGraphQLMockServer/createGraphQLMockServer.js +3 -6
  70. package/dist/src/server/createMockServer/createMockServer.d.ts +1 -1
  71. package/dist/src/server/createMockServer/createMockServer.js +3 -5
  72. package/dist/src/server/createRestMockServer/createRestMockServer.d.ts +1 -1
  73. package/dist/src/server/createRestMockServer/createRestMockServer.js +3 -6
  74. package/dist/src/server/index.d.ts +2 -0
  75. package/dist/src/server/index.js +2 -0
  76. package/dist/src/server/startDatabaseMockServer/startDatabaseMockServer.d.ts +1 -2
  77. package/dist/src/server/startFlatMockServer/startFlatMockServer.d.ts +4 -0
  78. package/dist/src/server/startFlatMockServer/startFlatMockServer.js +28 -0
  79. package/dist/src/server/startGraphQLMockServer/startGraphQLMockServer.d.ts +1 -2
  80. package/dist/src/server/startMockServer/startMockServer.d.ts +1 -2
  81. package/dist/src/server/startRestMockServer/startRestMockServer.d.ts +1 -2
  82. package/dist/src/utils/constants/checkModes.d.ts +1 -3
  83. package/dist/src/utils/constants/checkModes.js +3 -19
  84. package/dist/src/utils/helpers/config/resolveEntityValues/resolveEntityValues.d.ts +20 -2
  85. package/dist/src/utils/helpers/config/resolveEntityValues/resolveEntityValues.js +37 -71
  86. package/dist/src/utils/helpers/files/index.d.ts +1 -0
  87. package/dist/src/utils/helpers/files/index.js +1 -0
  88. package/dist/src/utils/helpers/files/isFileDescriptor/isFileDescriptor.d.ts +2 -0
  89. package/dist/src/utils/helpers/files/isFileDescriptor/isFileDescriptor.js +16 -0
  90. package/dist/src/utils/helpers/files/isFilePathValid/isFilePathValid.js +3 -3
  91. package/dist/src/utils/helpers/graphql/parseQuery/parseQuery.d.ts +1 -1
  92. package/dist/src/utils/helpers/index.d.ts +0 -1
  93. package/dist/src/utils/helpers/index.js +0 -1
  94. package/dist/src/utils/helpers/interceptors/callRequestInterceptor/callRequestInterceptor.d.ts +1 -1
  95. package/dist/src/utils/helpers/interceptors/callRequestInterceptor/callRequestInterceptor.js +2 -1
  96. package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.js +10 -5
  97. package/dist/src/utils/helpers/logger/callResponseLogger/callResponseLogger.d.ts +1 -1
  98. package/dist/src/utils/helpers/tests/createTmpDir.js +4 -4
  99. package/dist/src/utils/helpers/url/convertWin32PathToUnix/convertWin32PathToUnix.js +1 -1
  100. package/dist/src/utils/helpers/url/urlJoin/urlJoin.js +4 -4
  101. package/dist/src/utils/types/checkModes.d.ts +14 -7
  102. package/dist/src/utils/types/database.d.ts +30 -0
  103. package/dist/src/utils/types/entities.d.ts +13 -43
  104. package/dist/src/utils/types/files.d.ts +5 -0
  105. package/dist/src/utils/types/files.js +4 -0
  106. package/dist/src/utils/types/graphql.d.ts +9 -8
  107. package/dist/src/utils/types/index.d.ts +1 -0
  108. package/dist/src/utils/types/index.js +1 -0
  109. package/dist/src/utils/types/interceptors.d.ts +21 -16
  110. package/dist/src/utils/types/logger.d.ts +11 -11
  111. package/dist/src/utils/types/rest.d.ts +17 -12
  112. package/dist/src/utils/types/server.d.ts +48 -20
  113. package/dist/src/utils/types/shared.d.ts +1 -1
  114. package/dist/src/utils/types/utils.d.ts +4 -4
  115. package/dist/src/utils/types/values.d.ts +3 -4
  116. package/dist/{bin/validateMockServerConfig → src/utils/validate}/corsSchema/corsSchema.d.ts +2 -2
  117. package/dist/{bin/helpers → src/utils/validate}/getMostSpecificPathFromError.d.ts +1 -1
  118. package/dist/src/utils/validate/getValidationMessageFromPath.d.ts +1 -0
  119. package/dist/src/utils/validate/graphqlConfigSchema/graphqlConfigSchema.d.ts +535 -0
  120. package/dist/{bin/validateMockServerConfig → src/utils/validate}/graphqlConfigSchema/graphqlConfigSchema.js +14 -6
  121. package/dist/{bin/validateMockServerConfig → src/utils/validate}/graphqlConfigSchema/routeConfigSchema/routeConfigSchema.d.ts +20 -5
  122. package/dist/{bin/validateMockServerConfig → src/utils/validate}/graphqlConfigSchema/routeConfigSchema/routeConfigSchema.js +5 -5
  123. package/dist/src/utils/validate/index.d.ts +14 -0
  124. package/dist/src/utils/validate/index.js +31 -0
  125. package/dist/{bin/helpers → src/utils/validate}/isOnlyRequestedDataResolvingPropertyExists.d.ts +1 -1
  126. package/dist/src/utils/validate/queueSchema/queueSchema.d.ts +20 -0
  127. package/dist/src/utils/validate/queueSchema/queueSchema.js +24 -0
  128. package/dist/src/utils/validate/restConfigSchema/restConfigSchema.d.ts +1659 -0
  129. package/dist/{bin/validateMockServerConfig → src/utils/validate}/restConfigSchema/restConfigSchema.js +13 -5
  130. package/dist/{bin/validateMockServerConfig → src/utils/validate}/restConfigSchema/routeConfigSchema/routeConfigSchema.d.ts +21 -6
  131. package/dist/{bin/validateMockServerConfig → src/utils/validate}/restConfigSchema/routeConfigSchema/routeConfigSchema.js +6 -6
  132. package/dist/src/utils/validate/utils/checkModeSchema/checkModeSchema.d.ts +23 -0
  133. package/dist/{bin/validateMockServerConfig → src/utils/validate}/utils/checkModeSchema/checkModeSchema.js +24 -1
  134. package/dist/src/utils/validate/utils/entitiesSchema/entitiesSchema.d.ts +4 -0
  135. package/dist/src/utils/validate/utils/entitiesSchema/entitiesSchema.js +94 -0
  136. package/dist/src/utils/validate/utils/extendedDiscriminatedUnion/extendedDiscriminatedUnion.d.ts +8 -0
  137. package/dist/src/utils/validate/utils/extendedDiscriminatedUnion/extendedDiscriminatedUnion.js +46 -0
  138. package/dist/{bin/validateMockServerConfig → src/utils/validate}/utils/index.d.ts +2 -2
  139. package/dist/{bin/validateMockServerConfig → src/utils/validate}/utils/index.js +2 -2
  140. package/dist/{bin/validateMockServerConfig → src/utils/validate}/utils/jsonSchema/jsonSchema.d.ts +2 -2
  141. package/dist/{bin/validateMockServerConfig → src/utils/validate}/utils/jsonSchema/jsonSchema.js +1 -1
  142. package/dist/src/utils/validate/utils/nestedObjectOrArraySchema/nestedObjectOrArraySchema.d.ts +3 -0
  143. package/dist/src/utils/validate/utils/nestedObjectOrArraySchema/nestedObjectOrArraySchema.js +22 -0
  144. package/dist/{bin/validateMockServerConfig → src/utils/validate}/utils/requiredPropertiesSchema/requiredPropertiesSchema.d.ts +1 -1
  145. package/dist/{bin/validateMockServerConfig → src/utils/validate}/utils/requiredPropertiesSchema/requiredPropertiesSchema.js +1 -1
  146. package/dist/src/utils/validate/validateApiMockServerConfig.d.ts +2 -0
  147. package/dist/{bin/validateMockServerConfig → src/utils/validate}/validateApiMockServerConfig.js +4 -3
  148. package/dist/src/utils/validate/validateFlatMockServerConfig.d.ts +2 -0
  149. package/dist/src/utils/validate/validateFlatMockServerConfig.js +53 -0
  150. package/dist/{bin/validateMockServerConfig → src/utils/validate}/validateMockServerConfig.d.ts +1 -1
  151. package/dist/{bin/validateMockServerConfig → src/utils/validate}/validateMockServerConfig.js +4 -3
  152. package/package.json +51 -52
  153. package/dist/bin/helpers/getValidationMessageFromPath.d.ts +0 -1
  154. package/dist/bin/validateMockServerConfig/graphqlConfigSchema/graphqlConfigSchema.d.ts +0 -258
  155. package/dist/bin/validateMockServerConfig/queueSchema/queueSchema.d.ts +0 -8
  156. package/dist/bin/validateMockServerConfig/queueSchema/queueSchema.js +0 -21
  157. package/dist/bin/validateMockServerConfig/restConfigSchema/restConfigSchema.d.ts +0 -743
  158. package/dist/bin/validateMockServerConfig/utils/checkModeSchema/checkModeSchema.d.ts +0 -5
  159. package/dist/bin/validateMockServerConfig/utils/entitiesSchema/entitiesSchema.d.ts +0 -71
  160. package/dist/bin/validateMockServerConfig/utils/entitiesSchema/entitiesSchema.js +0 -124
  161. package/dist/bin/validateMockServerConfig/validateApiMockServerConfig.d.ts +0 -2
  162. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getGraphqlUrlSuggestions/getGraphqlUrlSuggestions.d.ts +0 -11
  163. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getGraphqlUrlSuggestions/getGraphqlUrlSuggestions.js +0 -25
  164. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getLevenshteinDistance/getLevenshteinDistance.d.ts +0 -1
  165. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getLevenshteinDistance/getLevenshteinDistance.js +0 -85
  166. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/getRestUrlSuggestions.d.ts +0 -11
  167. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/getRestUrlSuggestions.js +0 -39
  168. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/getActualRestUrlMeaningfulString/getActualRestUrlMeaningfulString.d.ts +0 -1
  169. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/getActualRestUrlMeaningfulString/getActualRestUrlMeaningfulString.js +0 -11
  170. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/getPatternRestUrlMeaningfulString/getPatternRestUrlMeaningfulString.d.ts +0 -1
  171. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/getPatternRestUrlMeaningfulString/getPatternRestUrlMeaningfulString.js +0 -11
  172. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/index.d.ts +0 -2
  173. package/dist/src/core/middlewares/notFoundMiddleware/helpers/getRestUrlSuggestions/helpers/index.js +0 -19
  174. package/dist/src/core/middlewares/notFoundMiddleware/helpers/index.d.ts +0 -3
  175. package/dist/src/core/middlewares/notFoundMiddleware/helpers/index.js +0 -20
  176. package/dist/src/core/middlewares/notFoundMiddleware/notFoundMiddleware.d.ts +0 -3
  177. package/dist/src/core/middlewares/notFoundMiddleware/notFoundMiddleware.js +0 -65
  178. package/dist/src/static/views/assets/icons/scheme-dark.svg +0 -3
  179. package/dist/src/static/views/assets/icons/scheme-light.svg +0 -3
  180. package/dist/src/static/views/assets/images/404.png +0 -0
  181. package/dist/src/static/views/assets/images/logo.png +0 -0
  182. package/dist/src/static/views/assets/styles/global.css +0 -88
  183. package/dist/src/static/views/components/header/index.css +0 -55
  184. package/dist/src/static/views/components/header/index.ejs +0 -40
  185. package/dist/src/static/views/components/header/index.js +0 -1
  186. package/dist/src/static/views/features/scheme/dark.css +0 -13
  187. package/dist/src/static/views/features/scheme/index.ejs +0 -3
  188. package/dist/src/static/views/features/scheme/index.js +0 -31
  189. package/dist/src/static/views/features/scheme/light.css +0 -13
  190. package/dist/src/static/views/features/tab/index.css +0 -30
  191. package/dist/src/static/views/features/tab/index.ejs +0 -2
  192. package/dist/src/static/views/features/tab/index.js +0 -12
  193. package/dist/src/static/views/pages/404/index.css +0 -10
  194. package/dist/src/static/views/pages/404/index.ejs +0 -82
  195. package/dist/src/utils/helpers/isRegExp/isRegExp.d.ts +0 -1
  196. package/dist/src/utils/helpers/isRegExp/isRegExp.js +0 -11
  197. package/dist/{bin/validateMockServerConfig → src/utils/validate}/baseUrlSchema/baseUrlSchema.d.ts +0 -0
  198. package/dist/{bin/validateMockServerConfig → src/utils/validate}/baseUrlSchema/baseUrlSchema.js +0 -0
  199. package/dist/{bin/validateMockServerConfig → src/utils/validate}/corsSchema/corsSchema.js +0 -0
  200. package/dist/{bin/validateMockServerConfig → src/utils/validate}/databaseConfigSchema/databaseConfigSchema.d.ts +0 -0
  201. package/dist/{bin/validateMockServerConfig → src/utils/validate}/databaseConfigSchema/databaseConfigSchema.js +0 -0
  202. package/dist/{bin/helpers → src/utils/validate}/getMostSpecificPathFromError.js +0 -0
  203. package/dist/{bin/helpers → src/utils/validate}/getValidationMessageFromPath.js +0 -0
  204. package/dist/{bin/validateMockServerConfig → src/utils/validate}/interceptorsSchema/interceptorsSchema.d.ts +0 -0
  205. package/dist/{bin/validateMockServerConfig → src/utils/validate}/interceptorsSchema/interceptorsSchema.js +0 -0
  206. package/dist/{bin/helpers → src/utils/validate}/isOnlyRequestedDataResolvingPropertyExists.js +0 -0
  207. package/dist/{bin/validateMockServerConfig → src/utils/validate}/portSchema/portSchema.d.ts +0 -0
  208. package/dist/{bin/validateMockServerConfig → src/utils/validate}/portSchema/portSchema.js +0 -0
  209. package/dist/{bin/validateMockServerConfig → src/utils/validate}/settingsSchema/settingsSchema.d.ts +2 -2
  210. /package/dist/{bin/validateMockServerConfig → src/utils/validate}/settingsSchema/settingsSchema.js +0 -0
  211. /package/dist/{bin/validateMockServerConfig → src/utils/validate}/staticPathSchema/staticPathSchema.d.ts +0 -0
  212. /package/dist/{bin/validateMockServerConfig → src/utils/validate}/staticPathSchema/staticPathSchema.js +0 -0
  213. /package/dist/{bin/validateMockServerConfig → src/utils/validate}/utils/plainObjectSchema/plainObjectSchema.d.ts +0 -0
  214. /package/dist/{bin/validateMockServerConfig → src/utils/validate}/utils/plainObjectSchema/plainObjectSchema.js +0 -0
  215. /package/dist/{bin/validateMockServerConfig → src/utils/validate}/utils/sharedSchema/sharedSchema.d.ts +0 -0
  216. /package/dist/{bin/validateMockServerConfig → src/utils/validate}/utils/sharedSchema/sharedSchema.js +0 -0
@@ -30,11 +30,10 @@ const createGraphQLRoutes = ({ router, graphqlConfig, serverResponseInterceptor
30
30
  const matchedRequestConfig = preparedGraphQLRequestConfig.find((requestConfig)=>{
31
31
  var _graphQLInput_query;
32
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;
33
+ if ('query' in requestConfig && requestConfig.query.replace(/\s+/g, '') !== ((_graphQLInput_query = graphQLInput.query) === null || _graphQLInput_query === void 0 ? void 0 : _graphQLInput_query.replace(/\s+/g, ''))) return false;
34
34
  if ('operationName' in requestConfig) {
35
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;
36
+ return requestConfig.operationName instanceof RegExp ? new RegExp(requestConfig.operationName).test(query.operationName) : requestConfig.operationName === query.operationName;
38
37
  }
39
38
  return true;
40
39
  });
@@ -49,24 +48,47 @@ const createGraphQLRoutes = ({ router, graphqlConfig, serverResponseInterceptor
49
48
  }
50
49
  const matchedRouteConfig = matchedRequestConfig.routes.find(({ entities })=>{
51
50
  if (!entities) return true;
52
- const entries = Object.entries(entities);
53
- return entries.every(([entityName, entityDescriptorOrValue])=>{
54
- const { checkMode, value: entityDescriptorValue } = (0, _helpers.convertToEntityDescriptor)(entityDescriptorOrValue);
55
- // ✅ important: check whole variables as plain value strictly if descriptor used for variables
51
+ const entityEntries = Object.entries(entities);
52
+ return entityEntries.every(([entityName, entityDescriptorOrValue])=>{
53
+ // important:
54
+ // check whole variables as plain value strictly if descriptor used for variables
56
55
  const isEntityVariablesByTopLevelDescriptor = entityName === 'variables' && (0, _helpers.isEntityDescriptor)(entityDescriptorOrValue);
57
56
  if (isEntityVariablesByTopLevelDescriptor) {
58
- return (0, _helpers.resolveEntityValues)(checkMode, graphQLInput.variables, entityDescriptorValue);
57
+ const variablesDescriptor = entityDescriptorOrValue;
58
+ if (variablesDescriptor.checkMode === 'exists' || variablesDescriptor.checkMode === 'notExists') {
59
+ return (0, _helpers.resolveEntityValues)({
60
+ actualValue: graphQLInput.variables,
61
+ checkMode: variablesDescriptor.checkMode
62
+ });
63
+ }
64
+ var _variablesDescriptor_oneOf;
65
+ return (0, _helpers.resolveEntityValues)({
66
+ actualValue: graphQLInput.variables,
67
+ descriptorValue: variablesDescriptor.value,
68
+ checkMode: variablesDescriptor.checkMode,
69
+ oneOf: (_variablesDescriptor_oneOf = variablesDescriptor.oneOf) !== null && _variablesDescriptor_oneOf !== void 0 ? _variablesDescriptor_oneOf : false
70
+ });
59
71
  }
60
- const isEntityVariablesByTopLevelArray = entityName === 'variables' && Array.isArray(entityDescriptorOrValue);
61
- if (isEntityVariablesByTopLevelArray) {
62
- return entityDescriptorOrValue.some((entityDescriptorOrValueElement)=>(0, _helpers.resolveEntityValues)(checkMode, graphQLInput.variables, entityDescriptorOrValueElement));
63
- }
64
- const recordOrArrayEntries = Object.entries(entityDescriptorOrValue);
65
- return recordOrArrayEntries.every(([entityKey, entityValue])=>{
66
- const { checkMode, value: descriptorValue } = (0, _helpers.convertToEntityDescriptor)(entityValue);
67
- const flattenEntity = (0, _flat.flatten)(entityName === 'variables' ? graphQLInput.variables : request[entityName]);
72
+ const actualEntity = (0, _flat.flatten)(entityName === 'variables' ? graphQLInput.variables : request[entityName]);
73
+ const entityValueEntries = Object.entries(entityDescriptorOrValue);
74
+ return entityValueEntries.every(([entityPropertyKey, entityPropertyDescriptorOrValue])=>{
75
+ const entityPropertyDescriptor = (0, _helpers.convertToEntityDescriptor)(entityPropertyDescriptorOrValue);
68
76
  // ✅ important: transform header keys to lower case because browsers send headers in lowercase
69
- return (0, _helpers.resolveEntityValues)(checkMode, flattenEntity[entityName === 'headers' ? entityKey.toLowerCase() : entityKey], descriptorValue);
77
+ const actualPropertyKey = entityName === 'headers' ? entityPropertyKey.toLowerCase() : entityPropertyKey;
78
+ const actualPropertyValue = actualEntity[actualPropertyKey];
79
+ if (entityPropertyDescriptor.checkMode === 'exists' || entityPropertyDescriptor.checkMode === 'notExists') {
80
+ return (0, _helpers.resolveEntityValues)({
81
+ actualValue: actualPropertyValue,
82
+ checkMode: entityPropertyDescriptor.checkMode
83
+ });
84
+ }
85
+ var _entityPropertyDescriptor_oneOf;
86
+ return (0, _helpers.resolveEntityValues)({
87
+ actualValue: actualPropertyValue,
88
+ descriptorValue: entityPropertyDescriptor.value,
89
+ checkMode: entityPropertyDescriptor.checkMode,
90
+ oneOf: (_entityPropertyDescriptor_oneOf = entityPropertyDescriptor.oneOf) !== null && _entityPropertyDescriptor_oneOf !== void 0 ? _entityPropertyDescriptor_oneOf : false
91
+ });
70
92
  });
71
93
  });
72
94
  });
@@ -18,7 +18,7 @@ const calculateRouteConfigWeight = (graphQLRouteConfig)=>{
18
18
  if (cookies) routeConfigWeight += Object.keys(cookies).length;
19
19
  if (query) routeConfigWeight += Object.keys(query).length;
20
20
  if (variables) {
21
- if ((0, _helpers.isPlainObject)(variables) && variables.checkMode) {
21
+ if (variables.checkMode) {
22
22
  // ✅ important:
23
23
  // check that actual value check modes does not have `value` for compare
24
24
  if (variables.checkMode === 'exists' || variables.checkMode === 'notExists') {
@@ -28,7 +28,7 @@ const calculateRouteConfigWeight = (graphQLRouteConfig)=>{
28
28
  routeConfigWeight += (0, _helpers.isPlainObject)(variables.value) ? Object.keys(variables.value).length : 1;
29
29
  return routeConfigWeight;
30
30
  }
31
- routeConfigWeight += (0, _helpers.isPlainObject)(variables) ? Object.keys(variables).length : 1;
31
+ routeConfigWeight += Object.keys(variables).length;
32
32
  }
33
33
  return routeConfigWeight;
34
34
  };
@@ -1,5 +1,5 @@
1
1
  import type { Express } from 'express';
2
- import type { GraphQLEntity, GraphQLOperationName, GraphQLOperationType } from '../../../utils/types';
2
+ import type { GraphQLEntity, GraphQLOperationName, GraphQLOperationType, MockServerConfig } from '../../../utils/types';
3
3
  declare global {
4
4
  namespace Express {
5
5
  interface Request {
@@ -14,4 +14,4 @@ declare global {
14
14
  }
15
15
  }
16
16
  }
17
- export declare const contextMiddleware: (server: Express) => void;
17
+ export declare const contextMiddleware: (server: Express, { database }: Pick<MockServerConfig, "database">) => void;
@@ -8,26 +8,38 @@ Object.defineProperty(exports, "contextMiddleware", {
8
8
  return contextMiddleware;
9
9
  }
10
10
  });
11
+ const _database = require("../../database");
11
12
  const _helpers = require("../../../utils/helpers");
12
- const contextMiddleware = (server)=>{
13
+ const contextMiddleware = (server, { database })=>{
13
14
  let requestId = 0;
15
+ const context = {
16
+ orm: {}
17
+ };
18
+ if (database) {
19
+ const storage = (0, _database.createStorage)(database.data);
20
+ const orm = (0, _database.createOrm)(storage);
21
+ context.orm = orm;
22
+ }
14
23
  server.use((request, _response, next)=>{
15
24
  requestId += 1;
16
25
  request.id = requestId;
17
26
  request.timestamp = Date.now();
18
- const graphQLInput = (0, _helpers.getGraphQLInput)(request);
19
- var _graphQLInput_query;
20
- const graphQLQuery = (0, _helpers.parseQuery)((_graphQLInput_query = graphQLInput.query) !== null && _graphQLInput_query !== void 0 ? _graphQLInput_query : '');
21
- if (graphQLInput.query && graphQLQuery) {
22
- request.graphQL = {
23
- operationType: graphQLQuery.operationType,
24
- operationName: graphQLQuery.operationName,
25
- query: graphQLInput.query,
26
- variables: graphQLInput.variables
27
- };
28
- return next();
27
+ if (request.method === 'GET' || request.method === 'POST') {
28
+ const graphQLInput = (0, _helpers.getGraphQLInput)(request);
29
+ var _graphQLInput_query;
30
+ const graphQLQuery = (0, _helpers.parseQuery)((_graphQLInput_query = graphQLInput.query) !== null && _graphQLInput_query !== void 0 ? _graphQLInput_query : '');
31
+ if (graphQLInput.query && graphQLQuery) {
32
+ request.graphQL = {
33
+ operationType: graphQLQuery.operationType,
34
+ operationName: graphQLQuery.operationName,
35
+ query: graphQLInput.query,
36
+ variables: graphQLInput.variables
37
+ };
38
+ return next();
39
+ }
29
40
  }
30
41
  request.graphQL = null;
42
+ request.context = context;
31
43
  return next();
32
44
  });
33
45
  };
@@ -1,5 +1,4 @@
1
- /// <reference types="node" />
2
- import type { Server } from 'http';
1
+ import type { Server } from 'node:http';
3
2
  type ServerWithDestroyer = Server & {
4
3
  destroy: Server['close'];
5
4
  };
@@ -4,6 +4,5 @@ export * from './corsMiddleware/corsMiddleware';
4
4
  export * from './destroyerMiddleware/destroyerMiddleware';
5
5
  export * from './errorMiddleware/errorMiddleware';
6
6
  export * from './noCorsMiddleware/noCorsMiddleware';
7
- export * from './notFoundMiddleware/notFoundMiddleware';
8
7
  export * from './requestInterceptorMiddleware/requestInterceptorMiddleware';
9
8
  export * from './staticMiddleware/staticMiddleware';
@@ -8,7 +8,6 @@ _export_star(require("./corsMiddleware/corsMiddleware"), exports);
8
8
  _export_star(require("./destroyerMiddleware/destroyerMiddleware"), exports);
9
9
  _export_star(require("./errorMiddleware/errorMiddleware"), exports);
10
10
  _export_star(require("./noCorsMiddleware/noCorsMiddleware"), exports);
11
- _export_star(require("./notFoundMiddleware/notFoundMiddleware"), exports);
12
11
  _export_star(require("./requestInterceptorMiddleware/requestInterceptorMiddleware"), exports);
13
12
  _export_star(require("./staticMiddleware/staticMiddleware"), exports);
14
13
  function _export_star(from, to) {
@@ -1,9 +1,9 @@
1
1
  import type { Express } from 'express';
2
2
  import type { RequestInterceptor } from '../../../utils/types';
3
3
  interface RequestInterceptorMiddlewareParams {
4
- server: Express;
5
- path?: string;
6
4
  interceptor: RequestInterceptor;
5
+ path?: string;
6
+ server: Express;
7
7
  }
8
8
  export declare const requestInterceptorMiddleware: ({ server, path, interceptor }: RequestInterceptorMiddlewareParams) => void;
9
9
  export {};
@@ -1,8 +1,8 @@
1
1
  import type { IRouter } from 'express';
2
2
  import type { Interceptors, RestConfig } from '../../../utils/types';
3
3
  interface CreateRestRoutesParams {
4
- router: IRouter;
5
4
  restConfig: RestConfig;
5
+ router: IRouter;
6
6
  serverResponseInterceptor?: Interceptors<'rest'>['response'];
7
7
  }
8
8
  export declare const createRestRoutes: ({ router, restConfig, serverResponseInterceptor }: CreateRestRoutesParams) => IRouter;
@@ -9,7 +9,8 @@ Object.defineProperty(exports, "createRestRoutes", {
9
9
  }
10
10
  });
11
11
  const _flat = require("flat");
12
- const _path = /*#__PURE__*/ _interop_require_default(require("path"));
12
+ const _nodefs = /*#__PURE__*/ _interop_require_default(require("node:fs"));
13
+ const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
13
14
  const _helpers = require("../../../utils/helpers");
14
15
  const _helpers1 = require("./helpers");
15
16
  function _interop_require_default(obj) {
@@ -29,29 +30,56 @@ const createRestRoutes = ({ router, restConfig, serverResponseInterceptor })=>{
29
30
  }
30
31
  const matchedRouteConfig = requestConfig.routes.find(({ entities })=>{
31
32
  if (!entities) return true;
32
- const entries = Object.entries(entities);
33
- return entries.every(([entityName, entityDescriptorOrValue])=>{
34
- const { checkMode, value: descriptorValue } = (0, _helpers.convertToEntityDescriptor)(entityDescriptorOrValue);
33
+ const entityEntries = Object.entries(entities);
34
+ return entityEntries.every(([entityName, entityDescriptorOrValue])=>{
35
35
  // ✅ important:
36
36
  // check whole body as plain value strictly if descriptor used for body
37
37
  const isEntityBodyByTopLevelDescriptor = entityName === 'body' && (0, _helpers.isEntityDescriptor)(entityDescriptorOrValue);
38
38
  if (isEntityBodyByTopLevelDescriptor) {
39
- // important:
40
- // bodyParser sets body to empty object if body not sent or invalid, so assume {} as undefined
41
- return (0, _helpers.resolveEntityValues)(checkMode, Object.keys(request.body).length ? request.body : undefined, descriptorValue);
39
+ const bodyDescriptor = entityDescriptorOrValue;
40
+ if (bodyDescriptor.checkMode === 'exists' || bodyDescriptor.checkMode === 'notExists') {
41
+ return (0, _helpers.resolveEntityValues)({
42
+ actualValue: request.body,
43
+ checkMode: bodyDescriptor.checkMode
44
+ });
45
+ }
46
+ var _bodyDescriptor_oneOf;
47
+ return (0, _helpers.resolveEntityValues)({
48
+ actualValue: request.body,
49
+ descriptorValue: bodyDescriptor.value,
50
+ checkMode: bodyDescriptor.checkMode,
51
+ oneOf: (_bodyDescriptor_oneOf = bodyDescriptor.oneOf) !== null && _bodyDescriptor_oneOf !== void 0 ? _bodyDescriptor_oneOf : false
52
+ });
42
53
  }
43
54
  const isEntityBodyByTopLevelArray = entityName === 'body' && Array.isArray(entityDescriptorOrValue);
44
55
  if (isEntityBodyByTopLevelArray) {
45
- return entityDescriptorOrValue.some((entityDescriptorOrValueElement)=>// important:
46
- // bodyParser sets body to empty object if body not sent or invalid, so assume {} as undefined
47
- (0, _helpers.resolveEntityValues)(checkMode, Object.keys(request.body).length ? request.body : undefined, entityDescriptorOrValueElement));
56
+ if (!Array.isArray(request.body)) return false;
57
+ return (0, _helpers.resolveEntityValues)({
58
+ actualValue: request.body,
59
+ descriptorValue: entityDescriptorOrValue,
60
+ checkMode: 'equals'
61
+ });
48
62
  }
49
- const recordOrArrayEntries = Object.entries(entityDescriptorOrValue);
50
- return recordOrArrayEntries.every(([entityKey, mappedEntityDescriptor])=>{
51
- const { checkMode, value: descriptorValue } = (0, _helpers.convertToEntityDescriptor)(mappedEntityDescriptor);
52
- const flattenEntity = (0, _flat.flatten)(request[entityName]);
63
+ const actualEntity = (0, _flat.flatten)(request[entityName]);
64
+ const entityValueEntries = Object.entries(entityDescriptorOrValue);
65
+ return entityValueEntries.every(([entityPropertyKey, entityPropertyDescriptorOrValue])=>{
66
+ const entityPropertyDescriptor = (0, _helpers.convertToEntityDescriptor)(entityPropertyDescriptorOrValue);
53
67
  // ✅ important: transform header keys to lower case because browsers send headers in lowercase
54
- return (0, _helpers.resolveEntityValues)(checkMode, flattenEntity[entityName === 'headers' ? entityKey.toLowerCase() : entityKey], descriptorValue);
68
+ const actualPropertyKey = entityName === 'headers' ? entityPropertyKey.toLowerCase() : entityPropertyKey;
69
+ const actualPropertyValue = actualEntity[actualPropertyKey];
70
+ if (entityPropertyDescriptor.checkMode === 'exists' || entityPropertyDescriptor.checkMode === 'notExists') {
71
+ return (0, _helpers.resolveEntityValues)({
72
+ actualValue: actualPropertyValue,
73
+ checkMode: entityPropertyDescriptor.checkMode
74
+ });
75
+ }
76
+ var _entityPropertyDescriptor_oneOf;
77
+ return (0, _helpers.resolveEntityValues)({
78
+ actualValue: actualPropertyValue,
79
+ descriptorValue: entityPropertyDescriptor.value,
80
+ checkMode: entityPropertyDescriptor.checkMode,
81
+ oneOf: (_entityPropertyDescriptor_oneOf = entityPropertyDescriptor.oneOf) !== null && _entityPropertyDescriptor_oneOf !== void 0 ? _entityPropertyDescriptor_oneOf : false
82
+ });
55
83
  });
56
84
  });
57
85
  });
@@ -62,13 +90,13 @@ const createRestRoutes = ({ router, restConfig, serverResponseInterceptor })=>{
62
90
  interceptor: matchedRouteConfig.interceptors.request
63
91
  });
64
92
  }
65
- let matchedRouteConfigData = null;
93
+ const matchedRouteConfigDataDescriptor = {};
66
94
  if (((_matchedRouteConfig_settings = matchedRouteConfig.settings) === null || _matchedRouteConfig_settings === void 0 ? void 0 : _matchedRouteConfig_settings.polling) && 'queue' in matchedRouteConfig) {
67
95
  if (!matchedRouteConfig.queue.length) return next();
68
96
  const shallowMatchedRouteConfig = matchedRouteConfig;
69
97
  var _shallowMatchedRouteConfig___pollingIndex;
70
98
  let index = (_shallowMatchedRouteConfig___pollingIndex = shallowMatchedRouteConfig.__pollingIndex) !== null && _shallowMatchedRouteConfig___pollingIndex !== void 0 ? _shallowMatchedRouteConfig___pollingIndex : 0;
71
- const { time, data } = matchedRouteConfig.queue[index];
99
+ const { time } = matchedRouteConfig.queue[index];
72
100
  const updateIndex = ()=>{
73
101
  if (matchedRouteConfig.queue.length - 1 === index) {
74
102
  index = 0;
@@ -77,6 +105,7 @@ const createRestRoutes = ({ router, restConfig, serverResponseInterceptor })=>{
77
105
  }
78
106
  shallowMatchedRouteConfig.__pollingIndex = index;
79
107
  };
108
+ const queueItem = matchedRouteConfig.queue[index];
80
109
  if (time && !shallowMatchedRouteConfig.__timeoutInProgress) {
81
110
  shallowMatchedRouteConfig.__timeoutInProgress = true;
82
111
  setTimeout(()=>{
@@ -87,16 +116,21 @@ const createRestRoutes = ({ router, restConfig, serverResponseInterceptor })=>{
87
116
  if (!time && !shallowMatchedRouteConfig.__timeoutInProgress) {
88
117
  updateIndex();
89
118
  }
90
- matchedRouteConfigData = data;
119
+ if ('data' in queueItem) {
120
+ matchedRouteConfigDataDescriptor.data = queueItem.data;
121
+ }
122
+ if ('file' in queueItem) {
123
+ if (!(0, _helpers.isFilePathValid)(queueItem.file)) return next();
124
+ matchedRouteConfigDataDescriptor.file = queueItem.file;
125
+ }
91
126
  }
92
127
  if ('data' in matchedRouteConfig) {
93
- matchedRouteConfigData = matchedRouteConfig.data;
128
+ matchedRouteConfigDataDescriptor.data = matchedRouteConfig.data;
94
129
  }
95
130
  if ('file' in matchedRouteConfig) {
96
131
  if (!(0, _helpers.isFilePathValid)(matchedRouteConfig.file)) return next();
132
+ matchedRouteConfigDataDescriptor.file = matchedRouteConfig.file;
97
133
  }
98
- var _matchedRouteConfig_entities;
99
- const resolvedData = typeof matchedRouteConfigData === 'function' ? await matchedRouteConfigData(request, (_matchedRouteConfig_entities = matchedRouteConfig.entities) !== null && _matchedRouteConfig_entities !== void 0 ? _matchedRouteConfig_entities : {}) : matchedRouteConfigData;
100
134
  if ((_matchedRouteConfig_settings1 = matchedRouteConfig.settings) === null || _matchedRouteConfig_settings1 === void 0 ? void 0 : _matchedRouteConfig_settings1.status) {
101
135
  response.statusCode = matchedRouteConfig.settings.status;
102
136
  }
@@ -104,6 +138,18 @@ const createRestRoutes = ({ router, restConfig, serverResponseInterceptor })=>{
104
138
  // set 'Cache-Control' header for explicit browsers response revalidate: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
105
139
  // this code should place before response interceptors for giving opportunity to rewrite 'Cache-Control' header
106
140
  if (request.method === 'GET') response.set('Cache-control', 'no-cache');
141
+ let resolvedData = null;
142
+ if (matchedRouteConfigDataDescriptor.data) {
143
+ var _matchedRouteConfig_entities;
144
+ resolvedData = typeof matchedRouteConfigDataDescriptor.data === 'function' ? await matchedRouteConfigDataDescriptor.data(request, (_matchedRouteConfig_entities = matchedRouteConfig.entities) !== null && _matchedRouteConfig_entities !== void 0 ? _matchedRouteConfig_entities : {}) : matchedRouteConfigDataDescriptor.data;
145
+ }
146
+ if (matchedRouteConfigDataDescriptor.file) {
147
+ const buffer = _nodefs.default.readFileSync(_nodepath.default.resolve(matchedRouteConfigDataDescriptor.file));
148
+ resolvedData = {
149
+ path: matchedRouteConfigDataDescriptor.file,
150
+ file: buffer
151
+ };
152
+ }
107
153
  const data = await (0, _helpers.callResponseInterceptors)({
108
154
  data: resolvedData,
109
155
  request,
@@ -118,10 +164,20 @@ const createRestRoutes = ({ router, restConfig, serverResponseInterceptor })=>{
118
164
  if ((_matchedRouteConfig_settings2 = matchedRouteConfig.settings) === null || _matchedRouteConfig_settings2 === void 0 ? void 0 : _matchedRouteConfig_settings2.delay) {
119
165
  await (0, _helpers.sleep)(matchedRouteConfig.settings.delay);
120
166
  }
121
- if ('file' in matchedRouteConfig) {
122
- return response.sendFile(_path.default.resolve(matchedRouteConfig.file));
167
+ if ((0, _helpers.isFileDescriptor)(data)) {
168
+ const isFilePathChanged = matchedRouteConfigDataDescriptor.file !== data.path;
169
+ if (isFilePathChanged) {
170
+ if (!(0, _helpers.isFilePathValid)(data.path)) return next();
171
+ data.file = _nodefs.default.readFileSync(_nodepath.default.resolve(data.path));
172
+ }
173
+ // ✅ important: replace backslashes because windows can use them in file path
174
+ const fileName = data.path.replaceAll('\\', '/').split('/').at(-1);
175
+ const fileExtension = fileName.split('.').at(-1);
176
+ response.type(fileExtension);
177
+ response.set('Content-Disposition', `filename=${fileName}`);
178
+ return response.send(data.file);
123
179
  }
124
- return response.json(data);
180
+ response.json(data);
125
181
  }));
126
182
  });
127
183
  return router;
@@ -1,3 +1,3 @@
1
1
  import type { Express } from 'express';
2
2
  import type { DatabaseMockServerConfig } from '../../utils/types';
3
- export declare const createDatabaseMockServer: (databaseMockServerConfig: Omit<DatabaseMockServerConfig, 'port'>, server?: Express) => Express;
3
+ export declare const createDatabaseMockServer: (databaseMockServerConfig: Omit<DatabaseMockServerConfig, "port">, server?: Express) => Express;
@@ -12,7 +12,6 @@ const _bodyparser = /*#__PURE__*/ _interop_require_default(require("body-parser"
12
12
  const _express = /*#__PURE__*/ _interop_require_default(require("express"));
13
13
  const _database = require("../../core/database");
14
14
  const _middlewares = require("../../core/middlewares");
15
- const _helpers = require("../../utils/helpers");
16
15
  function _interop_require_default(obj) {
17
16
  return obj && obj.__esModule ? obj : {
18
17
  default: obj
@@ -21,9 +20,6 @@ function _interop_require_default(obj) {
21
20
  const createDatabaseMockServer = (databaseMockServerConfig, server = (0, _express.default)())=>{
22
21
  var _databaseMockServerConfig_interceptors;
23
22
  const { cors, staticPath, data, routes } = databaseMockServerConfig;
24
- server.set('view engine', 'ejs');
25
- server.set('views', (0, _helpers.urlJoin)(__dirname, '../../static/views'));
26
- server.use(_express.default.static((0, _helpers.urlJoin)(__dirname, '../../static/views')));
27
23
  server.use(_bodyparser.default.urlencoded({
28
24
  extended: false
29
25
  }));
@@ -32,7 +28,12 @@ const createDatabaseMockServer = (databaseMockServerConfig, server = (0, _expres
32
28
  }));
33
29
  server.set('json spaces', 2);
34
30
  server.use(_bodyparser.default.text());
35
- (0, _middlewares.contextMiddleware)(server);
31
+ (0, _middlewares.contextMiddleware)(server, {
32
+ database: {
33
+ data,
34
+ routes
35
+ }
36
+ });
36
37
  (0, _middlewares.cookieParseMiddleware)(server);
37
38
  const serverRequestInterceptor = (_databaseMockServerConfig_interceptors = databaseMockServerConfig.interceptors) === null || _databaseMockServerConfig_interceptors === void 0 ? void 0 : _databaseMockServerConfig_interceptors.request;
38
39
  if (serverRequestInterceptor) {
@@ -56,7 +57,6 @@ const createDatabaseMockServer = (databaseMockServerConfig, server = (0, _expres
56
57
  routes
57
58
  });
58
59
  server.use(baseUrl, routerWithDatabaseRoutes);
59
- (0, _middlewares.notFoundMiddleware)(server, databaseMockServerConfig);
60
60
  (0, _middlewares.errorMiddleware)(server);
61
61
  return server;
62
62
  };
@@ -0,0 +1,3 @@
1
+ import type { Express } from 'express';
2
+ import type { FlatMockServerConfig } from '../../utils/types';
3
+ export declare const createFlatMockServer: (flatMockServerConfig: FlatMockServerConfig, server?: Express) => Express;
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "createFlatMockServer", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return createFlatMockServer;
9
+ }
10
+ });
11
+ const _bodyparser = /*#__PURE__*/ _interop_require_default(require("body-parser"));
12
+ const _express = /*#__PURE__*/ _interop_require_default(require("express"));
13
+ const _database = require("../../core/database");
14
+ const _graphql = require("../../core/graphql");
15
+ const _middlewares = require("../../core/middlewares");
16
+ const _rest = require("../../core/rest");
17
+ const _validate = require("../../utils/validate");
18
+ function _interop_require_default(obj) {
19
+ return obj && obj.__esModule ? obj : {
20
+ default: obj
21
+ };
22
+ }
23
+ const createFlatMockServer = (flatMockServerConfig, server = (0, _express.default)())=>{
24
+ (0, _validate.validateFlatMockServerConfig)(flatMockServerConfig);
25
+ const [option, ...flatMockServerComponents] = flatMockServerConfig;
26
+ const flatMockServerSettings = !('configs' in option) ? option : undefined;
27
+ const { cors, staticPath, interceptors, baseUrl: serverBaseUrl = '/', database } = flatMockServerSettings !== null && flatMockServerSettings !== void 0 ? flatMockServerSettings : {};
28
+ server.use(_bodyparser.default.urlencoded({
29
+ extended: false
30
+ }));
31
+ server.use(_bodyparser.default.json({
32
+ limit: '10mb'
33
+ }));
34
+ server.set('json spaces', 2);
35
+ server.use(_bodyparser.default.text());
36
+ (0, _middlewares.contextMiddleware)(server, {
37
+ database
38
+ });
39
+ (0, _middlewares.cookieParseMiddleware)(server);
40
+ const serverRequestInterceptor = interceptors === null || interceptors === void 0 ? void 0 : interceptors.request;
41
+ if (serverRequestInterceptor) {
42
+ (0, _middlewares.requestInterceptorMiddleware)({
43
+ server,
44
+ interceptor: serverRequestInterceptor
45
+ });
46
+ }
47
+ if (cors) {
48
+ (0, _middlewares.corsMiddleware)(server, cors);
49
+ } else {
50
+ (0, _middlewares.noCorsMiddleware)(server);
51
+ }
52
+ if (staticPath) {
53
+ (0, _middlewares.staticMiddleware)(server, serverBaseUrl, staticPath);
54
+ }
55
+ if (database) {
56
+ const routerWithDatabaseRoutes = (0, _database.createDatabaseRoutes)(_express.default.Router(), database);
57
+ server.use(serverBaseUrl, routerWithDatabaseRoutes);
58
+ }
59
+ const { restRequestConfigs, graphQLRequestConfigs } = flatMockServerComponents.reduce((acc, component)=>{
60
+ const { baseUrl = '' } = component;
61
+ component.configs.forEach((config)=>{
62
+ var _component_interceptors, _config_interceptors, _component_interceptors1, _config_interceptors1;
63
+ const interceptors = {
64
+ ...(((_component_interceptors = component.interceptors) === null || _component_interceptors === void 0 ? void 0 : _component_interceptors.request) || ((_config_interceptors = config.interceptors) === null || _config_interceptors === void 0 ? void 0 : _config_interceptors.request)) && {
65
+ request: (params)=>{
66
+ var _component_interceptors, _config_interceptors;
67
+ if ((_component_interceptors = component.interceptors) === null || _component_interceptors === void 0 ? void 0 : _component_interceptors.request) {
68
+ component.interceptors.request(params);
69
+ }
70
+ if ((_config_interceptors = config.interceptors) === null || _config_interceptors === void 0 ? void 0 : _config_interceptors.request) {
71
+ config.interceptors.request(params);
72
+ }
73
+ }
74
+ },
75
+ ...(((_component_interceptors1 = component.interceptors) === null || _component_interceptors1 === void 0 ? void 0 : _component_interceptors1.response) || ((_config_interceptors1 = config.interceptors) === null || _config_interceptors1 === void 0 ? void 0 : _config_interceptors1.response)) && {
76
+ response: (data, params)=>{
77
+ var _config_interceptors, _component_interceptors;
78
+ if ((_config_interceptors = config.interceptors) === null || _config_interceptors === void 0 ? void 0 : _config_interceptors.response) {
79
+ data = config.interceptors.response(data, params);
80
+ }
81
+ if ((_component_interceptors = component.interceptors) === null || _component_interceptors === void 0 ? void 0 : _component_interceptors.response) {
82
+ data = component.interceptors.response(data, params);
83
+ }
84
+ return data;
85
+ }
86
+ }
87
+ };
88
+ const isRest = 'method' in config;
89
+ if (isRest) acc.restRequestConfigs.push({
90
+ ...config,
91
+ interceptors,
92
+ path: config.path instanceof RegExp ? new RegExp(`${baseUrl}${config.path.source}`, config.path.flags) : `${baseUrl}${config.path}`
93
+ });
94
+ const isGraphql = 'operationType' in config;
95
+ if (isGraphql) acc.graphQLRequestConfigs.push({
96
+ ...config,
97
+ interceptors
98
+ });
99
+ });
100
+ return acc;
101
+ }, {
102
+ restRequestConfigs: [],
103
+ graphQLRequestConfigs: []
104
+ });
105
+ if (restRequestConfigs.length) {
106
+ const routerWithRestRoutes = (0, _rest.createRestRoutes)({
107
+ router: _express.default.Router(),
108
+ restConfig: {
109
+ configs: restRequestConfigs
110
+ },
111
+ serverResponseInterceptor: interceptors === null || interceptors === void 0 ? void 0 : interceptors.response
112
+ });
113
+ server.use(serverBaseUrl, routerWithRestRoutes);
114
+ }
115
+ if (graphQLRequestConfigs.length) {
116
+ const routerWithGraphQLRoutes = (0, _graphql.createGraphQLRoutes)({
117
+ router: _express.default.Router(),
118
+ graphqlConfig: {
119
+ configs: graphQLRequestConfigs
120
+ },
121
+ serverResponseInterceptor: interceptors === null || interceptors === void 0 ? void 0 : interceptors.response
122
+ });
123
+ server.use(serverBaseUrl, routerWithGraphQLRoutes);
124
+ }
125
+ (0, _middlewares.errorMiddleware)(server);
126
+ return server;
127
+ };
@@ -1,3 +1,3 @@
1
1
  import type { Express } from 'express';
2
2
  import type { GraphQLMockServerConfig } from '../../utils/types';
3
- export declare const createGraphQLMockServer: (graphqlMockServerConfig: Omit<GraphQLMockServerConfig, 'port'>, server?: Express) => Express;
3
+ export declare const createGraphQLMockServer: (graphqlMockServerConfig: Omit<GraphQLMockServerConfig, "port">, server?: Express) => Express;
@@ -13,7 +13,7 @@ const _express = /*#__PURE__*/ _interop_require_default(require("express"));
13
13
  const _database = require("../../core/database");
14
14
  const _graphql = require("../../core/graphql");
15
15
  const _middlewares = require("../../core/middlewares");
16
- const _helpers = require("../../utils/helpers");
16
+ const _validate = require("../../utils/validate");
17
17
  function _interop_require_default(obj) {
18
18
  return obj && obj.__esModule ? obj : {
19
19
  default: obj
@@ -21,10 +21,8 @@ function _interop_require_default(obj) {
21
21
  }
22
22
  const createGraphQLMockServer = (graphqlMockServerConfig, server = (0, _express.default)())=>{
23
23
  var _graphqlMockServerConfig_interceptors;
24
+ (0, _validate.validateApiMockServerConfig)(graphqlMockServerConfig, 'graphql');
24
25
  const { cors, staticPath, configs, database, interceptors } = graphqlMockServerConfig;
25
- server.set('view engine', 'ejs');
26
- server.set('views', (0, _helpers.urlJoin)(__dirname, '../../static/views'));
27
- server.use(_express.default.static((0, _helpers.urlJoin)(__dirname, '../../static/views')));
28
26
  server.use(_bodyparser.default.urlencoded({
29
27
  extended: false
30
28
  }));
@@ -33,7 +31,7 @@ const createGraphQLMockServer = (graphqlMockServerConfig, server = (0, _express.
33
31
  }));
34
32
  server.set('json spaces', 2);
35
33
  server.use(_bodyparser.default.text());
36
- (0, _middlewares.contextMiddleware)(server);
34
+ (0, _middlewares.contextMiddleware)(server, graphqlMockServerConfig);
37
35
  (0, _middlewares.cookieParseMiddleware)(server);
38
36
  const serverRequestInterceptor = (_graphqlMockServerConfig_interceptors = graphqlMockServerConfig.interceptors) === null || _graphqlMockServerConfig_interceptors === void 0 ? void 0 : _graphqlMockServerConfig_interceptors.request;
39
37
  if (serverRequestInterceptor) {
@@ -64,7 +62,6 @@ const createGraphQLMockServer = (graphqlMockServerConfig, server = (0, _express.
64
62
  const routerWithDatabaseRoutes = (0, _database.createDatabaseRoutes)(_express.default.Router(), database);
65
63
  server.use(baseUrl, routerWithDatabaseRoutes);
66
64
  }
67
- (0, _middlewares.notFoundMiddleware)(server, graphqlMockServerConfig);
68
65
  (0, _middlewares.errorMiddleware)(server);
69
66
  return server;
70
67
  };
@@ -1,3 +1,3 @@
1
1
  import type { Express } from 'express';
2
2
  import type { MockServerConfig } from '../../utils/types';
3
- export declare const createMockServer: (mockServerConfig: Omit<MockServerConfig, 'port'>, server?: Express) => Express;
3
+ export declare const createMockServer: (mockServerConfig: Omit<MockServerConfig, "port">, server?: Express) => Express;