@zze/mock-server 0.2.4

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 (177) hide show
  1. package/README.md +643 -0
  2. package/dist/__tests__/mock-server.test.d.ts +5 -0
  3. package/dist/__tests__/mock-server.test.d.ts.map +1 -0
  4. package/dist/__tests__/mock-server.test.js +599 -0
  5. package/dist/__tests__/mock-server.test.js.map +1 -0
  6. package/dist/admin/__tests__/admin-router.test.d.ts +2 -0
  7. package/dist/admin/__tests__/admin-router.test.d.ts.map +1 -0
  8. package/dist/admin/__tests__/admin-router.test.js +621 -0
  9. package/dist/admin/__tests__/admin-router.test.js.map +1 -0
  10. package/dist/admin/admin-router.d.ts +27 -0
  11. package/dist/admin/admin-router.d.ts.map +1 -0
  12. package/dist/admin/admin-router.js +616 -0
  13. package/dist/admin/admin-router.js.map +1 -0
  14. package/dist/admin/index.d.ts +4 -0
  15. package/dist/admin/index.d.ts.map +1 -0
  16. package/dist/admin/index.js +10 -0
  17. package/dist/admin/index.js.map +1 -0
  18. package/dist/admin/types.d.ts +185 -0
  19. package/dist/admin/types.d.ts.map +1 -0
  20. package/dist/admin/types.js +33 -0
  21. package/dist/admin/types.js.map +1 -0
  22. package/dist/config/__tests__/config-discovery.test.d.ts +2 -0
  23. package/dist/config/__tests__/config-discovery.test.d.ts.map +1 -0
  24. package/dist/config/__tests__/config-discovery.test.js +52 -0
  25. package/dist/config/__tests__/config-discovery.test.js.map +1 -0
  26. package/dist/config/__tests__/config-loader.test.d.ts +2 -0
  27. package/dist/config/__tests__/config-loader.test.d.ts.map +1 -0
  28. package/dist/config/__tests__/config-loader.test.js +124 -0
  29. package/dist/config/__tests__/config-loader.test.js.map +1 -0
  30. package/dist/config/__tests__/file-loader.test.d.ts +2 -0
  31. package/dist/config/__tests__/file-loader.test.d.ts.map +1 -0
  32. package/dist/config/__tests__/file-loader.test.js +63 -0
  33. package/dist/config/__tests__/file-loader.test.js.map +1 -0
  34. package/dist/config/__tests__/fixtures/mock-config/endpoints/products.d.ts +25 -0
  35. package/dist/config/__tests__/fixtures/mock-config/endpoints/products.d.ts.map +1 -0
  36. package/dist/config/__tests__/fixtures/mock-config/endpoints/products.js +25 -0
  37. package/dist/config/__tests__/fixtures/mock-config/endpoints/products.js.map +1 -0
  38. package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.d.ts +11 -0
  39. package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.d.ts.map +1 -0
  40. package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.js +11 -0
  41. package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.js.map +1 -0
  42. package/dist/config/config-discovery.d.ts +23 -0
  43. package/dist/config/config-discovery.d.ts.map +1 -0
  44. package/dist/config/config-discovery.js +60 -0
  45. package/dist/config/config-discovery.js.map +1 -0
  46. package/dist/config/config-loader.d.ts +56 -0
  47. package/dist/config/config-loader.d.ts.map +1 -0
  48. package/dist/config/config-loader.js +162 -0
  49. package/dist/config/config-loader.js.map +1 -0
  50. package/dist/config/config-writer.d.ts +96 -0
  51. package/dist/config/config-writer.d.ts.map +1 -0
  52. package/dist/config/config-writer.js +248 -0
  53. package/dist/config/config-writer.js.map +1 -0
  54. package/dist/config/file-loader.d.ts +16 -0
  55. package/dist/config/file-loader.d.ts.map +1 -0
  56. package/dist/config/file-loader.js +90 -0
  57. package/dist/config/file-loader.js.map +1 -0
  58. package/dist/config/index.d.ts +7 -0
  59. package/dist/config/index.d.ts.map +1 -0
  60. package/dist/config/index.js +23 -0
  61. package/dist/config/index.js.map +1 -0
  62. package/dist/config/types.d.ts +47 -0
  63. package/dist/config/types.d.ts.map +1 -0
  64. package/dist/config/types.js +7 -0
  65. package/dist/config/types.js.map +1 -0
  66. package/dist/index.d.ts +28 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +31 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/mock-server.d.ts +243 -0
  71. package/dist/mock-server.d.ts.map +1 -0
  72. package/dist/mock-server.js +387 -0
  73. package/dist/mock-server.js.map +1 -0
  74. package/dist/resolver/__tests__/response-resolver.test.d.ts +2 -0
  75. package/dist/resolver/__tests__/response-resolver.test.d.ts.map +1 -0
  76. package/dist/resolver/__tests__/response-resolver.test.js +358 -0
  77. package/dist/resolver/__tests__/response-resolver.test.js.map +1 -0
  78. package/dist/resolver/index.d.ts +4 -0
  79. package/dist/resolver/index.d.ts.map +1 -0
  80. package/dist/resolver/index.js +9 -0
  81. package/dist/resolver/index.js.map +1 -0
  82. package/dist/resolver/response-resolver.d.ts +73 -0
  83. package/dist/resolver/response-resolver.d.ts.map +1 -0
  84. package/dist/resolver/response-resolver.js +167 -0
  85. package/dist/resolver/response-resolver.js.map +1 -0
  86. package/dist/resolver/types.d.ts +47 -0
  87. package/dist/resolver/types.d.ts.map +1 -0
  88. package/dist/resolver/types.js +9 -0
  89. package/dist/resolver/types.js.map +1 -0
  90. package/dist/schemas/__tests__/config.validator.test.d.ts +2 -0
  91. package/dist/schemas/__tests__/config.validator.test.d.ts.map +1 -0
  92. package/dist/schemas/__tests__/config.validator.test.js +66 -0
  93. package/dist/schemas/__tests__/config.validator.test.js.map +1 -0
  94. package/dist/schemas/__tests__/endpoint.schema.test.d.ts +2 -0
  95. package/dist/schemas/__tests__/endpoint.schema.test.d.ts.map +1 -0
  96. package/dist/schemas/__tests__/endpoint.schema.test.js +103 -0
  97. package/dist/schemas/__tests__/endpoint.schema.test.js.map +1 -0
  98. package/dist/schemas/__tests__/flow.schema.test.d.ts +2 -0
  99. package/dist/schemas/__tests__/flow.schema.test.d.ts.map +1 -0
  100. package/dist/schemas/__tests__/flow.schema.test.js +92 -0
  101. package/dist/schemas/__tests__/flow.schema.test.js.map +1 -0
  102. package/dist/schemas/config.validator.d.ts +39 -0
  103. package/dist/schemas/config.validator.d.ts.map +1 -0
  104. package/dist/schemas/config.validator.js +117 -0
  105. package/dist/schemas/config.validator.js.map +1 -0
  106. package/dist/schemas/endpoint.schema.d.ts +108 -0
  107. package/dist/schemas/endpoint.schema.d.ts.map +1 -0
  108. package/dist/schemas/endpoint.schema.js +87 -0
  109. package/dist/schemas/endpoint.schema.js.map +1 -0
  110. package/dist/schemas/flow.schema.d.ts +46 -0
  111. package/dist/schemas/flow.schema.d.ts.map +1 -0
  112. package/dist/schemas/flow.schema.js +73 -0
  113. package/dist/schemas/flow.schema.js.map +1 -0
  114. package/dist/schemas/http.schema.d.ts +15 -0
  115. package/dist/schemas/http.schema.d.ts.map +1 -0
  116. package/dist/schemas/http.schema.js +32 -0
  117. package/dist/schemas/http.schema.js.map +1 -0
  118. package/dist/schemas/index.d.ts +6 -0
  119. package/dist/schemas/index.d.ts.map +1 -0
  120. package/dist/schemas/index.js +33 -0
  121. package/dist/schemas/index.js.map +1 -0
  122. package/dist/schemas/scenario.schema.d.ts +54 -0
  123. package/dist/schemas/scenario.schema.d.ts.map +1 -0
  124. package/dist/schemas/scenario.schema.js +75 -0
  125. package/dist/schemas/scenario.schema.js.map +1 -0
  126. package/dist/server/__tests__/mock-server-app.test.d.ts +2 -0
  127. package/dist/server/__tests__/mock-server-app.test.d.ts.map +1 -0
  128. package/dist/server/__tests__/mock-server-app.test.js +296 -0
  129. package/dist/server/__tests__/mock-server-app.test.js.map +1 -0
  130. package/dist/server/index.d.ts +4 -0
  131. package/dist/server/index.d.ts.map +1 -0
  132. package/dist/server/index.js +10 -0
  133. package/dist/server/index.js.map +1 -0
  134. package/dist/server/mock-server-app.d.ts +119 -0
  135. package/dist/server/mock-server-app.d.ts.map +1 -0
  136. package/dist/server/mock-server-app.js +304 -0
  137. package/dist/server/mock-server-app.js.map +1 -0
  138. package/dist/server/types.d.ts +38 -0
  139. package/dist/server/types.d.ts.map +1 -0
  140. package/dist/server/types.js +11 -0
  141. package/dist/server/types.js.map +1 -0
  142. package/dist/state/__tests__/state-manager.test.d.ts +2 -0
  143. package/dist/state/__tests__/state-manager.test.d.ts.map +1 -0
  144. package/dist/state/__tests__/state-manager.test.js +275 -0
  145. package/dist/state/__tests__/state-manager.test.js.map +1 -0
  146. package/dist/state/index.d.ts +3 -0
  147. package/dist/state/index.d.ts.map +1 -0
  148. package/dist/state/index.js +7 -0
  149. package/dist/state/index.js.map +1 -0
  150. package/dist/state/state-manager.d.ts +92 -0
  151. package/dist/state/state-manager.d.ts.map +1 -0
  152. package/dist/state/state-manager.js +198 -0
  153. package/dist/state/state-manager.js.map +1 -0
  154. package/dist/state/types.d.ts +30 -0
  155. package/dist/state/types.d.ts.map +1 -0
  156. package/dist/state/types.js +2 -0
  157. package/dist/state/types.js.map +1 -0
  158. package/dist/ui/assets/index-SADMOgPE.js +10 -0
  159. package/dist/ui/assets/index-rj7m-XdG.css +1 -0
  160. package/dist/ui/index.html +29 -0
  161. package/dist/watcher/__tests__/config-watcher.test.d.ts +2 -0
  162. package/dist/watcher/__tests__/config-watcher.test.d.ts.map +1 -0
  163. package/dist/watcher/__tests__/config-watcher.test.js +372 -0
  164. package/dist/watcher/__tests__/config-watcher.test.js.map +1 -0
  165. package/dist/watcher/config-watcher.d.ts +100 -0
  166. package/dist/watcher/config-watcher.d.ts.map +1 -0
  167. package/dist/watcher/config-watcher.js +358 -0
  168. package/dist/watcher/config-watcher.js.map +1 -0
  169. package/dist/watcher/index.d.ts +7 -0
  170. package/dist/watcher/index.d.ts.map +1 -0
  171. package/dist/watcher/index.js +8 -0
  172. package/dist/watcher/index.js.map +1 -0
  173. package/dist/watcher/types.d.ts +64 -0
  174. package/dist/watcher/types.d.ts.map +1 -0
  175. package/dist/watcher/types.js +15 -0
  176. package/dist/watcher/types.js.map +1 -0
  177. package/package.json +58 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-loader.d.ts","sourceRoot":"","sources":["../../src/config/file-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AASrE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,kBAAkB,CAE3E;AAiCD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAgCpF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIvD"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSupportedExtension = isSupportedExtension;
