mock-config-server 3.3.3 → 3.4.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 (167) hide show
  1. package/README.md +107 -3
  2. package/dist/bin/build.js +1 -1
  3. package/dist/bin/cli.d.ts +1 -1
  4. package/dist/bin/cli.js +25 -16
  5. package/dist/bin/helpers/createTemplate.d.ts +9 -0
  6. package/dist/bin/helpers/createTemplate.js +25 -0
  7. package/dist/bin/helpers/getMostSpecificPathFromError.d.ts +2 -0
  8. package/dist/bin/helpers/getMostSpecificPathFromError.js +36 -0
  9. package/dist/bin/helpers/getValidationMessageFromPath.d.ts +1 -0
  10. package/dist/bin/helpers/getValidationMessageFromPath.js +11 -0
  11. package/dist/bin/helpers/index.d.ts +4 -0
  12. package/dist/bin/helpers/index.js +44 -0
  13. package/dist/bin/helpers/isOnlyRequestedDataResolvingPropertyExists.d.ts +4 -0
  14. package/dist/bin/helpers/isOnlyRequestedDataResolvingPropertyExists.js +9 -0
  15. package/dist/bin/init.d.ts +2 -0
  16. package/dist/bin/init.js +101 -0
  17. package/dist/bin/run.d.ts +1 -1
  18. package/dist/bin/run.js +23 -2
  19. package/dist/bin/templates/.eslintrc.js +14 -0
  20. package/dist/bin/templates/js/full/mock-requests/graphql/index.js +2 -0
  21. package/dist/bin/templates/js/full/mock-requests/graphql/user.js +35 -0
  22. package/dist/bin/templates/js/full/mock-requests/graphql/users.js +12 -0
  23. package/dist/bin/templates/js/full/mock-requests/rest/index.js +2 -0
  24. package/dist/bin/templates/js/full/mock-requests/rest/user.js +35 -0
  25. package/dist/bin/templates/js/full/mock-requests/rest/users.js +12 -0
  26. package/dist/bin/templates/js/full/mock-server.config.js +16 -0
  27. package/dist/bin/templates/js/graphql/mock-requests/index.js +2 -0
  28. package/dist/bin/templates/js/graphql/mock-requests/user.js +35 -0
  29. package/dist/bin/templates/js/graphql/mock-requests/users.js +12 -0
  30. package/dist/bin/templates/js/graphql/mock-server.config.js +9 -0
  31. package/dist/bin/templates/js/rest/mock-requests/index.js +2 -0
  32. package/dist/bin/templates/js/rest/mock-requests/user.js +35 -0
  33. package/dist/bin/templates/js/rest/mock-requests/users.js +12 -0
  34. package/dist/bin/templates/js/rest/mock-server.config.js +9 -0
  35. package/dist/bin/templates/ts/full/mock-requests/graphql/index.ts +2 -0
  36. package/dist/bin/templates/ts/full/mock-requests/graphql/user.ts +37 -0
  37. package/dist/bin/templates/ts/full/mock-requests/graphql/users.ts +14 -0
  38. package/dist/bin/templates/ts/full/mock-requests/rest/index.ts +2 -0
  39. package/dist/bin/templates/ts/full/mock-requests/rest/user.ts +37 -0
  40. package/dist/bin/templates/ts/full/mock-requests/rest/users.ts +14 -0
  41. package/dist/bin/templates/ts/full/mock-server.config.ts +18 -0
  42. package/dist/bin/templates/ts/graphql/mock-requests/index.ts +2 -0
  43. package/dist/bin/templates/ts/graphql/mock-requests/user.ts +37 -0
  44. package/dist/bin/templates/ts/graphql/mock-requests/users.ts +14 -0
  45. package/dist/bin/templates/ts/graphql/mock-server.config.ts +11 -0
  46. package/dist/bin/templates/ts/rest/mock-requests/index.ts +2 -0
  47. package/dist/bin/templates/ts/rest/mock-requests/user.ts +37 -0
  48. package/dist/bin/templates/ts/rest/mock-requests/users.ts +14 -0
  49. package/dist/bin/templates/ts/rest/mock-server.config.ts +11 -0
  50. package/dist/bin/templates/tsconfig.json +11 -0
  51. package/dist/bin/validateMockServerConfig/baseUrlSchema/baseUrlSchema.d.ts +1 -0
  52. package/dist/bin/validateMockServerConfig/baseUrlSchema/baseUrlSchema.js +8 -0
  53. package/dist/bin/validateMockServerConfig/corsSchema/corsSchema.d.ts +23 -0
  54. package/dist/bin/validateMockServerConfig/corsSchema/corsSchema.js +17 -0
  55. package/dist/bin/validateMockServerConfig/databaseConfigSchema/databaseConfigSchema.d.ts +11 -0
  56. package/dist/bin/validateMockServerConfig/databaseConfigSchema/databaseConfigSchema.js +12 -0
  57. package/dist/bin/validateMockServerConfig/graphqlConfigSchema/graphqlConfigSchema.d.ts +248 -0
  58. package/dist/bin/validateMockServerConfig/graphqlConfigSchema/graphqlConfigSchema.js +31 -0
  59. package/dist/bin/validateMockServerConfig/graphqlConfigSchema/routeConfigSchema/routeConfigSchema.d.ts +61 -0
  60. package/dist/bin/validateMockServerConfig/graphqlConfigSchema/routeConfigSchema/routeConfigSchema.js +37 -0
  61. package/dist/bin/validateMockServerConfig/interceptorsSchema/interceptorsSchema.d.ts +11 -0
  62. package/dist/bin/validateMockServerConfig/interceptorsSchema/interceptorsSchema.js +11 -0
  63. package/dist/bin/validateMockServerConfig/portSchema/portSchema.d.ts +2 -0
  64. package/dist/bin/validateMockServerConfig/portSchema/portSchema.js +9 -0
  65. package/dist/bin/validateMockServerConfig/queueSchema/queueSchema.d.ts +8 -0
  66. package/dist/bin/validateMockServerConfig/queueSchema/queueSchema.js +12 -0
  67. package/dist/bin/validateMockServerConfig/restConfigSchema/restConfigSchema.d.ts +713 -0
  68. package/dist/bin/validateMockServerConfig/restConfigSchema/restConfigSchema.js +23 -0
  69. package/dist/bin/validateMockServerConfig/restConfigSchema/routeConfigSchema/routeConfigSchema.d.ts +77 -0
  70. package/dist/bin/validateMockServerConfig/restConfigSchema/routeConfigSchema/routeConfigSchema.js +52 -0
  71. package/dist/bin/validateMockServerConfig/settingsSchema/settingsSchema.d.ts +14 -0
  72. package/dist/bin/validateMockServerConfig/settingsSchema/settingsSchema.js +12 -0
  73. package/dist/bin/validateMockServerConfig/staticPathSchema/staticPathSchema.d.ts +20 -0
  74. package/dist/bin/validateMockServerConfig/staticPathSchema/staticPathSchema.js +14 -0
  75. package/dist/bin/validateMockServerConfig/utils/checkModeSchema/checkModeSchema.d.ts +5 -0
  76. package/dist/bin/validateMockServerConfig/utils/checkModeSchema/checkModeSchema.js +12 -0
  77. package/dist/bin/validateMockServerConfig/utils/entitiesSchema/entitiesSchema.d.ts +75 -0
  78. package/dist/bin/validateMockServerConfig/utils/entitiesSchema/entitiesSchema.js +67 -0
  79. package/dist/bin/validateMockServerConfig/utils/index.d.ts +6 -0
  80. package/dist/bin/validateMockServerConfig/utils/index.js +71 -0
  81. package/dist/bin/validateMockServerConfig/utils/jsonSchema/jsonSchema.d.ts +8 -0
  82. package/dist/bin/validateMockServerConfig/utils/jsonSchema/jsonSchema.js +13 -0
  83. package/dist/bin/validateMockServerConfig/utils/plainObjectSchema/plainObjectSchema.d.ts +2 -0
  84. package/dist/bin/validateMockServerConfig/utils/plainObjectSchema/plainObjectSchema.js +11 -0
  85. package/dist/bin/validateMockServerConfig/utils/requiredPropertiesSchema/requiredPropertiesSchema.d.ts +3 -0
  86. package/dist/bin/validateMockServerConfig/utils/requiredPropertiesSchema/requiredPropertiesSchema.js +10 -0
  87. package/dist/bin/validateMockServerConfig/utils/sharedSchema/sharedSchema.d.ts +3 -0
  88. package/dist/bin/validateMockServerConfig/utils/sharedSchema/sharedSchema.js +9 -0
  89. package/dist/bin/validateMockServerConfig/validateApiMockServerConfig.d.ts +2 -0
  90. package/dist/bin/validateMockServerConfig/validateApiMockServerConfig.js +44 -0
  91. package/dist/bin/validateMockServerConfig/validateMockServerConfig.js +27 -20
  92. package/dist/src/core/database/createDatabaseRoutes/helpers/createNestedDatabaseRoutes/createNestedDatabaseRoutes.js +27 -16
  93. package/dist/src/core/database/createDatabaseRoutes/helpers/createShallowDatabaseRoutes/createShallowDatabaseRoutes.js +64 -3
  94. package/dist/src/core/database/createDatabaseRoutes/helpers/filter/filter.d.ts +1 -0
  95. package/dist/src/core/database/createDatabaseRoutes/helpers/filter/filter.js +46 -6
  96. package/dist/src/core/database/createDatabaseRoutes/helpers/pagination/pagination.d.ts +1 -0
  97. package/dist/src/core/database/createDatabaseRoutes/helpers/search/search.d.ts +4 -0
  98. package/dist/src/core/database/createDatabaseRoutes/helpers/search/search.js +29 -0
  99. package/dist/src/core/database/createDatabaseRoutes/helpers/sort/sort.d.ts +1 -0
  100. package/dist/src/core/database/createDatabaseRoutes/helpers/sort/sort.js +3 -4
  101. package/dist/src/core/database/createDatabaseRoutes/storages/File/FileWriter.js +2 -2
  102. package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.js +13 -7
  103. package/dist/src/core/graphql/createGraphQLRoutes/helpers/prepareGraphQLRequestConfigs/prepareGraphQLRequestConfigs.js +7 -1
  104. package/dist/src/core/rest/createRestRoutes/createRestRoutes.js +27 -10
  105. package/dist/src/core/rest/createRestRoutes/helpers/prepareRestRequestConfigs/prepareRestRequestConfigs.js +6 -0
  106. package/dist/src/server/createGraphQLMockServer/createGraphQLMockServer.js +1 -1
  107. package/dist/src/server/createRestMockServer/createRestMockServer.js +1 -1
  108. package/dist/src/static/views/components/header/index.js +1 -1
  109. package/dist/src/static/views/features/scheme/index.js +31 -31
  110. package/dist/src/static/views/features/tab/index.js +12 -12
  111. package/dist/src/utils/constants/appPath.js +1 -2
  112. package/dist/src/utils/constants/checkModes.d.ts +8 -9
  113. package/dist/src/utils/constants/checkModes.js +8 -16
  114. package/dist/src/utils/constants/default.js +2 -3
  115. package/dist/src/utils/helpers/files/index.d.ts +1 -0
  116. package/dist/src/utils/helpers/files/index.js +16 -0
  117. package/dist/src/utils/helpers/files/isFilePathValid/isFilePathValid.d.ts +1 -0
  118. package/dist/src/utils/helpers/files/isFilePathValid/isFilePathValid.js +19 -0
  119. package/dist/src/utils/helpers/index.d.ts +1 -0
  120. package/dist/src/utils/helpers/index.js +11 -0
  121. package/dist/src/utils/helpers/tests/createTmpDir.d.ts +1 -0
  122. package/dist/src/utils/helpers/tests/createTmpDir.js +12 -0
  123. package/dist/src/utils/helpers/tests/index.d.ts +1 -0
  124. package/dist/{bin/validateMockServerConfig/helpers/isCheckModeValid → src/utils/helpers/tests}/index.js +4 -4
  125. package/dist/src/utils/types/entities.d.ts +48 -0
  126. package/dist/src/utils/types/entities.js +1 -0
  127. package/dist/src/utils/types/graphql.d.ts +11 -45
  128. package/dist/src/utils/types/index.d.ts +1 -0
  129. package/dist/src/utils/types/index.js +11 -0
  130. package/dist/src/utils/types/rest.d.ts +17 -46
  131. package/dist/src/utils/types/server.d.ts +5 -4
  132. package/package.json +35 -27
  133. package/dist/bin/resolveConfigFilePath/resolveConfigFilePath.d.ts +0 -1
  134. package/dist/bin/resolveConfigFilePath/resolveConfigFilePath.js +0 -16
  135. package/dist/bin/validateMockServerConfig/helpers/index.d.ts +0 -2
  136. package/dist/bin/validateMockServerConfig/helpers/index.js +0 -27
  137. package/dist/bin/validateMockServerConfig/helpers/isCheckModeValid/index.d.ts +0 -1
  138. package/dist/bin/validateMockServerConfig/helpers/isCheckModeValid/isCheckModeValid.d.ts +0 -1
  139. package/dist/bin/validateMockServerConfig/helpers/isCheckModeValid/isCheckModeValid.js +0 -12
  140. package/dist/bin/validateMockServerConfig/helpers/isDescriptorValueValid/index.d.ts +0 -1
  141. package/dist/bin/validateMockServerConfig/helpers/isDescriptorValueValid/index.js +0 -16
  142. package/dist/bin/validateMockServerConfig/helpers/isDescriptorValueValid/isDescriptorValueValid.d.ts +0 -2
  143. package/dist/bin/validateMockServerConfig/helpers/isDescriptorValueValid/isDescriptorValueValid.js +0 -43
  144. package/dist/bin/validateMockServerConfig/validateBaseUrl/validateBaseUrl.d.ts +0 -1
  145. package/dist/bin/validateMockServerConfig/validateBaseUrl/validateBaseUrl.js +0 -15
  146. package/dist/bin/validateMockServerConfig/validateCors/validateCors.d.ts +0 -1
  147. package/dist/bin/validateMockServerConfig/validateCors/validateCors.js +0 -84
  148. package/dist/bin/validateMockServerConfig/validateDatabaseConfig/validateDatabaseConfig.d.ts +0 -1
  149. package/dist/bin/validateMockServerConfig/validateDatabaseConfig/validateDatabaseConfig.js +0 -45
  150. package/dist/bin/validateMockServerConfig/validateGraphqlConfig/validateGraphqlConfig.d.ts +0 -1
  151. package/dist/bin/validateMockServerConfig/validateGraphqlConfig/validateGraphqlConfig.js +0 -58
  152. package/dist/bin/validateMockServerConfig/validateGraphqlConfig/validateRoutes/validateRoutes.d.ts +0 -2
  153. package/dist/bin/validateMockServerConfig/validateGraphqlConfig/validateRoutes/validateRoutes.js +0 -153
  154. package/dist/bin/validateMockServerConfig/validateInterceptors/validateInterceptors.d.ts +0 -1
  155. package/dist/bin/validateMockServerConfig/validateInterceptors/validateInterceptors.js +0 -27
  156. package/dist/bin/validateMockServerConfig/validatePort/validatePort.d.ts +0 -1
  157. package/dist/bin/validateMockServerConfig/validatePort/validatePort.js +0 -12
  158. package/dist/bin/validateMockServerConfig/validateQueue/validateQueue.d.ts +0 -1
  159. package/dist/bin/validateMockServerConfig/validateQueue/validateQueue.js +0 -29
  160. package/dist/bin/validateMockServerConfig/validateRestConfig/validateRestConfig.d.ts +0 -1
  161. package/dist/bin/validateMockServerConfig/validateRestConfig/validateRestConfig.js +0 -57
  162. package/dist/bin/validateMockServerConfig/validateRestConfig/validateRoutes/validateRoutes.d.ts +0 -2
  163. package/dist/bin/validateMockServerConfig/validateRestConfig/validateRoutes/validateRoutes.js +0 -157
  164. package/dist/bin/validateMockServerConfig/validateSettings/validateSettings.d.ts +0 -1
  165. package/dist/bin/validateMockServerConfig/validateSettings/validateSettings.js +0 -34
  166. package/dist/bin/validateMockServerConfig/validateStaticPath/validateStaticPath.d.ts +0 -1
  167. package/dist/bin/validateMockServerConfig/validateStaticPath/validateStaticPath.js +0 -53
