mock-config-server 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +32 -15
  3. package/dist/bin/build.d.ts +2 -0
  4. package/dist/bin/build.js +49 -0
  5. package/dist/bin/cli.js +14 -2
  6. package/dist/bin/helpers/index.d.ts +3 -0
  7. package/dist/bin/helpers/index.js +19 -0
  8. package/dist/bin/helpers/resolveConfigFile.d.ts +2 -0
  9. package/dist/bin/helpers/resolveConfigFile.js +20 -0
  10. package/dist/bin/helpers/resolveConfigFilePath.d.ts +1 -0
  11. package/dist/bin/helpers/resolveConfigFilePath.js +39 -0
  12. package/dist/bin/resolveConfigFilePath/resolveConfigFilePath.d.ts +1 -0
  13. package/dist/bin/resolveConfigFilePath/resolveConfigFilePath.js +39 -0
  14. package/dist/bin/run.d.ts +6 -0
  15. package/dist/bin/run.js +17 -0
  16. package/dist/bin/validateMockServerConfig/validateGraphqlConfig/validateRoutes/validateRoutes.js +11 -11
  17. package/dist/bin/validateMockServerConfig/validateRestConfig/validateRoutes/validateRoutes.js +15 -15
  18. package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.d.ts +2 -2
  19. package/dist/src/core/graphql/createGraphQLRoutes/createGraphQLRoutes.js +9 -11
  20. package/dist/src/core/graphql/createGraphQLRoutes/helpers/prepareGraphQLRequestConfigs/prepareGraphQLRequestConfigs.js +3 -1
  21. package/dist/src/core/middlewares/cookieParseMiddleware/cookieParseMiddleware.d.ts +2 -0
  22. package/dist/src/core/middlewares/cookieParseMiddleware/cookieParseMiddleware.js +16 -0
  23. package/dist/src/core/middlewares/cookieParseMiddleware/helpers/index.d.ts +1 -0
  24. package/dist/src/core/middlewares/cookieParseMiddleware/helpers/index.js +17 -0
  25. package/dist/src/core/middlewares/cookieParseMiddleware/helpers/parseCookie/parseCookie.d.ts +3 -0
  26. package/dist/src/core/middlewares/cookieParseMiddleware/helpers/parseCookie/parseCookie.js +17 -0
  27. package/dist/src/core/middlewares/corsMiddleware/corsMiddleware.js +12 -12
  28. package/dist/src/core/middlewares/destroyerMiddleware/destroyerMiddleware.d.ts +7 -0
  29. package/dist/src/core/middlewares/destroyerMiddleware/destroyerMiddleware.js +23 -0
  30. package/dist/src/core/middlewares/index.d.ts +3 -0
  31. package/dist/src/core/middlewares/index.js +3 -0
  32. package/dist/src/core/middlewares/noCorsMiddleware/noCorsMiddleware.js +13 -13
  33. package/dist/src/core/middlewares/requestInterceptorMiddleware/requestInterceptorMiddleware.d.ts +3 -0
  34. package/dist/src/core/middlewares/requestInterceptorMiddleware/requestInterceptorMiddleware.js +11 -0
  35. package/dist/src/core/rest/createRestRoutes/createRestRoutes.d.ts +2 -2
  36. package/dist/src/core/rest/createRestRoutes/createRestRoutes.js +9 -11
  37. package/dist/src/core/rest/createRestRoutes/helpers/prepareRestRequestConfigs/prepareRestRequestConfigs.js +3 -1
  38. package/dist/src/server/createMockServer/createMockServer.js +15 -2
  39. package/dist/src/server/index.d.ts +1 -1
  40. package/dist/src/server/index.js +1 -1
  41. package/dist/src/server/startMockServer/startMockServer.d.ts +4 -1
  42. package/dist/src/server/startMockServer/startMockServer.js +4 -1
  43. package/dist/src/utils/helpers/interceptors/callRequestInterceptor/callRequestInterceptor.d.ts +8 -0
  44. package/dist/src/utils/helpers/interceptors/callRequestInterceptor/callRequestInterceptor.js +19 -0
  45. package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.d.ts +6 -5
  46. package/dist/src/utils/helpers/interceptors/callResponseInterceptors/callResponseInterceptors.js +20 -23
  47. package/dist/src/utils/helpers/interceptors/helpers/setDelay.d.ts +1 -0
  48. package/dist/src/utils/helpers/interceptors/helpers/setDelay.js +8 -0
  49. package/dist/src/utils/helpers/interceptors/index.d.ts +1 -1
  50. package/dist/src/utils/helpers/interceptors/index.js +1 -1
  51. package/dist/src/utils/helpers/sleep.d.ts +1 -1
  52. package/dist/src/utils/helpers/sleep.js +2 -2
  53. package/dist/src/utils/types/graphql.d.ts +1 -1
  54. package/dist/src/utils/types/interceptors.d.ts +15 -6
  55. package/dist/src/utils/types/rest.d.ts +7 -7
  56. package/dist/src/utils/types/server.d.ts +19 -9
  57. package/dist/src/utils/types/values.d.ts +1 -0
  58. package/package.json +4 -2
  59. package/dist/bin/start.d.ts +0 -3
  60. package/dist/bin/start.js +0 -73
  61. package/dist/src/utils/helpers/interceptors/callRequestInterceptors/callRequestInterceptors.d.ts +0 -12
  62. package/dist/src/utils/helpers/interceptors/callRequestInterceptors/callRequestInterceptors.js +0 -13
  63. /package/dist/bin/{resolveExportsFromSourceCode → helpers}/resolveExportsFromSourceCode.d.ts +0 -0
  64. /package/dist/bin/{resolveExportsFromSourceCode → helpers}/resolveExportsFromSourceCode.js +0 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 siberiacancode
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -57,19 +57,21 @@ export default mockServerConfig;
57
57
  Start **🎉 Mock Config Server**