4
+ exports.loadConfigFile = loadConfigFile;
5
+ exports.clearModuleCache = clearModuleCache;
6
+ const jiti_1 = require("jiti");
7
+ const promises_1 = require("fs/promises");
8
+ const path_1 = require("path");
9
+ const url_1 = require("url");
10
+ const types_js_1 = require("./types.js");
11
+ // Create jiti instance for loading TS/JS files
12
+ const jiti = (0, jiti_1.createJiti)((0, url_1.pathToFileURL)(__filename).href, {
13
+ interopDefault: true,
14
+ moduleCache: false, // Disable cache for hot reload support
15
+ });
16
+ /**
17
+ * Check if a file extension is supported
18
+ */
19
+ function isSupportedExtension(ext) {
20
+ return types_js_1.SUPPORTED_EXTENSIONS.includes(ext);
21
+ }
22
+ /**
23
+ * Load a JSON file
24
+ */
25
+ async function loadJsonFile(filePath) {
26
+ const content = await (0, promises_1.readFile)(filePath, 'utf-8');
27
+ return JSON.parse(content);
28
+ }
29
+ /**
30
+ * Load a JS/TS file using jiti
31
+ */
32
+ async function loadJsOrTsFile(filePath) {
33
+ // Clear module from cache to support hot reload
34
+ const fileUrl = (0, url_1.pathToFileURL)(filePath).href;
35
+ try {
36
+ const module = await jiti.import(fileUrl);
37
+ // Handle default exports
38
+ if (module && typeof module === 'object' && 'default' in module) {
39
+ return module.default;
40
+ }
41
+ return module;
42
+ }
43
+ catch (error) {
44
+ throw new Error(`Failed to load ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
45
+ }
46
+ }
47
+ /**
48
+ * Load a single configuration file
49
+ * Supports .json, .js, .ts, .mjs, .mts extensions
50
+ */
51
+ async function loadConfigFile(filePath) {
52
+ const ext = (0, path_1.extname)(filePath).toLowerCase();
53
+ if (!isSupportedExtension(ext)) {
54
+ return {
55
+ success: false,
56
+ filePath,
57
+ error: `Unsupported file extension: ${ext}. Supported: ${types_js_1.SUPPORTED_EXTENSIONS.join(', ')}`,
58
+ };
59
+ }
60
+ try {
61
+ let data;
62
+ if (ext === '.json') {
63
+ data = await loadJsonFile(filePath);
64
+ }
65
+ else {
66
+ data = await loadJsOrTsFile(filePath);
67
+ }
68
+ return {
69
+ success: true,
70
+ filePath,
71
+ data: data,
72
+ };
73
+ }
74
+ catch (error) {
75
+ return {
76
+ success: false,
77
+ filePath,
78
+ error: error instanceof Error ? error.message : String(error),
79
+ };
80
+ }
81
+ }
82
+ /**
83
+ * Clear the jiti module cache for a specific file
84
+ * Used during hot reload to ensure fresh imports
85
+ */
86
+ function clearModuleCache(filePath) {
87
+ const fileUrl = (0, url_1.pathToFileURL)(filePath).href;
88
+ // jiti handles cache internally, but we can force fresh import by using moduleCache: false
89
+ // Additional cache busting could be implemented here if needed
90
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-loader.js","sourceRoot":"","sources":["../../src/config/file-loader.ts"],"names":[],"mappings":";;AAgBA,oDAEC;AAqCD,wCAgCC;AAMD,4CAIC;AAjGD,+BAAkC;AAClC,0CAAuC;AACvC,+BAA+B;AAC/B,6BAAoC;AAEpC,yCAAkD;AAElD,+CAA+C;AAC/C,MAAM,IAAI,GAAG,IAAA,iBAAU,EAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;IACvC,cAAc,EAAE,IAAI;IACpB,WAAW,EAAE,KAAK,EAAE,uCAAuC;CAC5D,CAAC,CAAC;AAEH;;GAEG;AACH,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,OAAO,+BAAoB,CAAC,QAAQ,CAAC,GAAyB,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC1C,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,QAAgB;IAC5C,gDAAgD;IAChD,MAAM,OAAO,GAAG,IAAA,mBAAa,EAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE1C,yBAAyB;QACzB,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YAChE,OAAQ,MAA+B,CAAC,OAAO,CAAC;QAClD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,kBAAkB,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACxF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,cAAc,CAAI,QAAgB;IACtD,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAE5C,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ;YACR,KAAK,EAAE,+BAA+B,GAAG,gBAAgB,+BAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC3F,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,IAAI,IAAa,CAAC;QAElB,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,IAAI,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,IAAI,EAAE,IAAS;SAChB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ;YACR,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,OAAO,GAAG,IAAA,mBAAa,EAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;IAC7C,2FAA2F;IAC3F,+DAA+D;AACjE,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type { MockServerOptions, LoadedConfig, FileLoadResult, ConfigLoadResult, SupportedExtension, } from './types.js';
2
+ export { SUPPORTED_EXTENSIONS } from './types.js';
3
+ export { loadConfigFile, isSupportedExtension, clearModuleCache, } from './file-loader.js';
4
+ export { discoverConfigFiles, directoryExists, getConfigDirectories, type DiscoveryOptions, } from './config-discovery.js';
5
+ export { ConfigLoader, createConfigLoader } from './config-loader.js';
6
+ export { ConfigWriter, createConfigWriter, type ConfigWriterOptions, type WriteResult, } from './config-writer.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGtE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,WAAW,GACjB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createConfigWriter = exports.ConfigWriter = exports.createConfigLoader = exports.ConfigLoader = exports.getConfigDirectories = exports.directoryExists = exports.discoverConfigFiles = exports.clearModuleCache = exports.isSupportedExtension = exports.loadConfigFile = exports.SUPPORTED_EXTENSIONS = void 0;
4
+ var types_js_1 = require("./types.js");
5
+ Object.defineProperty(exports, "SUPPORTED_EXTENSIONS", { enumerable: true, get: function () { return types_js_1.SUPPORTED_EXTENSIONS; } });
6
+ // File loader
7
+ var file_loader_js_1 = require("./file-loader.js");
8
+ Object.defineProperty(exports, "loadConfigFile", { enumerable: true, get: function () { return file_loader_js_1.loadConfigFile; } });
9
+ Object.defineProperty(exports, "isSupportedExtension", { enumerable: true, get: function () { return file_loader_js_1.isSupportedExtension; } });
10
+ Object.defineProperty(exports, "clearModuleCache", { enumerable: true, get: function () { return file_loader_js_1.clearModuleCache; } });
11
+ // Config discovery
12
+ var config_discovery_js_1 = require("./config-discovery.js");
13
+ Object.defineProperty(exports, "discoverConfigFiles", { enumerable: true, get: function () { return config_discovery_js_1.discoverConfigFiles; } });
14
+ Object.defineProperty(exports, "directoryExists", { enumerable: true, get: function () { return config_discovery_js_1.directoryExists; } });
15
+ Object.defineProperty(exports, "getConfigDirectories", { enumerable: true, get: function () { return config_discovery_js_1.getConfigDirectories; } });
16
+ // Config loader
17
+ var config_loader_js_1 = require("./config-loader.js");
18
+ Object.defineProperty(exports, "ConfigLoader", { enumerable: true, get: function () { return config_loader_js_1.ConfigLoader; } });
19
+ Object.defineProperty(exports, "createConfigLoader", { enumerable: true, get: function () { return config_loader_js_1.createConfigLoader; } });
20
+ // Config writer
21
+ var config_writer_js_1 = require("./config-writer.js");
22
+ Object.defineProperty(exports, "ConfigWriter", { enumerable: true, get: function () { return config_writer_js_1.ConfigWriter; } });
23
+ Object.defineProperty(exports, "createConfigWriter", { enumerable: true, get: function () { return config_writer_js_1.createConfigWriter; } });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;AASA,uCAAkD;AAAzC,gHAAA,oBAAoB,OAAA;AAE7B,cAAc;AACd,mDAI0B;AAHxB,gHAAA,cAAc,OAAA;AACd,sHAAA,oBAAoB,OAAA;AACpB,kHAAA,gBAAgB,OAAA;AAGlB,mBAAmB;AACnB,6DAK+B;AAJ7B,0HAAA,mBAAmB,OAAA;AACnB,sHAAA,eAAe,OAAA;AACf,2HAAA,oBAAoB,OAAA;AAItB,gBAAgB;AAChB,uDAAsE;AAA7D,gHAAA,YAAY,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAEzC,gBAAgB;AAChB,uDAK4B;AAJ1B,gHAAA,YAAY,OAAA;AACZ,sHAAA,kBAAkB,OAAA"}
@@ -0,0 +1,47 @@
1
+ import type { EndpointConfig, FlowConfig } from '../schemas/index.js';
2
+ /**
3
+ * Options for initializing the MockServer
4
+ */
5
+ export interface MockServerOptions {
6
+ /** Base directory containing endpoints/ and flows/ folders */
7
+ configPath: string;
8
+ /** Port to run the server on (default: 3001) */
9
+ port?: number;
10
+ /** API prefix for mock endpoints (default: '/api') */
11
+ apiPrefix?: string;
12
+ /** Enable hot reload of config files (default: true in dev) */
13
+ hotReload?: boolean;
14
+ }
15
+ /**
16
+ * Loaded configuration from disk
17
+ */
18
+ export interface LoadedConfig {
19
+ endpoints: EndpointConfig[];
20
+ flows: FlowConfig[];
21
+ }
22
+ /**
23
+ * Result of loading a single config file
24
+ */
25
+ export interface FileLoadResult<T> {
26
+ success: boolean;
27
+ filePath: string;
28
+ data?: T;
29
+ error?: string;
30
+ }
31
+ /**
32
+ * Result of loading all configuration
33
+ */
34
+ export interface ConfigLoadResult {
35
+ success: boolean;
36
+ config?: LoadedConfig;
37
+ errors: Array<{
38
+ filePath: string;
39
+ error: string;
40
+ }>;
41
+ }
42
+ /**
43
+ * Supported file extensions for config files
44
+ */
45
+ export declare const SUPPORTED_EXTENSIONS: readonly [".json", ".js", ".ts", ".mjs", ".mts"];
46
+ export type SupportedExtension = (typeof SUPPORTED_EXTENSIONS)[number];
47
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,KAAK,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,kDAAmD,CAAC;AAErF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SUPPORTED_EXTENSIONS = void 0;
4
+ /**
5
+ * Supported file extensions for config files
6
+ */
7
+ exports.SUPPORTED_EXTENSIONS = ['.json', '.js', '.ts', '.mjs', '.mts'];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":";;;AA8CA;;GAEG;AACU,QAAA,oBAAoB,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @zze/mock-server - A reusable Node.js mock server for microfrontend development
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { MockServer } from '@zze/mock-server';
7
+ *
8
+ * const server = new MockServer({
9
+ * configPath: './mock-config',
10
+ * port: 3001,
11
+ * apiPrefix: '/api',
12
+ * hotReload: true
13
+ * });
14
+ *
15
+ * await server.start();
16
+ * console.log('Mock server running on port 3001');
17
+ *
18
+ * // Later...
19
+ * await server.stop();
20
+ * ```
21
+ */
22
+ export { MockServer, createMockServer, type MockServerOptions, type MockServerState, type OnReloadCallback, type OnErrorCallback, } from './mock-server.js';
23
+ export type { EndpointConfig, ScenarioConfig, FlowConfig, HttpMethod, ResponseBody, } from './schemas/index.js';
24
+ export type { ServerOptions, ServerState, RegisteredRoute } from './server/types.js';
25
+ export type { ReloadEvent, WatcherOptions, WatcherEvent } from './watcher/types.js';
26
+ export type { LoadedConfig, ConfigLoadResult } from './config/types.js';
27
+ export { ADMIN_UI_PATH } from './server/index.js';
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrF,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpF,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGxE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * @zze/mock-server - A reusable Node.js mock server for microfrontend development
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * import { MockServer } from '@zze/mock-server';
8
+ *
9
+ * const server = new MockServer({
10
+ * configPath: './mock-config',
11
+ * port: 3001,
12
+ * apiPrefix: '/api',
13
+ * hotReload: true
14
+ * });
15
+ *
16
+ * await server.start();
17
+ * console.log('Mock server running on port 3001');
18
+ *
19
+ * // Later...
20
+ * await server.stop();
21
+ * ```
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.ADMIN_UI_PATH = exports.createMockServer = exports.MockServer = void 0;
25
+ // Main public API
26
+ var mock_server_js_1 = require("./mock-server.js");
27
+ Object.defineProperty(exports, "MockServer", { enumerable: true, get: function () { return mock_server_js_1.MockServer; } });
28
+ Object.defineProperty(exports, "createMockServer", { enumerable: true, get: function () { return mock_server_js_1.createMockServer; } });
29
+ // Re-export the admin path constant for consumers who need it
30
+ var index_js_1 = require("./server/index.js");
31
+ Object.defineProperty(exports, "ADMIN_UI_PATH", { enumerable: true, get: function () { return index_js_1.ADMIN_UI_PATH; } });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAEH,kBAAkB;AAClB,mDAO0B;AANxB,4GAAA,UAAU,OAAA;AACV,kHAAA,gBAAgB,OAAA;AAqBlB,8DAA8D;AAC9D,8CAAkD;AAAzC,yGAAA,aAAa,OAAA"}
@@ -0,0 +1,243 @@
1
+ /**
2
+ * MockServer - Public API for the mock server package
3
+ *
4
+ * This is the main entry point for consumers of the package.
5
+ * It provides a simple interface to configure, start, and stop the mock server.
6
+ */
7
+ import type { WatcherOptions } from './watcher/types.js';
8
+ import type { ReloadEvent } from './watcher/types.js';
9
+ import type { EndpointConfig, FlowConfig } from './schemas/index.js';
10
+ import type { Server } from 'http';
11
+ import type { Express } from 'express';
12
+ /**
13
+ * Options for creating a MockServer instance
14
+ */
15
+ export interface MockServerOptions {
16
+ /**
17
+ * Path to the configuration directory containing endpoints/ and flows/ subdirectories.
18
+ * Can be absolute or relative to the current working directory.
19
+ */
20
+ configPath: string;
21
+ /**
22
+ * Port to run the server on.
23
+ * @default 3001
24
+ */
25
+ port?: number;
26
+ /**
27
+ * API prefix for mock endpoints.
28
+ * @default '/api'
29
+ */
30
+ apiPrefix?: string;
31
+ /**
32
+ * Enable hot reload of configuration files.
33
+ * When enabled, changes to config files will automatically update the server.
34
+ * @default true
35
+ */
36
+ hotReload?: boolean;
37
+ /**
38
+ * Options for the file watcher (only used when hotReload is true).
39
+ */
40
+ watcherOptions?: WatcherOptions;
41
+ }
42
+ /**
43
+ * Current state of the mock server
44
+ */
45
+ export interface MockServerState {
46
+ /** Whether the server is currently running */
47
+ running: boolean;
48
+ /** The port the server is listening on (null if not running) */
49
+ port: number | null;
50
+ /** Number of registered endpoints */
51
+ endpointCount: number;
52
+ /** Number of registered flows */
53
+ flowCount: number;
54
+ /** Whether hot reload is enabled and active */
55
+ hotReloadActive: boolean;
56
+ /** Currently active flow ID */
57
+ activeFlowId: string | null;
58
+ /** Map of endpoint IDs to their active scenario IDs */
59
+ activeScenarios: Record<string, string | null>;
60
+ }
61
+ /**
62
+ * Callback for reload events
63
+ */
64
+ export type OnReloadCallback = (event: ReloadEvent) => void | Promise<void>;
65
+ /**
66
+ * Callback for error events
67
+ */
68
+ export type OnErrorCallback = (error: Error) => void;
69
+ /**
70
+ * MockServer - Main class for creating and managing a mock server
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * import { MockServer } from '@zze/mock-server';
75
+ *
76
+ * const server = new MockServer({
77
+ * configPath: './mock-config',
78
+ * port: 3001,
79
+ * apiPrefix: '/api',
80
+ * hotReload: true
81
+ * });
82
+ *
83
+ * await server.start();
84
+ * console.log('Mock server running on port 3001');
85
+ *
86
+ * // Later...
87
+ * await server.stop();
88
+ * ```
89
+ */
90
+ export declare class MockServer {
91
+ private readonly options;
92
+ private configLoader;
93
+ private configWriter;
94
+ private serverApp;
95
+ private watcher;
96
+ private reloadCallbacks;
97
+ private errorCallbacks;
98
+ private loadedEndpoints;
99
+ private loadedFlows;
100
+ /**
101
+ * Create a new MockServer instance
102
+ *
103
+ * @param options - Configuration options for the server
104
+ */
105
+ constructor(options: MockServerOptions);
106
+ /**
107
+ * Start the mock server
108
+ *
109
+ * This method:
110
+ * 1. Loads configuration from the config directory
111
+ * 2. Creates and starts the Express server
112
+ * 3. Optionally starts the file watcher for hot reload
113
+ *
114
+ * @returns Promise that resolves when the server is ready
115
+ * @throws Error if configuration loading fails or server fails to start
116
+ */
117
+ start(): Promise<void>;
118
+ /**
119
+ * Stop the mock server
120
+ *
121
+ * This method:
122
+ * 1. Stops the file watcher (if running)
123
+ * 2. Stops the Express server
124
+ *
125
+ * @returns Promise that resolves when the server has stopped
126
+ */
127
+ stop(): Promise<void>;
128
+ /**
129
+ * Restart the mock server
130
+ *
131
+ * This is a convenience method that stops and starts the server.
132
+ *
133
+ * @returns Promise that resolves when the server has restarted
134
+ */
135
+ restart(): Promise<void>;
136
+ /**
137
+ * Manually trigger a configuration reload
138
+ *
139
+ * This reloads all configuration files and updates the server routes.
140
+ * Useful when hot reload is disabled but you want to reload manually.
141
+ *
142
+ * @returns Promise that resolves when the reload is complete
143
+ */
144
+ reload(): Promise<void>;
145
+ /**
146
+ * Get the current state of the mock server
147
+ *
148
+ * @returns Current server state
149
+ */
150
+ getState(): MockServerState;
151
+ /**
152
+ * Get the configuration path
153
+ *
154
+ * @returns The configuration directory path
155
+ */
156
+ getConfigPath(): string;
157
+ /**
158
+ * Get the server options
159
+ *
160
+ * @returns The effective server options (with defaults applied)
161
+ */
162
+ getOptions(): MockServerOptions;
163
+ /**
164
+ * Get the underlying Express app instance
165
+ *
166
+ * This is useful for adding custom middleware or routes.
167
+ * Returns null if the server is not running.
168
+ *
169
+ * @returns Express app or null
170
+ */
171
+ getApp(): Express | null;
172
+ /**
173
+ * Get the underlying HTTP server instance
174
+ *
175
+ * Returns null if the server is not running.
176
+ *
177
+ * @returns HTTP server or null
178
+ */
179
+ getHttpServer(): Server | null;
180
+ /**
181
+ * Get the loaded endpoints
182
+ *
183
+ * @returns Array of endpoint configurations or empty array if not running
184
+ */
185
+ getEndpoints(): EndpointConfig[];
186
+ /**
187
+ * Get the loaded flows
188
+ *
189
+ * @returns Array of flow configurations or empty array if not running
190
+ */
191
+ getFlows(): FlowConfig[];
192
+ /**
193
+ * Activate a specific scenario for an endpoint
194
+ *
195
+ * @param endpointId - The endpoint ID
196
+ * @param scenarioId - The scenario ID to activate
197
+ */
198
+ activateScenario(endpointId: string, scenarioId: string): void;
199
+ /**
200
+ * Activate a flow
201
+ *
202
+ * @param flowId - The flow ID to activate, or null to deactivate
203
+ */
204
+ activateFlow(flowId: string | null): void;
205
+ /**
206
+ * Reset the server state to defaults
207
+ *
208
+ * This clears the active flow and resets all endpoint scenarios to their defaults.
209
+ */
210
+ reset(): void;
211
+ /**
212
+ * Register a callback to be called when configuration is reloaded
213
+ *
214
+ * @param callback - Function to call on reload
215
+ * @returns Function to unregister the callback
216
+ */
217
+ onReload(callback: OnReloadCallback): () => void;
218
+ /**
219
+ * Register a callback to be called on errors
220
+ *
221
+ * @param callback - Function to call on error
222
+ * @returns Function to unregister the callback
223
+ */
224
+ onError(callback: OnErrorCallback): () => void;
225
+ /**
226
+ * Start the file watcher for hot reload
227
+ */
228
+ private startWatcher;
229
+ /**
230
+ * Emit an error to all registered error callbacks
231
+ */
232
+ private emitError;
233
+ }
234
+ /**
235
+ * Create a new MockServer instance
236
+ *
237
+ * This is a convenience function for creating a MockServer.
238
+ *
239
+ * @param options - Configuration options for the server
240
+ * @returns A new MockServer instance
241
+ */
242
+ export declare function createMockServer(options: MockServerOptions): MockServer;
243
+ //# sourceMappingURL=mock-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-server.d.ts","sourceRoot":"","sources":["../src/mock-server.ts"],"names":[],"mappings":"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"}