package/README.md CHANGED
@@ -88,21 +88,30 @@ Configs are the fundamental part of the mock server. These configs are easy to f
88
88
 
89
89
  ##### Rest request config
90
90
 
91
+ Every route must be configured to handle response content in one of three ways: data or [queue](#polling) or [file](#file-responses).
92
+
91
93
  - `path` {string | RegExp} request path
92
- - `method` {GET | POST | DELETE | PUT | PATCH} rest api method
94
+ - `method` {get | post | delete | put | patch | options} rest api method
93
95
  - `routes` {RestRouteConfig[]} request routes
94
- - `data` {any} mock data of request
96
+ - `data?` {any} mock data of request
97
+ - `queue?` {Array<{ time?: number; data: any}>} queue for polling with opportunity to set time for each response
98
+ - `file?` {string} path to file for return in response
99
+ - `settings?` {Settings} settings for route (polling on/off, etc.)
95
100
  - `entities?` Object<headers | cookies | query | params | body> object that helps in data retrieval
96
101
  - `interceptors?` {Interceptors} functions to change request or response parameters, [read](#interceptors)
97
102
  - `interceptors?` {Interceptors} functions to change request or response parameters, [read](#interceptors)
98
103
 
99
104
  ##### GraphQL request config
100
105
 
106
+ Every route must be configured to handle response content in one of two ways: data or [queue](#polling).
107
+
101
108
  - `operationType` {query | mutation} graphql operation type
102
109
  - `operationName?` {string | RegExp} graphql operation name
103
110
  - `query?`: {string} graphql query as string
104
111
  - `routes` {GraphQLRouteConfig[]} request routes
105
- - `data` {any} mock data of request
112
+ - `data?` {any} mock data of request
113
+ - `queue?` {Array<{ time?: number; data: any}>} queue for polling with opportunity to set time for each response
114
+ - `settings?` {Settings} settings for route (polling on/off, etc.)
106
115
  - `entities?` Object<headers | cookies | query | variables> object that helps in data retrieval
107
116
  - `interceptors?` {Interceptors} functions to change request or response parameters, [read](#interceptors)
108
117
  - `interceptors?` {Interceptors} functions to change request or response parameters, [read](#interceptors)
@@ -473,6 +482,66 @@ const mockServerConfig = {
473
482
  export default mockServerConfig;
474
483
  ```
475
484
 
485
+ #### File responses
486
+
487
+ Rest routes support paths to files. If a route is matched, the server will send data from the file. If the file is not found, the server will return 404.
488
+
489
+ ```javascript
490
+ /** @type {import('mock-config-server').MockServerConfig} */
491
+ const mockServerConfig = {
492
+ rest: {
493
+ baseUrl: '/api',
494
+ configs: [
495
+ {
496
+ path: '/files/settings',
497
+ method: 'get',
498
+ routes: [
499
+ {
500
+ file: './settings.json'
501
+ }
502
+ ]
503
+ }
504
+ ]
505
+ }
506
+ };
507
+
508
+ export default mockServerConfig;
509
+ ```
510
+
511
+ > If the file path is absolute, then this path will be used as is. If the file path is relative, it will be appended to the current working directory.
512
+
513
+ If the file exists, response interceptors will receive null as the data argument.
514
+
515
+ ```javascript
516
+ /** @type {import('mock-config-server').MockServerConfig} */
517
+ const mockServerConfig = {
518
+ rest: {
519
+ baseUrl: '/api',
520
+ configs: [
521
+ {
522
+ path: '/files/settings',
523
+ method: 'get',
524
+ routes: [
525
+ {
526
+ file: './settings.json',
527
+ interceptors: {
528
+ response: (data) => {
529
+ console.log(data); // null
530
+ return data;
531
+ }
532
+ }
533
+ }
534
+ ]
535
+ }
536
+ ]
537
+ }
538
+ };
539
+
540
+ export default mockServerConfig;
541
+ ```
542
+
543
+ > Any changes to the data will not affect the file (and the response, respectively).
544
+
476
545
  #### Static Path
477
546
 
478
547
  Entity for connecting statics to the server, like HTML, JSON, PNG, etc.
@@ -697,6 +766,20 @@ GET /users?_begin=20&_end=30
697
766
 
698
767
  Works exactly as [slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice), \_begin and \_end are optional
699
768
 
769
+ ### Full text search
770
+
771
+ > Add \_q parameter for search data, search can be done by strings and numbers
772
+
773
+ ```
774
+ GET /users?_q=siberia
775
+ ```
776
+
777
+ For multiple search
778
+
779
+ ```
780
+ GET /users?_q=siberia&_q=24
781
+ ```
782
+
700
783
  ### File example
701
784
 
702
785
  ```javascript
@@ -730,6 +813,18 @@ Examples:
730
813
  mcs --help
731
814
  ```
732
815
 
816
+ # Init Command
817
+
818
+ The init command is used to initialize a new project or set up the initial configuration for a tool. It helps users get started with a new project by providing a streamlined setup process.
819
+
820
+ ```
821
+ mcs init
822
+
823
+ Examples:
824
+ mcs init
825
+ mcs init --baseurl /base/url --port 3000
826
+ ```
827
+
733
828
  ## ✨ Contributors
734
829
 
735
830
  <table>
@@ -769,6 +864,15 @@ Examples:
769
864
  <br />
770
865
  <sub style="font-size:13px"><b>🎱️ anv296</b></sub>
771
866
  </a>
867
+ </td>
868
+ <td align="center" style="word-wrap: break-word; width: 100.0; height: 100.0">
869
+ <a href="https://github.com/kvelian">
870
+ <img src="https://avatars.githubusercontent.com/u/81089091?s=400&u=7c4fcc6d120f4b13ccbd03a9a384622b6523c376&v=4"
871
+ width="100;"
872
+ alt="kvelian" />
873
+ <br />
874
+ <sub style="font-size:13px"><b>🌵 kvelian</b></sub>
875
+ </a>
772
876
  </td>
773
877
  </tr>
774
878
  </table>
package/dist/bin/build.js CHANGED
@@ -31,7 +31,7 @@ const build = async argv => {
31
31
  let instance;
32
32
  build.onStart(() => {
33
33
  var _instance;
34
- (_instance = instance) === null || _instance === void 0 ? void 0 : _instance.destroy();
34
+ (_instance = instance) === null || _instance === void 0 || _instance.destroy();
35
35
  });
36
36
  build.onEnd(result => {
37
37
  if (!result.errors.length) {
package/dist/bin/cli.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const cli: () => void;
1
+ export declare const cli: () => Promise<void> | undefined;
package/dist/bin/cli.js CHANGED
@@ -7,24 +7,33 @@ exports.cli = void 0;
7
7
  var _yargs = _interopRequireDefault(require("yargs"));
8
8
  var _helpers = require("yargs/helpers");
9
9
  var _build = require("./build");
10
+ var _init = require("./init");
10
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ const initOptions = {
13
+ baseUrl: {
14
+ alias: 'b',
15
+ description: 'Set base url for mock server',
16
+ type: 'string'
17
+ },
18
+ port: {
19
+ alias: 'p',
20
+ description: 'Set port for server',
21
+ type: 'number'
22
+ },
23
+ staticPath: {
24
+ alias: 's',
25
+ description: 'Set static path for mock server',
26
+ type: 'string'
27
+ }
28
+ };
11
29
  const cli = () => {
12
- const argv = (0, _yargs.default)((0, _helpers.hideBin)(process.argv)).usage('mcs [options]').epilogue('More info: https://github.com/siberiacancode/mock-config-server#readme').options({
13
- baseUrl: {
14
- alias: 'b',
15
- description: 'Set base url for mock server',
16
- type: 'string'
17
- },
18
- port: {
19
- alias: 'p',
20
- description: 'Set port for server',
21
- type: 'number'
22
- },
23
- staticPath: {
24
- alias: 's',
25
- description: 'Set static path for mock server',
26
- type: 'string'
27
- },
30
+ const processArgv = (0, _helpers.hideBin)(process.argv);
31
+ if (processArgv.includes('init')) {
32
+ const argv = (0, _yargs.default)(processArgv).options(initOptions).parse();
33
+ return (0, _init.init)(argv);
34
+ }
35
+ const argv = (0, _yargs.default)(processArgv).usage('mcs [options]').epilogue('More info: https://github.com/siberiacancode/mock-config-server#readme').options({
36
+ ...initOptions,
28
37
  config: {
29
38
  alias: 'c',
30
39
  description: 'Set path to config file',
@@ -0,0 +1,9 @@
1
+ interface CreateTemplateOptions {
2
+ withTypescript: boolean;
3
+ baseUrl: string;
4
+ staticPath: string;
5
+ port: number;
6
+ apiType: 'rest' | 'graphql' | 'full';
7
+ }
8
+ export declare const createTemplate: (options: CreateTemplateOptions) => void;
9
+ export {};
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createTemplate = void 0;
7
+ var _nodeFs = _interopRequireDefault(require("node:fs"));
8
+ var _constants = require("../../src/utils/constants");
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ const createTemplate = options => {
11
+ const language = options.withTypescript ? 'ts' : 'js';
12
+ const templatePath = `dist/bin/templates/${language}/${options.apiType}`;
13
+ _nodeFs.default.cpSync(`${templatePath}/mock-requests`, `${_constants.APP_PATH}/mock-requests`, {
14
+ recursive: true,
15
+ force: true
16
+ });
17
+ let mockServerConfig = _nodeFs.default.readFileSync(`${templatePath}/mock-server.config.${language}`, 'utf8');
18
+ if (options.staticPath !== '/') {
19
+ mockServerConfig = mockServerConfig.replace(`port: ${_constants.DEFAULT.PORT}`, `port: ${_constants.DEFAULT.PORT},\n staticPath: '${options.staticPath}'`);
20
+ }
21
+ mockServerConfig = mockServerConfig.replace(`port: ${_constants.DEFAULT.PORT}`, `port: ${options.port.toString()}`);
22
+ mockServerConfig = mockServerConfig.replace("baseUrl: '/'", `baseUrl: '${options.baseUrl}'`);
23
+ _nodeFs.default.writeFileSync(`${_constants.APP_PATH}/mock-server.config.${language}`, mockServerConfig);
24
+ };
25
+ exports.createTemplate = createTemplate;
@@ -0,0 +1,2 @@
1
+ import { z } from 'zod';
2
+ export declare const getMostSpecificPathFromError: (error: z.ZodError) => (string | number)[];
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getMostSpecificPathFromError = void 0;
7
+ var _zod = require("zod");
8
+ const getMostSpecificPathFromError = error => {
9
+ let currentMostSpecificPath = [];
10
+ for (const issue of error.issues) {
11
+ if (issue.code === _zod.z.ZodIssueCode.invalid_union) {
12
+ for (const unionError of issue.unionErrors) {
13
+ const unionErrorMostSpecificPath = getMostSpecificPathFromError(unionError);
14
+ if (unionErrorMostSpecificPath.length > currentMostSpecificPath.length) {
15
+ currentMostSpecificPath = unionErrorMostSpecificPath;
16
+ }
17
+ }
18
+ // eslint-disable-next-line no-continue
19
+ continue;
20
+ }
21
+ if (issue.code === _zod.z.ZodIssueCode.unrecognized_keys) {
22
+ const [unrecognizedKey] = issue.keys;
23
+ const issuePath = [...issue.path, unrecognizedKey];
24
+ if (issuePath.length > currentMostSpecificPath.length) {
25
+ currentMostSpecificPath = issuePath;
26
+ }
27
+ // eslint-disable-next-line no-continue
28
+ continue;
29
+ }
30
+ if (issue.path.length > currentMostSpecificPath.length) {
31
+ currentMostSpecificPath = issue.path;
32
+ }
33
+ }
34
+ return currentMostSpecificPath;
35
+ };
36
+ exports.getMostSpecificPathFromError = getMostSpecificPathFromError;
@@ -0,0 +1 @@
1
+ export declare const getValidationMessageFromPath: (path: (string | number)[]) => string | number;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getValidationMessageFromPath = void 0;
7
+ const getValidationMessageFromPath = path => path.reduce((validationMessageAcc, pathElement) => {
8
+ if (typeof pathElement === 'number') return `${validationMessageAcc}[${pathElement}]`;
9
+ return `${validationMessageAcc}.${pathElement}`;
10
+ }, '');
11
+ exports.getValidationMessageFromPath = getValidationMessageFromPath;
@@ -1,3 +1,7 @@
1
+ export * from './createTemplate';
2
+ export * from './getMostSpecificPathFromError';
3
+ export * from './getValidationMessageFromPath';
4
+ export * from './isOnlyRequestedDataResolvingPropertyExists';
1
5
  export * from './resolveConfigFile';
2
6
  export * from './resolveConfigFilePath';
3
7
  export * from './resolveExportsFromSourceCode';
@@ -3,6 +3,50 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _createTemplate = require("./createTemplate");
7
+ Object.keys(_createTemplate).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _createTemplate[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _createTemplate[key];
14
+ }
15
+ });
16
+ });
17
+ var _getMostSpecificPathFromError = require("./getMostSpecificPathFromError");
18
+ Object.keys(_getMostSpecificPathFromError).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _getMostSpecificPathFromError[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _getMostSpecificPathFromError[key];
25
+ }
26
+ });
27
+ });
28
+ var _getValidationMessageFromPath = require("./getValidationMessageFromPath");
29
+ Object.keys(_getValidationMessageFromPath).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _getValidationMessageFromPath[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _getValidationMessageFromPath[key];
36
+ }
37
+ });
38
+ });
39
+ var _isOnlyRequestedDataResolvingPropertyExists = require("./isOnlyRequestedDataResolvingPropertyExists");
40
+ Object.keys(_isOnlyRequestedDataResolvingPropertyExists).forEach(function (key) {
41
+ if (key === "default" || key === "__esModule") return;
42
+ if (key in exports && exports[key] === _isOnlyRequestedDataResolvingPropertyExists[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _isOnlyRequestedDataResolvingPropertyExists[key];
47
+ }
48
+ });
49
+ });
6
50
  var _resolveConfigFile = require("./resolveConfigFile");
7
51
  Object.keys(_resolveConfigFile).forEach(function (key) {
8
52
  if (key === "default" || key === "__esModule") return;
@@ -0,0 +1,4 @@
1
+ import type { PlainObject } from '../../src/utils/types';
2
+ declare const DATA_RESOLVING_PROPERTIES: readonly ["data", "file", "queue"];
3
+ export declare const isOnlyRequestedDataResolvingPropertyExists: (object: PlainObject, requestedDataResolvingProperty: (typeof DATA_RESOLVING_PROPERTIES)[number]) => boolean;
4
+ export {};
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isOnlyRequestedDataResolvingPropertyExists = void 0;
7
+ const DATA_RESOLVING_PROPERTIES = ['data', 'file', 'queue'];
8
+ const isOnlyRequestedDataResolvingPropertyExists = (object, requestedDataResolvingProperty) => DATA_RESOLVING_PROPERTIES.every(dataResolvingProperty => dataResolvingProperty === requestedDataResolvingProperty ? dataResolvingProperty in object : !(dataResolvingProperty in object));
9
+ exports.isOnlyRequestedDataResolvingPropertyExists = isOnlyRequestedDataResolvingPropertyExists;
@@ -0,0 +1,2 @@
1
+ import type { MockServerConfigArgv } from '../src/utils/types';
2
+ export declare const init: (argv: MockServerConfigArgv) => Promise<void>;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.init = void 0;
7
+ var _ansiColors = _interopRequireDefault(require("ansi-colors"));
8
+ var _prompts = _interopRequireDefault(require("prompts"));
9
+ var _baseUrlSchema = require("./validateMockServerConfig/baseUrlSchema/baseUrlSchema");
10
+ var _portSchema = require("./validateMockServerConfig/portSchema/portSchema");
11
+ var _staticPathSchema = require("./validateMockServerConfig/staticPathSchema/staticPathSchema");
12
+ var _helpers = require("./helpers");
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ const init = async argv => {
15
+ try {
16
+ var _process$env$npm_conf;
17
+ const response = await (0, _prompts.default)([{
18
+ name: 'withTypescript',
19
+ type: 'toggle',
20
+ message: 'Would you like to use TypeScript?',
21
+ initial: true,
22
+ active: 'Yes',
23
+ inactive: 'No'
24
+ }, {
25
+ type: 'select',
26
+ name: 'apiType',
27
+ message: 'Choose api type',
28
+ initial: 0,
29
+ choices: [{
30
+ title: 'Rest',
31
+ description: 'Rest api sample',
32
+ value: 'rest'
33
+ }, {
34
+ title: 'GraphQL',
35
+ description: 'GraphQL api sample',
36
+ value: 'graphql'
37
+ }, {
38
+ title: 'Both',
39
+ description: 'Rest api and GraphQL api sample',
40
+ value: 'full'
41
+ }]
42
+ }, {
43
+ name: 'baseUrl',
44
+ type: argv.baseUrl ? null : 'text',
45
+ message: 'Base url (must start with a forward slash):',
46
+ initial: '/',
47
+ validate: baseUrl => {
48
+ try {
49
+ _baseUrlSchema.baseUrlSchema.parse(baseUrl);
50
+ return true;
51
+ } catch {
52
+ return 'Invalid base url value';
53
+ }
54
+ }
55
+ }, {
56
+ name: 'port',
57
+ type: argv.port ? null : 'number',
58
+ message: 'Port:',
59
+ initial: 31299,
60
+ validate: port => {
61
+ try {
62
+ _portSchema.portSchema.parse(+port);
63
+ return true;
64
+ } catch (error) {
65
+ return 'Invalid port value';
66
+ }
67
+ }
68
+ }, {
69
+ name: 'staticPath',
70
+ type: argv.staticPath ? null : 'text',
71
+ message: 'Static path (must start with a forward slash):',
72
+ initial: '/',
73
+ validate: staticPath => {
74
+ try {
75
+ _staticPathSchema.staticPathSchema.parse(staticPath);
76
+ return true;
77
+ } catch {
78
+ return 'Invalid static path value';
79
+ }
80
+ }
81
+ }], {
82
+ onCancel: () => {
83
+ throw new Error('❌ Operation cancelled');
84
+ }
85
+ });
86
+ await (0, _helpers.createTemplate)({
87
+ ...argv,
88
+ ...response
89
+ });
90
+ const userAgent = (_process$env$npm_conf = process.env.npm_config_user_agent) !== null && _process$env$npm_conf !== void 0 ? _process$env$npm_conf : '';
91
+ // eslint-disable-next-line no-nested-ternary
92
+ const packageManager = /pnpm/.test(userAgent) ? 'pnpm' : /yarn/.test(userAgent) ? 'yarn' : 'npx';
93
+ console.log('\n');
94
+ console.log(_ansiColors.default.bold('🎉 Thanks for using mock-config-server! 🎉'));
95
+ console.log(`start command: ${_ansiColors.default.bold(_ansiColors.default.green(`${packageManager} mcs`))}`);
96
+ } catch (cancelled) {
97
+ console.log(cancelled === null || cancelled === void 0 ? void 0 : cancelled.message);
98
+ process.exit(1);
99
+ }
100
+ };
101
+ exports.init = init;
package/dist/bin/run.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /// <reference types="node" />
3
3
  import type { MockServerConfig, MockServerConfigArgv } from '../src';
4
- export declare const run: (mockConfig: MockServerConfig, argv: MockServerConfigArgv) => (import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse> & {
4
+ export declare const run: (mockConfig: MockServerConfig, { baseUrl, port, staticPath }: MockServerConfigArgv) => (import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse> & {
5
5
  destroy: (callback?: ((err?: Error | undefined) => void) | undefined) => import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
6
6
  }) | undefined;
package/dist/bin/run.js CHANGED
@@ -6,13 +6,34 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.run = void 0;
8
8
  var _server = require("../src/server");
9
+ var _helpers = require("../src/utils/helpers");
10
+ var _validateApiMockServerConfig = require("./validateMockServerConfig/validateApiMockServerConfig");
9
11
  var _validateMockServerConfig = require("./validateMockServerConfig/validateMockServerConfig");
10
- const run = (mockConfig, argv) => {
12
+ const run = (mockConfig, {
13
+ baseUrl,
14
+ port,
15
+ staticPath
16
+ }) => {
11
17
  try {
12
18
  const mergedMockServerConfig = {
13
19
  ...mockConfig,
14
- ...argv
20
+ baseUrl,
21
+ port,
22
+ staticPath
15
23
  };
24
+ if (!mergedMockServerConfig.rest && !mergedMockServerConfig.graphql && 'configs' in mergedMockServerConfig) {
25
+ const mergedApiMockServerConfig = mergedMockServerConfig;
26
+ if (Array.isArray(mergedApiMockServerConfig.configs) && (0, _helpers.isPlainObject)(mergedApiMockServerConfig.configs[0]) && 'path' in mergedApiMockServerConfig.configs[0]) {
27
+ (0, _validateApiMockServerConfig.validateApiMockServerConfig)(mergedApiMockServerConfig, 'rest');
28
+ return (0, _server.startRestMockServer)(mergedApiMockServerConfig);
29
+ }
30
+ if (Array.isArray(mergedApiMockServerConfig.configs) && (0, _helpers.isPlainObject)(mergedApiMockServerConfig.configs[0]) && ('query' in mergedApiMockServerConfig.configs[0] || 'operationName' in mergedApiMockServerConfig.configs[0])) {
31
+ (0, _validateApiMockServerConfig.validateApiMockServerConfig)(mergedApiMockServerConfig, 'graphql');
32
+ return (0, _server.startGraphQLMockServer)(mergedApiMockServerConfig);
33
+ }
34
+ (0, _validateApiMockServerConfig.validateApiMockServerConfig)(mergedApiMockServerConfig, 'rest');
35
+ return (0, _server.startRestMockServer)(mergedApiMockServerConfig);
36
+ }
16
37
  (0, _validateMockServerConfig.validateMockServerConfig)(mergedMockServerConfig);
17
38
  return (0, _server.startMockServer)(mergedMockServerConfig);
18
39
  } catch (error) {
@@ -0,0 +1,14 @@
1
+ const eslint = require('../../.eslintrc.js');
2
+
3
+ module.exports = {
4
+ ...eslint,
5
+ overrides: [
6
+ ...eslint.overrides,
7
+ {
8
+ files: ['*.ts'],
9
+ parserOptions: {
10
+ project: './bin/templates/tsconfig.json'
11
+ }
12
+ }
13
+ ]
14
+ };
@@ -0,0 +1,2 @@
1
+ export * from './user';
2
+ export * from './users';
@@ -0,0 +1,35 @@
1
+ export const getUserQuery = {
2
+ operationName: 'getUser',
3
+ operationType: 'query',
4
+ routes: [
5
+ {
6
+ data: { id: 1, emoji: '🎉' }
7
+ },
8
+ {
9
+ data: { id: 2, emoji: '🔥' },
10
+ entities: {
11
+ variables: {
12
+ id: 2
13
+ }
14
+ }
15
+ }
16
+ ]
17
+ };
18
+
19
+ export const createUserMutation = {
20
+ operationName: 'createUser',
21
+ operationType: 'mutation',
22
+ routes: [
23
+ {
24
+ data: { id: 1, emoji: '🎉' }
25
+ },
26
+ {
27
+ data: { id: 2, emoji: '🔥' },
28
+ entities: {
29
+ variables: {
30
+ emoji: '🔥'
31
+ }
32
+ }
33
+ }
34
+ ]
35
+ };
@@ -0,0 +1,12 @@
1
+ export const getUsersQuery = {
2
+ operationName: 'getUsers',
3
+ operationType: 'query',
4
+ routes: [
5
+ {
6
+ data: [
7
+ { id: 1, emoji: '🎉' },
8
+ { id: 2, emoji: '🔥' }
9
+ ]
10
+ }
11
+ ]
12
+ };
@@ -0,0 +1,2 @@
1
+ export * from './user';
2
+ export * from './users';
@@ -0,0 +1,35 @@
1
+ export const getUserRequest = {
2
+ method: 'get',
3
+ path: '/users/:id',
4
+ routes: [
5
+ {
6
+ data: { id: 1, emoji: '🎉' }
7
+ },
8
+ {
9
+ data: { id: 2, emoji: '🔥' },
10
+ entities: {
11
+ params: {
12
+ id: 2
13
+ }
14
+ }
15
+ }
16
+ ]
17
+ };
18
+
19
+ export const postUserRequest = {
20
+ method: 'post',
21
+ path: '/users',
22
+ routes: [
23
+ {
24
+ data: { id: 1, emoji: '🎉' }
25
+ },
26
+ {
27
+ data: { id: 2, emoji: '🔥' },
28
+ entities: {
29
+ body: {
30
+ emoji: '🔥'
31
+ }
32
+ }
33
+ }
34
+ ]
35
+ };
@@ -0,0 +1,12 @@
1
+ export const getUsersRequest = {
2
+ path: '/users',
3
+ method: 'get',
4
+ routes: [
5
+ {
6
+ data: [
7
+ { id: 1, emoji: '🎉' },
8
+ { id: 2, emoji: '🔥' }
9
+ ]
10
+ }
11
+ ]
12
+ };