58
58
 
59
59
  ```bash
60
- $ npx mcs
61
-
62
- # 🎉 Mock Config Server is running at http://localhost:31299
60
+ $ npx mock-config-server
63
61
  ```
64
62
 
63
+ > If the package is already installed you can use short command `mcs`
64
+
65
65
  ## 🎭 Parameters for mock-server.config.(js|ts)
66
66
 
67
67
  - `rest?` Rest configs for mock requests
68
68
  - `baseUrl?` {string} part of the url that will be substituted at the beginning of rest request url (default: `'/'`)
69
69
  - `configs` {Array<RestRequestConfig>} configs for mock requests, [read](#configs)
70
+ - `interceptors?` {Interceptors} functions to change request or response parameters, [read](#interceptors)
70
71
  - `graphql?` GraphQL configs for mock requests
71
72
  - `baseUrl?` {string} part of the url that will be substituted at the beginning of graphql request url (default: `'/'`)
72
73
  - `configs` {Array<GraphQLRequestConfig>} configs for mock requests, [read](#configs)
74
+ - `interceptors?` {Interceptors} functions to change request or response parameters, [read](#interceptors)
73
75
  - `staticPath?` {StaticPath} entity for working with static files, [read](#static-path)
74
76
  - `interceptors?` {Interceptors} functions to change request or response parameters, [read](#interceptors)
75
77
  - `cors?` {Cors} CORS settings object (default: `CORS is turn off`), [read](#cors)
@@ -78,7 +80,7 @@ $ npx mcs
78
80
 
79
81
  ### Configs
80
82
 
81
- Configs are the fundamental part of the mock server. These configs are easy to fill and maintain. Config entities is an object with which you can emulate various application behaviors. You can specify `headers` | `query` | `params` | `body` for Rest request or `headers` | `query` | `variables` for GraphQL request to define what contract data you need to get. Using this mechanism, you can easily simulate the operation of the server and emulate various cases
83
+ Configs are the fundamental part of the mock server. These configs are easy to fill and maintain. Config entities is an object with which you can emulate various application behaviors. You can specify `headers` | `cookies` | `query` | `params` | `body` for Rest request or `headers` | `cookies` | `query` | `variables` for GraphQL request to define what contract data you need to get. Using this mechanism, you can easily simulate the operation of the server and emulate various cases
82
84
 
83
85
  ##### Rest request config
84
86
 
@@ -86,7 +88,7 @@ Configs are the fundamental part of the mock server. These configs are easy to f
86
88
  - `method` {GET | POST | DELETE | PUT | PATCH} rest api method
87
89
  - `routes` {RestRouteConfig[]} request routes
88
90
  - `data` {any} mock data of request
89
- - `entities?` Object<headers | query | params | body> object that helps in data retrieval
91
+ - `entities?` Object<headers | cookies | query | params | body> object that helps in data retrieval
90
92
  - `interceptors?` {Interceptors} functions to change request or response parameters, [read](#interceptors)
91
93
  - `interceptors?` {Interceptors} functions to change request or response parameters, [read](#interceptors)
92
94
 
@@ -96,7 +98,7 @@ Configs are the fundamental part of the mock server. These configs are easy to f
96
98
  - `operationName` {string} graphql operation name
97
99
  - `routes` {GraphQLRouteConfig[]} request routes
98
100
  - `data` {any} mock data of request
99
- - `entities?` Object<headers | query | variables> object that helps in data retrieval
101
+ - `entities?` Object<headers | cookies | query | variables> object that helps in data retrieval
100
102
  - `interceptors?` {Interceptors} functions to change request or response parameters, [read](#interceptors)
101
103
  - `interceptors?` {Interceptors} functions to change request or response parameters, [read](#interceptors)
102
104
 
@@ -230,6 +232,13 @@ Functions to change request or response parameters
230
232
 
231
233
  - `params`
232
234
  - `request` request object
235
+ - `setDelay` (delay) => Promise<void>
236
+ - `delay` {number} milliseconds of delay time
237
+ - `getHeader` (field) => string | number | string[] | undefined
238
+ - `field` {string} name of response header
239
+ - `getHeaders` () => Record<string | number | string[] | undefined>
240
+ - `getCookie` (name) => string | undefined
241
+ - `name` {string} name of cookie
233
242
 
234
243
  ##### Response
235
244
 
@@ -238,19 +247,24 @@ Functions to change request or response parameters
238
247
  - `request` request object
239
248
  - `response` response object
240
249
  - `setDelay` (delay) => Promise<void>
241
- - `delay` {number} seconds of delay time
250
+ - `delay` {number} milliseconds of delay time
242
251
  - `setStatusCode` (statusCode) => void
243
252
  - `statusCode` {number} status code for response
244
- - `setHeader` (name, value) => void
245
- - `name` {string} name of response header
253
+ - `setHeader` (field, value) => void
254
+ - `field` {string} name of response header
246
255
  - `value` {string | string[] | undefined} value of response header
247
- - `appendHeader` (name, value) => void
248
- - `name` {string} name of response header
256
+ - `appendHeader` (field, value) => void
257
+ - `field` {string} name of response header
249
258
  - `value` {string | string[] | undefined} value of response header
259
+ - `getHeader` (field) => string | number | string[] | undefined
260
+ - `field` {string} name of response header
261
+ - `getHeaders` () => Record<string | number | string[] | undefined>
250
262
  - `setCookie` (name, value, options) => void
251
263
  - `name` {string} name of cookie
252
264
  - `value` {string} value of cookie
253
265
  - `options` {[CookieOptions](https://expressjs.com/en/resources/middleware/cookie-session.html) | undefined} cookie options (like path, expires, etc.)
266
+ - `getCookie` (name) => string | undefined
267
+ - `name` {string} name of cookie
254
268
  - `clearCookie` (name, options) => void
255
269
  - `name` {string} name of cookie
256
270
  - `options` {[CookieOptions](https://expressjs.com/en/resources/middleware/cookie-session.html) | undefined} cookie options (like path, expires, etc.)
@@ -258,19 +272,22 @@ Functions to change request or response parameters
258
272
  - `filename` {string} name of file in 'Content-Disposition' header
259
273
 
260
274
  ## CLI usage
275
+
261
276
  ```
262
277
  mcs [options]
263
278
 
264
279
  Options:
265
- --baseUrl, -b Set base url
266
- --port, -p Set port
280
+ --baseUrl, -b Set base url (default: '/')
281
+ --port, -p Set port (default: 31299)
267
282
  --staticPath, -s Set static path
283
+ --config, -c Set path to config file (default: './mock-server.config.(?:ts|mts|cts|js|mjs|cjs)')
284
+ --watch, -w Enables server restart after config file changes (default: false)
268
285
 
269
286
  --version, -v Show version number
270
287
  --help, -h Show help
271
-
288
+
272
289
  Examples:
273
- mcs --baseurl /base/url --port 3000
290
+ mcs --baseurl /base/url --port 3000 --config ./path/to/config.ts -w
274
291
  mcs --help
275
292
  ```
276
293
 
@@ -0,0 +1,2 @@
1
+ import type { MockServerConfigArgv } from '../src/utils/types';
2
+ export declare const build: (argv: MockServerConfigArgv) => Promise<void>;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.build = void 0;
4
+ const esbuild_1 = require("esbuild");
5
+ const helpers_1 = require("./helpers");
6
+ const run_1 = require("./run");
7
+ const build = async (argv) => {
8
+ const configFilePath = (0, helpers_1.resolveConfigFilePath)(argv.config);
9
+ if (!configFilePath) {
10
+ throw new Error('Cannot find config file mock-server.config.(ts|mts|cts|js|mjs|cjs)');
11
+ }
12
+ const buildOptions = {
13
+ entryPoints: [configFilePath],
14
+ bundle: true,
15
+ platform: 'node',
16
+ target: 'esnext',
17
+ minifySyntax: true,
18
+ minify: true,
19
+ write: false,
20
+ metafile: false,
21
+ logLevel: 'info',
22
+ plugins: []
23
+ };
24
+ if (argv.watch) {
25
+ const watchPlugin = {
26
+ name: 'watch',
27
+ setup: (build) => {
28
+ let instance;
29
+ build.onStart(() => {
30
+ instance?.destroy();
31
+ });
32
+ build.onEnd((result) => {
33
+ if (!result.errors.length) {
34
+ const mockConfig = (0, helpers_1.resolveConfigFile)(result.outputFiles[0].text);
35
+ instance = (0, run_1.run)(mockConfig, argv);
36
+ }
37
+ });
38
+ }
39
+ };
40
+ buildOptions.plugins.push(watchPlugin);
41
+ const ctx = await (0, esbuild_1.context)(buildOptions);
42
+ ctx.watch();
43
+ return;
44
+ }
45
+ const { outputFiles } = await (0, esbuild_1.build)(buildOptions);
46
+ const mockConfig = (0, helpers_1.resolveConfigFile)(outputFiles[0].text);
47
+ (0, run_1.run)(mockConfig, argv);
48
+ };
49
+ exports.build = build;
package/dist/bin/cli.js CHANGED
@@ -6,9 +6,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.cli = void 0;
7
7
  const yargs_1 = __importDefault(require("yargs"));
8
8
  const helpers_1 = require("yargs/helpers");
9
- const start_1 = require("./start");
9
+ const build_1 = require("./build");
10
10
  const cli = () => {
11
11
  const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
12
+ .usage('mcs [options]')
13
+ .epilogue('More info: https://github.com/siberiacancode/mock-config-server#readme')
12
14
  .options({
13
15
  baseUrl: {
14
16
  alias: 'b',
@@ -24,6 +26,16 @@ const cli = () => {
24
26
  alias: 's',
25
27
  description: 'Set static path for mock server',
26
28
  type: 'string'
29
+ },
30
+ config: {
31
+ alias: 'c',
32
+ description: 'Set path to config file',
33
+ type: 'string'
34
+ },
35
+ watch: {
36
+ alias: 'w',
37
+ description: 'Enables server restart after config file changes',
38
+ type: 'boolean'
27
39
  }
28
40
  })
29
41
  .version()
@@ -31,6 +43,6 @@ const cli = () => {
31
43
  .help()
32
44
  .alias('help', 'h')
33
45
  .parse();
34
- (0, start_1.start)(argv);
46
+ (0, build_1.build)(argv);
35
47
  };
36
48
  exports.cli = cli;
@@ -0,0 +1,3 @@
1
+ export * from './resolveConfigFile';
2
+ export * from './resolveConfigFilePath';
3
+ export * from './resolveExportsFromSourceCode';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./resolveConfigFile"), exports);
18
+ __exportStar(require("./resolveConfigFilePath"), exports);
19
+ __exportStar(require("./resolveExportsFromSourceCode"), exports);
@@ -0,0 +1,2 @@
1
+ import type { MockServerConfig } from '../../src/utils/types';
2
+ export declare const resolveConfigFile: (configSourceCode: string) => MockServerConfig;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveConfigFile = void 0;
4
+ const helpers_1 = require("../../src/utils/helpers");
5
+ const resolveExportsFromSourceCode_1 = require("./resolveExportsFromSourceCode");
6
+ const resolveConfigFile = (configSourceCode) => {
7
+ if (!configSourceCode) {
8
+ throw new Error('Cannot handle source code of mock-server.config.(ts|js)');
9
+ }
10
+ const mockServerConfigExports = (0, resolveExportsFromSourceCode_1.resolveExportsFromSourceCode)(configSourceCode);
11
+ const mockServerConfig = mockServerConfigExports.default;
12
+ if (!mockServerConfig) {
13
+ throw new Error('Cannot handle exports of mock-server.config.(ts|js)');
14
+ }
15
+ if (!(0, helpers_1.isPlainObject)(mockServerConfig)) {
16
+ throw new Error('configuration should be plain object; see our doc (https://www.npmjs.com/package/mock-config-server) for more information');
17
+ }
18
+ return mockServerConfig;
19
+ };
20
+ exports.resolveConfigFile = resolveConfigFile;
@@ -0,0 +1 @@
1
+ export declare const resolveConfigFilePath: (cliConfigFilePath?: string) => string | undefined;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.resolveConfigFilePath = void 0;
30
+ const fs = __importStar(require("fs"));
31
+ const path_1 = __importDefault(require("path"));
32
+ const resolveConfigFilePath = (cliConfigFilePath) => {
33
+ const appPath = process.cwd();
34
+ if (cliConfigFilePath)
35
+ return path_1.default.resolve(appPath, cliConfigFilePath);
36
+ const configFileNameRegex = /mock-server.config.(?:ts|mts|cts|js|mjs|cjs)/;
37
+ return fs.readdirSync(appPath).find((fileName) => configFileNameRegex.test(fileName));
38
+ };
39
+ exports.resolveConfigFilePath = resolveConfigFilePath;
@@ -0,0 +1 @@
1
+ export declare const resolveConfigFilePath: (cliConfigFilePath?: string) => string | undefined;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.resolveConfigFilePath = void 0;
30
+ const fs = __importStar(require("fs"));
31
+ const path_1 = __importDefault(require("path"));
32
+ const resolveConfigFilePath = (cliConfigFilePath) => {
33
+ const appPath = process.cwd();
34
+ if (cliConfigFilePath)
35
+ return path_1.default.resolve(appPath, cliConfigFilePath);
36
+ const configFileNameRegex = /mock-server.config.(?:ts|mts|cts|js|mjs|cjs)/;
37
+ return fs.readdirSync(appPath).find((fileName) => configFileNameRegex.test(fileName));
38
+ };
39
+ exports.resolveConfigFilePath = resolveConfigFilePath;
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /// <reference types="node" />
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> & {
5
+ destroy: (callback?: ((err?: Error | undefined) => void) | undefined) => import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
6
+ }) | undefined;
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.run = void 0;
5
+ const server_1 = require("../src/server");
6
+ const validateMockServerConfig_1 = require("./validateMockServerConfig/validateMockServerConfig");
7
+ const run = (mockConfig, argv) => {
8
+ try {
9
+ const mergedMockServerConfig = { ...mockConfig, ...argv };
10
+ (0, validateMockServerConfig_1.validateMockServerConfig)(mergedMockServerConfig);
11
+ return (0, server_1.startMockServer)(mergedMockServerConfig);
12
+ }
13
+ catch (error) {
14
+ console.error(error.message);
15
+ }
16
+ };
17
+ exports.run = run;
@@ -4,15 +4,15 @@ exports.validateRoutes = void 0;
4
4
  const helpers_1 = require("../../../../src/utils/helpers");
5
5
  const validateInterceptors_1 = require("../../validateInterceptors/validateInterceptors");
6
6
  const ALLOWED_ENTITIES_BY_OPERATION_TYPE = {
7
- query: ['headers', 'query', 'variables'],
8
- mutation: ['headers', 'query', 'variables']
7
+ query: ['headers', 'cookies', 'query', 'variables'],
8
+ mutation: ['headers', 'cookies', 'query', 'variables']
9
9
  };
10
- const validateHeadersOrQuery = (headersOrQuery, entity) => {
11
- const isHeadersOrQueryObject = (0, helpers_1.isPlainObject)(headersOrQuery);
12
- if (isHeadersOrQueryObject) {
13
- Object.entries(headersOrQuery).forEach(([headerOrQueryKey, headerOrQueryValue]) => {
14
- if (typeof headerOrQueryValue !== 'string') {
15
- throw new Error(`${entity}.${headerOrQueryKey}`);
10
+ const validateHeadersOrCookiesOrQuery = (headersOrCookiesOrQuery, entity) => {
11
+ const isHeadersOrCookiesOrQueryObject = (0, helpers_1.isPlainObject)(headersOrCookiesOrQuery);
12
+ if (isHeadersOrCookiesOrQueryObject) {
13
+ Object.entries(headersOrCookiesOrQuery).forEach(([headerOrCookieOrQueryKey, headerOrCookieOrQueryValue]) => {
14
+ if (typeof headerOrCookieOrQueryValue !== 'string') {
15
+ throw new Error(`${entity}.${headerOrCookieOrQueryKey}`);
16
16
  }
17
17
  });
18
18
  return;
@@ -27,10 +27,10 @@ const validateEntities = (entities, operationType) => {
27
27
  if (!isEntityAllowed) {
28
28
  throw new Error(`entities.${entity}`);
29
29
  }
30
- if (entity === 'headers' || entity === 'query') {
30
+ if (entity === 'headers' || entity === 'query' || entity === 'cookies') {
31
31
  try {
32
- const headersOrQuery = entities[entity];
33
- validateHeadersOrQuery(headersOrQuery, entity);
32
+ const headersOrCookiesOrQuery = entities[entity];
33
+ validateHeadersOrCookiesOrQuery(headersOrCookiesOrQuery, entity);
34
34
  }
35
35
  catch (error) {
36
36
  throw new Error(`entities.${error.message}`);
@@ -4,19 +4,19 @@ exports.validateRoutes = void 0;
4
4
  const helpers_1 = require("../../../../src/utils/helpers");
5
5
  const validateInterceptors_1 = require("../../validateInterceptors/validateInterceptors");
6
6
  const ALLOWED_ENTITIES_BY_METHOD = {
7
- get: ['headers', 'query', 'params'],
8
- delete: ['headers', 'query', 'params'],
9
- post: ['headers', 'query', 'params', 'body'],
10
- put: ['headers', 'query', 'params', 'body'],
11
- patch: ['headers', 'query', 'params', 'body'],
12
- options: ['headers', 'query', 'params']
7
+ get: ['headers', 'cookies', 'query', 'params'],
8
+ delete: ['headers', 'cookies', 'query', 'params'],
9
+ post: ['headers', 'cookies', 'query', 'params', 'body'],
10
+ put: ['headers', 'cookies', 'query', 'params', 'body'],
11
+ patch: ['headers', 'cookies', 'query', 'params', 'body'],
12
+ options: ['headers', 'cookies', 'query', 'params']
13
13
  };
14
- const validateHeadersOrParams = (headersOrParams, entity) => {
15
- const isHeadersOrParamsObject = (0, helpers_1.isPlainObject)(headersOrParams);
16
- if (isHeadersOrParamsObject) {
17
- Object.entries(headersOrParams).forEach(([headerOrParamKey, headerOrParamValue]) => {
18
- if (typeof headerOrParamValue !== 'string') {
19
- throw new Error(`${entity}.${headerOrParamKey}`);
14
+ const validateHeadersOrCookiesOrParams = (headersOrCookiesOrParams, entity) => {
15
+ const isHeadersOrCookiesOrParamsObject = (0, helpers_1.isPlainObject)(headersOrCookiesOrParams);
16
+ if (isHeadersOrCookiesOrParamsObject) {
17
+ Object.entries(headersOrCookiesOrParams).forEach(([headerOrCookieOrParamKey, headerOrCookieOrParamValue]) => {
18
+ if (typeof headerOrCookieOrParamValue !== 'string') {
19
+ throw new Error(`${entity}.${headerOrCookieOrParamKey}`);
20
20
  }
21
21
  });
22
22
  return;
@@ -52,10 +52,10 @@ const validateEntities = (entities, method) => {
52
52
  if (!isEntityAllowed) {
53
53
  throw new Error(`entities.${entity}`);
54
54
  }
55
- if (entity === 'headers' || entity === 'params') {
55
+ if (entity === 'headers' || entity === 'params' || entity === 'cookies') {
56
56
  try {
57
- const headersOrParams = entities[entity];
58
- validateHeadersOrParams(headersOrParams, entity);
57
+ const headersOrCookiesOrParams = entities[entity];
58
+ validateHeadersOrCookiesOrParams(headersOrCookiesOrParams, entity);
59
59
  }
60
60
  catch (error) {
61
61
  throw new Error(`entities.${error.message}`);
@@ -1,3 +1,3 @@
1
1
  import type { IRouter } from 'express';
2
- import type { GraphQLRequestConfig, Interceptors } from '../../../utils/types';
3
- export declare const createGraphQLRoutes: (router: IRouter, configs: GraphQLRequestConfig[], interceptors?: Interceptors) => IRouter;
2
+ import type { GraphqlConfig, Interceptors } from '../../../utils/types';
3
+ export declare const createGraphQLRoutes: (router: IRouter, graphqlConfig: GraphqlConfig, serverResponseInterceptors?: Interceptors['response']) => IRouter;
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createGraphQLRoutes = void 0;
4
4
  const helpers_1 = require("../../../utils/helpers");
5
5
  const helpers_2 = require("./helpers");
6
- const createGraphQLRoutes = (router, configs, interceptors) => {
7
- const preparedGraphQLRequestConfig = (0, helpers_2.prepareGraphQLRequestConfigs)(configs);
6
+ const createGraphQLRoutes = (router, graphqlConfig, serverResponseInterceptors) => {
7
+ const preparedGraphQLRequestConfig = (0, helpers_2.prepareGraphQLRequestConfigs)(graphqlConfig.configs);
8
8
  const graphqlMiddleware = async (request, response, next) => {
9
9
  const graphQLInput = (0, helpers_1.getGraphQLInput)(request);
10
10
  if (!graphQLInput || !graphQLInput.query) {
@@ -30,13 +30,10 @@ const createGraphQLRoutes = (router, configs, interceptors) => {
30
30
  if (!matchedRequestConfig) {
31
31
  return next();
32
32
  }
33
- (0, helpers_1.callRequestInterceptors)({
34
- request,
35
- interceptors: {
36
- requestInterceptor: matchedRequestConfig.interceptors?.request,
37
- serverInterceptor: interceptors?.request
38
- }
39
- });
33
+ const requestInterceptor = matchedRequestConfig.interceptors?.request;
34
+ if (requestInterceptor) {
35
+ await (0, helpers_1.callRequestInterceptor)({ request, interceptor: requestInterceptor });
36
+ }
40
37
  const matchedRouteConfig = matchedRequestConfig.routes.find(({ entities }) => {
41
38
  if (!entities)
42
39
  return true;
@@ -53,14 +50,15 @@ const createGraphQLRoutes = (router, configs, interceptors) => {
53
50
  const matchedRouteConfigData = typeof matchedRouteConfig.data === 'function'
54
51
  ? await matchedRouteConfig.data(request, matchedRouteConfig.entities ?? {})
55
52
  : matchedRouteConfig.data;
56
- const data = (0, helpers_1.callResponseInterceptors)({
53
+ const data = await (0, helpers_1.callResponseInterceptors)({
57
54
  data: matchedRouteConfigData,
58
55
  request,
59
56
  response,
60
57
  interceptors: {
61
58
  routeInterceptor: matchedRouteConfig.interceptors?.response,
62
59
  requestInterceptor: matchedRequestConfig.interceptors?.response,
63
- serverInterceptor: interceptors?.response
60
+ apiInterceptor: graphqlConfig.interceptors?.response,
61
+ serverInterceptor: serverResponseInterceptors
64
62
  }
65
63
  });
66
64
  // ✅ important:
@@ -7,9 +7,11 @@ const calculateRouteConfigWeight = (graphQLRouteConfig) => {
7
7
  if (!entities)
8
8
  return 0;
9
9
  let routeConfigWeight = 0;
10
- const { headers, query, variables } = entities;
10
+ const { headers, cookies, query, variables } = entities;
11
11
  if (headers)
12
12
  routeConfigWeight += Object.keys(headers).length;
13
+ if (cookies)
14
+ routeConfigWeight += Object.keys(cookies).length;
13
15
  if (query)
14
16
  routeConfigWeight += Object.keys(query).length;
15
17
  if (variables)
@@ -0,0 +1,2 @@
1
+ import type { Express } from 'express';
2
+ export declare const cookieParseMiddleware: (server: Express) => void;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cookieParseMiddleware = void 0;
4
+ const helpers_1 = require("./helpers");
5
+ const cookieParseMiddleware = (server) => {
6
+ server.use((request, _response, next) => {
7
+ if (request.headers.cookie) {
8
+ request.cookies = (0, helpers_1.parseCookie)(request.headers.cookie);
9
+ }
10
+ else {
11
+ request.cookies = {};
12
+ }
13
+ return next();
14
+ });
15
+ };
16
+ exports.cookieParseMiddleware = cookieParseMiddleware;
@@ -0,0 +1 @@
1
+ export * from './parseCookie/parseCookie';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./parseCookie/parseCookie"), exports);
@@ -0,0 +1,3 @@
1
+ type Cookies = Record<string, string>;
2
+ export declare const parseCookie: (cookieHeader: string) => Cookies;
3
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseCookie = void 0;
4
+ const parseCookie = (cookieHeader) => {
5
+ if (!cookieHeader)
6
+ return {};
7
+ const cookies = {};
8
+ const cookiePairs = cookieHeader.split(';');
9
+ cookiePairs.forEach((cookie) => {
10
+ const [name, value] = cookie.trim().split('=');
11
+ if (!name)
12
+ return;
13
+ cookies[name.trim()] = value?.trim() ?? '';
14
+ });
15
+ return cookies;
16
+ };
17
+ exports.parseCookie = parseCookie;