@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.
- package/README.md +643 -0
- package/dist/__tests__/mock-server.test.d.ts +5 -0
- package/dist/__tests__/mock-server.test.d.ts.map +1 -0
- package/dist/__tests__/mock-server.test.js +599 -0
- package/dist/__tests__/mock-server.test.js.map +1 -0
- package/dist/admin/__tests__/admin-router.test.d.ts +2 -0
- package/dist/admin/__tests__/admin-router.test.d.ts.map +1 -0
- package/dist/admin/__tests__/admin-router.test.js +621 -0
- package/dist/admin/__tests__/admin-router.test.js.map +1 -0
- package/dist/admin/admin-router.d.ts +27 -0
- package/dist/admin/admin-router.d.ts.map +1 -0
- package/dist/admin/admin-router.js +616 -0
- package/dist/admin/admin-router.js.map +1 -0
- package/dist/admin/index.d.ts +4 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +10 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/types.d.ts +185 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +33 -0
- package/dist/admin/types.js.map +1 -0
- package/dist/config/__tests__/config-discovery.test.d.ts +2 -0
- package/dist/config/__tests__/config-discovery.test.d.ts.map +1 -0
- package/dist/config/__tests__/config-discovery.test.js +52 -0
- package/dist/config/__tests__/config-discovery.test.js.map +1 -0
- package/dist/config/__tests__/config-loader.test.d.ts +2 -0
- package/dist/config/__tests__/config-loader.test.d.ts.map +1 -0
- package/dist/config/__tests__/config-loader.test.js +124 -0
- package/dist/config/__tests__/config-loader.test.js.map +1 -0
- package/dist/config/__tests__/file-loader.test.d.ts +2 -0
- package/dist/config/__tests__/file-loader.test.d.ts.map +1 -0
- package/dist/config/__tests__/file-loader.test.js +63 -0
- package/dist/config/__tests__/file-loader.test.js.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.d.ts +25 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.d.ts.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.js +25 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.js.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.d.ts +11 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.d.ts.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.js +11 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.js.map +1 -0
- package/dist/config/config-discovery.d.ts +23 -0
- package/dist/config/config-discovery.d.ts.map +1 -0
- package/dist/config/config-discovery.js +60 -0
- package/dist/config/config-discovery.js.map +1 -0
- package/dist/config/config-loader.d.ts +56 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +162 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-writer.d.ts +96 -0
- package/dist/config/config-writer.d.ts.map +1 -0
- package/dist/config/config-writer.js +248 -0
- package/dist/config/config-writer.js.map +1 -0
- package/dist/config/file-loader.d.ts +16 -0
- package/dist/config/file-loader.d.ts.map +1 -0
- package/dist/config/file-loader.js +90 -0
- package/dist/config/file-loader.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +23 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +47 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +7 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/mock-server.d.ts +243 -0
- package/dist/mock-server.d.ts.map +1 -0
- package/dist/mock-server.js +387 -0
- package/dist/mock-server.js.map +1 -0
- package/dist/resolver/__tests__/response-resolver.test.d.ts +2 -0
- package/dist/resolver/__tests__/response-resolver.test.d.ts.map +1 -0
- package/dist/resolver/__tests__/response-resolver.test.js +358 -0
- package/dist/resolver/__tests__/response-resolver.test.js.map +1 -0
- package/dist/resolver/index.d.ts +4 -0
- package/dist/resolver/index.d.ts.map +1 -0
- package/dist/resolver/index.js +9 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/response-resolver.d.ts +73 -0
- package/dist/resolver/response-resolver.d.ts.map +1 -0
- package/dist/resolver/response-resolver.js +167 -0
- package/dist/resolver/response-resolver.js.map +1 -0
- package/dist/resolver/types.d.ts +47 -0
- package/dist/resolver/types.d.ts.map +1 -0
- package/dist/resolver/types.js +9 -0
- package/dist/resolver/types.js.map +1 -0
- package/dist/schemas/__tests__/config.validator.test.d.ts +2 -0
- package/dist/schemas/__tests__/config.validator.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/config.validator.test.js +66 -0
- package/dist/schemas/__tests__/config.validator.test.js.map +1 -0
- package/dist/schemas/__tests__/endpoint.schema.test.d.ts +2 -0
- package/dist/schemas/__tests__/endpoint.schema.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/endpoint.schema.test.js +103 -0
- package/dist/schemas/__tests__/endpoint.schema.test.js.map +1 -0
- package/dist/schemas/__tests__/flow.schema.test.d.ts +2 -0
- package/dist/schemas/__tests__/flow.schema.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/flow.schema.test.js +92 -0
- package/dist/schemas/__tests__/flow.schema.test.js.map +1 -0
- package/dist/schemas/config.validator.d.ts +39 -0
- package/dist/schemas/config.validator.d.ts.map +1 -0
- package/dist/schemas/config.validator.js +117 -0
- package/dist/schemas/config.validator.js.map +1 -0
- package/dist/schemas/endpoint.schema.d.ts +108 -0
- package/dist/schemas/endpoint.schema.d.ts.map +1 -0
- package/dist/schemas/endpoint.schema.js +87 -0
- package/dist/schemas/endpoint.schema.js.map +1 -0
- package/dist/schemas/flow.schema.d.ts +46 -0
- package/dist/schemas/flow.schema.d.ts.map +1 -0
- package/dist/schemas/flow.schema.js +73 -0
- package/dist/schemas/flow.schema.js.map +1 -0
- package/dist/schemas/http.schema.d.ts +15 -0
- package/dist/schemas/http.schema.d.ts.map +1 -0
- package/dist/schemas/http.schema.js +32 -0
- package/dist/schemas/http.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +6 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +33 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/scenario.schema.d.ts +54 -0
- package/dist/schemas/scenario.schema.d.ts.map +1 -0
- package/dist/schemas/scenario.schema.js +75 -0
- package/dist/schemas/scenario.schema.js.map +1 -0
- package/dist/server/__tests__/mock-server-app.test.d.ts +2 -0
- package/dist/server/__tests__/mock-server-app.test.d.ts.map +1 -0
- package/dist/server/__tests__/mock-server-app.test.js +296 -0
- package/dist/server/__tests__/mock-server-app.test.js.map +1 -0
- package/dist/server/index.d.ts +4 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +10 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mock-server-app.d.ts +119 -0
- package/dist/server/mock-server-app.d.ts.map +1 -0
- package/dist/server/mock-server-app.js +304 -0
- package/dist/server/mock-server-app.js.map +1 -0
- package/dist/server/types.d.ts +38 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +11 -0
- package/dist/server/types.js.map +1 -0
- package/dist/state/__tests__/state-manager.test.d.ts +2 -0
- package/dist/state/__tests__/state-manager.test.d.ts.map +1 -0
- package/dist/state/__tests__/state-manager.test.js +275 -0
- package/dist/state/__tests__/state-manager.test.js.map +1 -0
- package/dist/state/index.d.ts +3 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/state-manager.d.ts +92 -0
- package/dist/state/state-manager.d.ts.map +1 -0
- package/dist/state/state-manager.js +198 -0
- package/dist/state/state-manager.js.map +1 -0
- package/dist/state/types.d.ts +30 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +2 -0
- package/dist/state/types.js.map +1 -0
- package/dist/ui/assets/index-SADMOgPE.js +10 -0
- package/dist/ui/assets/index-rj7m-XdG.css +1 -0
- package/dist/ui/index.html +29 -0
- package/dist/watcher/__tests__/config-watcher.test.d.ts +2 -0
- package/dist/watcher/__tests__/config-watcher.test.d.ts.map +1 -0
- package/dist/watcher/__tests__/config-watcher.test.js +372 -0
- package/dist/watcher/__tests__/config-watcher.test.js.map +1 -0
- package/dist/watcher/config-watcher.d.ts +100 -0
- package/dist/watcher/config-watcher.d.ts.map +1 -0
- package/dist/watcher/config-watcher.js +358 -0
- package/dist/watcher/config-watcher.js.map +1 -0
- package/dist/watcher/index.d.ts +7 -0
- package/dist/watcher/index.d.ts.map +1 -0
- package/dist/watcher/index.js +8 -0
- package/dist/watcher/index.js.map +1 -0
- package/dist/watcher/types.d.ts +64 -0
- package/dist/watcher/types.d.ts.map +1 -0
- package/dist/watcher/types.js +15 -0
- package/dist/watcher/types.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MockServer - Public API for the mock server package
|
|
4
|
+
*
|
|
5
|
+
* This is the main entry point for consumers of the package.
|
|
6
|
+
* It provides a simple interface to configure, start, and stop the mock server.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.MockServer = void 0;
|
|
13
|
+
exports.createMockServer = createMockServer;
|
|
14
|
+
const mock_server_app_js_1 = require("./server/mock-server-app.js");
|
|
15
|
+
const config_loader_js_1 = require("./config/config-loader.js");
|
|
16
|
+
const config_watcher_js_1 = require("./watcher/config-watcher.js");
|
|
17
|
+
const index_js_1 = require("./config/index.js");
|
|
18
|
+
const path_1 = __importDefault(require("path"));
|
|
19
|
+
/**
|
|
20
|
+
* MockServer - Main class for creating and managing a mock server
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* import { MockServer } from '@zze/mock-server';
|
|
25
|
+
*
|
|
26
|
+
* const server = new MockServer({
|
|
27
|
+
* configPath: './mock-config',
|
|
28
|
+
* port: 3001,
|
|
29
|
+
* apiPrefix: '/api',
|
|
30
|
+
* hotReload: true
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* await server.start();
|
|
34
|
+
* console.log('Mock server running on port 3001');
|
|
35
|
+
*
|
|
36
|
+
* // Later...
|
|
37
|
+
* await server.stop();
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
class MockServer {
|
|
41
|
+
/**
|
|
42
|
+
* Create a new MockServer instance
|
|
43
|
+
*
|
|
44
|
+
* @param options - Configuration options for the server
|
|
45
|
+
*/
|
|
46
|
+
constructor(options) {
|
|
47
|
+
this.serverApp = null;
|
|
48
|
+
this.watcher = null;
|
|
49
|
+
this.reloadCallbacks = [];
|
|
50
|
+
this.errorCallbacks = [];
|
|
51
|
+
this.loadedEndpoints = [];
|
|
52
|
+
this.loadedFlows = [];
|
|
53
|
+
// Apply defaults
|
|
54
|
+
this.options = {
|
|
55
|
+
configPath: options.configPath,
|
|
56
|
+
port: options.port ?? 3001,
|
|
57
|
+
apiPrefix: options.apiPrefix ?? '/api',
|
|
58
|
+
hotReload: options.hotReload ?? true,
|
|
59
|
+
watcherOptions: options.watcherOptions,
|
|
60
|
+
};
|
|
61
|
+
// Create config loader
|
|
62
|
+
this.configLoader = new config_loader_js_1.ConfigLoader(this.options.configPath);
|
|
63
|
+
// Create config writer for endpoint/flow management
|
|
64
|
+
this.configWriter = (0, index_js_1.createConfigWriter)({
|
|
65
|
+
endpointsDir: path_1.default.join(this.options.configPath, 'endpoints'),
|
|
66
|
+
flowsDir: path_1.default.join(this.options.configPath, 'flows'),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Start the mock server
|
|
71
|
+
*
|
|
72
|
+
* This method:
|
|
73
|
+
* 1. Loads configuration from the config directory
|
|
74
|
+
* 2. Creates and starts the Express server
|
|
75
|
+
* 3. Optionally starts the file watcher for hot reload
|
|
76
|
+
*
|
|
77
|
+
* @returns Promise that resolves when the server is ready
|
|
78
|
+
* @throws Error if configuration loading fails or server fails to start
|
|
79
|
+
*/
|
|
80
|
+
async start() {
|
|
81
|
+
if (this.serverApp?.isRunning()) {
|
|
82
|
+
throw new Error('Server is already running');
|
|
83
|
+
}
|
|
84
|
+
// Load configuration
|
|
85
|
+
const result = await this.configLoader.load();
|
|
86
|
+
if (!result.success || !result.config) {
|
|
87
|
+
const errorMessages = result.errors.map((e) => `${e.filePath}: ${e.error}`).join('\n');
|
|
88
|
+
throw new Error(`Failed to load configuration:\n${errorMessages}`);
|
|
89
|
+
}
|
|
90
|
+
// Store loaded config
|
|
91
|
+
this.loadedEndpoints = result.config.endpoints;
|
|
92
|
+
this.loadedFlows = result.config.flows;
|
|
93
|
+
// Create server app
|
|
94
|
+
const serverOptions = {
|
|
95
|
+
port: this.options.port,
|
|
96
|
+
apiPrefix: this.options.apiPrefix,
|
|
97
|
+
hotReload: this.options.hotReload,
|
|
98
|
+
};
|
|
99
|
+
this.serverApp = new mock_server_app_js_1.MockServerApp(serverOptions);
|
|
100
|
+
// Set config writer for endpoint/flow management via admin API
|
|
101
|
+
this.serverApp.setConfigWriter(this.configWriter, () => this.reload());
|
|
102
|
+
this.serverApp.registerConfig(this.loadedEndpoints, this.loadedFlows);
|
|
103
|
+
// Start the server
|
|
104
|
+
await this.serverApp.start();
|
|
105
|
+
// Start file watcher if hot reload is enabled
|
|
106
|
+
if (this.options.hotReload) {
|
|
107
|
+
await this.startWatcher();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Stop the mock server
|
|
112
|
+
*
|
|
113
|
+
* This method:
|
|
114
|
+
* 1. Stops the file watcher (if running)
|
|
115
|
+
* 2. Stops the Express server
|
|
116
|
+
*
|
|
117
|
+
* @returns Promise that resolves when the server has stopped
|
|
118
|
+
*/
|
|
119
|
+
async stop() {
|
|
120
|
+
// Stop watcher first
|
|
121
|
+
if (this.watcher) {
|
|
122
|
+
await this.watcher.stop();
|
|
123
|
+
this.watcher = null;
|
|
124
|
+
}
|
|
125
|
+
// Stop server
|
|
126
|
+
if (this.serverApp) {
|
|
127
|
+
await this.serverApp.stop();
|
|
128
|
+
this.serverApp = null;
|
|
129
|
+
}
|
|
130
|
+
// Clear loaded config
|
|
131
|
+
this.loadedEndpoints = [];
|
|
132
|
+
this.loadedFlows = [];
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Restart the mock server
|
|
136
|
+
*
|
|
137
|
+
* This is a convenience method that stops and starts the server.
|
|
138
|
+
*
|
|
139
|
+
* @returns Promise that resolves when the server has restarted
|
|
140
|
+
*/
|
|
141
|
+
async restart() {
|
|
142
|
+
await this.stop();
|
|
143
|
+
await this.start();
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Manually trigger a configuration reload
|
|
147
|
+
*
|
|
148
|
+
* This reloads all configuration files and updates the server routes.
|
|
149
|
+
* Useful when hot reload is disabled but you want to reload manually.
|
|
150
|
+
*
|
|
151
|
+
* @returns Promise that resolves when the reload is complete
|
|
152
|
+
*/
|
|
153
|
+
async reload() {
|
|
154
|
+
if (!this.serverApp) {
|
|
155
|
+
throw new Error('Server is not running');
|
|
156
|
+
}
|
|
157
|
+
const result = await this.configLoader.reload();
|
|
158
|
+
if (!result.success || !result.config) {
|
|
159
|
+
const errorMessages = result.errors.map((e) => `${e.filePath}: ${e.error}`).join('\n');
|
|
160
|
+
throw new Error(`Failed to reload configuration:\n${errorMessages}`);
|
|
161
|
+
}
|
|
162
|
+
// Update stored config
|
|
163
|
+
this.loadedEndpoints = result.config.endpoints;
|
|
164
|
+
this.loadedFlows = result.config.flows;
|
|
165
|
+
this.serverApp.reloadConfig(this.loadedEndpoints, this.loadedFlows);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get the current state of the mock server
|
|
169
|
+
*
|
|
170
|
+
* @returns Current server state
|
|
171
|
+
*/
|
|
172
|
+
getState() {
|
|
173
|
+
if (!this.serverApp) {
|
|
174
|
+
return {
|
|
175
|
+
running: false,
|
|
176
|
+
port: null,
|
|
177
|
+
endpointCount: 0,
|
|
178
|
+
flowCount: 0,
|
|
179
|
+
hotReloadActive: false,
|
|
180
|
+
activeFlowId: null,
|
|
181
|
+
activeScenarios: {},
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
const serverState = this.serverApp.getState();
|
|
185
|
+
const stateManager = this.serverApp.getStateManager();
|
|
186
|
+
const runtimeState = stateManager.getState();
|
|
187
|
+
return {
|
|
188
|
+
running: serverState.running,
|
|
189
|
+
port: serverState.port,
|
|
190
|
+
endpointCount: serverState.endpointCount,
|
|
191
|
+
flowCount: serverState.flowCount,
|
|
192
|
+
hotReloadActive: this.watcher?.isWatching() ?? false,
|
|
193
|
+
activeFlowId: runtimeState.activeFlowId,
|
|
194
|
+
activeScenarios: runtimeState.activeScenarios,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Get the configuration path
|
|
199
|
+
*
|
|
200
|
+
* @returns The configuration directory path
|
|
201
|
+
*/
|
|
202
|
+
getConfigPath() {
|
|
203
|
+
return this.configLoader.getConfigPath();
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get the server options
|
|
207
|
+
*
|
|
208
|
+
* @returns The effective server options (with defaults applied)
|
|
209
|
+
*/
|
|
210
|
+
getOptions() {
|
|
211
|
+
return { ...this.options };
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get the underlying Express app instance
|
|
215
|
+
*
|
|
216
|
+
* This is useful for adding custom middleware or routes.
|
|
217
|
+
* Returns null if the server is not running.
|
|
218
|
+
*
|
|
219
|
+
* @returns Express app or null
|
|
220
|
+
*/
|
|
221
|
+
getApp() {
|
|
222
|
+
return this.serverApp?.getApp() ?? null;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get the underlying HTTP server instance
|
|
226
|
+
*
|
|
227
|
+
* Returns null if the server is not running.
|
|
228
|
+
*
|
|
229
|
+
* @returns HTTP server or null
|
|
230
|
+
*/
|
|
231
|
+
getHttpServer() {
|
|
232
|
+
return this.serverApp?.getHttpServer() ?? null;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Get the loaded endpoints
|
|
236
|
+
*
|
|
237
|
+
* @returns Array of endpoint configurations or empty array if not running
|
|
238
|
+
*/
|
|
239
|
+
getEndpoints() {
|
|
240
|
+
return this.loadedEndpoints;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Get the loaded flows
|
|
244
|
+
*
|
|
245
|
+
* @returns Array of flow configurations or empty array if not running
|
|
246
|
+
*/
|
|
247
|
+
getFlows() {
|
|
248
|
+
return this.loadedFlows;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Activate a specific scenario for an endpoint
|
|
252
|
+
*
|
|
253
|
+
* @param endpointId - The endpoint ID
|
|
254
|
+
* @param scenarioId - The scenario ID to activate
|
|
255
|
+
*/
|
|
256
|
+
activateScenario(endpointId, scenarioId) {
|
|
257
|
+
if (!this.serverApp) {
|
|
258
|
+
throw new Error('Server is not running');
|
|
259
|
+
}
|
|
260
|
+
const stateManager = this.serverApp.getStateManager();
|
|
261
|
+
stateManager.activateScenario(endpointId, scenarioId);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Activate a flow
|
|
265
|
+
*
|
|
266
|
+
* @param flowId - The flow ID to activate, or null to deactivate
|
|
267
|
+
*/
|
|
268
|
+
activateFlow(flowId) {
|
|
269
|
+
if (!this.serverApp) {
|
|
270
|
+
throw new Error('Server is not running');
|
|
271
|
+
}
|
|
272
|
+
const stateManager = this.serverApp.getStateManager();
|
|
273
|
+
if (flowId === null) {
|
|
274
|
+
stateManager.deactivateFlow();
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
stateManager.activateFlow(flowId);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Reset the server state to defaults
|
|
282
|
+
*
|
|
283
|
+
* This clears the active flow and resets all endpoint scenarios to their defaults.
|
|
284
|
+
*/
|
|
285
|
+
reset() {
|
|
286
|
+
if (!this.serverApp) {
|
|
287
|
+
throw new Error('Server is not running');
|
|
288
|
+
}
|
|
289
|
+
const stateManager = this.serverApp.getStateManager();
|
|
290
|
+
stateManager.reset();
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Register a callback to be called when configuration is reloaded
|
|
294
|
+
*
|
|
295
|
+
* @param callback - Function to call on reload
|
|
296
|
+
* @returns Function to unregister the callback
|
|
297
|
+
*/
|
|
298
|
+
onReload(callback) {
|
|
299
|
+
this.reloadCallbacks.push(callback);
|
|
300
|
+
return () => {
|
|
301
|
+
const index = this.reloadCallbacks.indexOf(callback);
|
|
302
|
+
if (index !== -1) {
|
|
303
|
+
this.reloadCallbacks.splice(index, 1);
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Register a callback to be called on errors
|
|
309
|
+
*
|
|
310
|
+
* @param callback - Function to call on error
|
|
311
|
+
* @returns Function to unregister the callback
|
|
312
|
+
*/
|
|
313
|
+
onError(callback) {
|
|
314
|
+
this.errorCallbacks.push(callback);
|
|
315
|
+
return () => {
|
|
316
|
+
const index = this.errorCallbacks.indexOf(callback);
|
|
317
|
+
if (index !== -1) {
|
|
318
|
+
this.errorCallbacks.splice(index, 1);
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Start the file watcher for hot reload
|
|
324
|
+
*/
|
|
325
|
+
async startWatcher() {
|
|
326
|
+
if (!this.serverApp) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
this.watcher = new config_watcher_js_1.ConfigWatcher(this.configLoader, this.options.watcherOptions);
|
|
330
|
+
this.watcher.attachServer(this.serverApp);
|
|
331
|
+
// Forward reload events to registered callbacks and update local state
|
|
332
|
+
this.watcher.onReload(async (event) => {
|
|
333
|
+
// Update local cache of endpoints and flows after reload
|
|
334
|
+
try {
|
|
335
|
+
const result = await this.configLoader.load();
|
|
336
|
+
if (result.success && result.config) {
|
|
337
|
+
this.loadedEndpoints = result.config.endpoints;
|
|
338
|
+
this.loadedFlows = result.config.flows;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
// Ignore - watcher will handle reporting errors
|
|
343
|
+
}
|
|
344
|
+
for (const callback of this.reloadCallbacks) {
|
|
345
|
+
try {
|
|
346
|
+
const result = callback(event);
|
|
347
|
+
if (result instanceof Promise) {
|
|
348
|
+
result.catch((err) => this.emitError(err));
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
catch (err) {
|
|
352
|
+
this.emitError(err instanceof Error ? err : new Error(String(err)));
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
// Forward error events to registered callbacks
|
|
357
|
+
this.watcher.onError((error) => {
|
|
358
|
+
this.emitError(error);
|
|
359
|
+
});
|
|
360
|
+
await this.watcher.start();
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Emit an error to all registered error callbacks
|
|
364
|
+
*/
|
|
365
|
+
emitError(error) {
|
|
366
|
+
for (const callback of this.errorCallbacks) {
|
|
367
|
+
try {
|
|
368
|
+
callback(error);
|
|
369
|
+
}
|
|
370
|
+
catch {
|
|
371
|
+
// Ignore errors from error callbacks
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
exports.MockServer = MockServer;
|
|
377
|
+
/**
|
|
378
|
+
* Create a new MockServer instance
|
|
379
|
+
*
|
|
380
|
+
* This is a convenience function for creating a MockServer.
|
|
381
|
+
*
|
|
382
|
+
* @param options - Configuration options for the server
|
|
383
|
+
* @returns A new MockServer instance
|
|
384
|
+
*/
|
|
385
|
+
function createMockServer(options) {
|
|
386
|
+
return new MockServer(options);
|
|
387
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-server.js","sourceRoot":"","sources":["../src/mock-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-resolver.test.d.ts","sourceRoot":"","sources":["../../../src/resolver/__tests__/response-resolver.test.ts"],"names":[],"mappings":""}
|