@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,358 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ConfigWatcher = void 0;
|
|
40
|
+
exports.createConfigWatcher = createConfigWatcher;
|
|
41
|
+
/**
|
|
42
|
+
* Configuration file watcher for hot reload
|
|
43
|
+
* Watches endpoints/ and flows/ directories for changes
|
|
44
|
+
*/
|
|
45
|
+
const chokidar_1 = __importDefault(require("chokidar"));
|
|
46
|
+
const path_1 = __importDefault(require("path"));
|
|
47
|
+
const types_js_1 = require("./types.js");
|
|
48
|
+
/**
|
|
49
|
+
* Watches configuration directories and triggers hot reload on changes
|
|
50
|
+
*/
|
|
51
|
+
class ConfigWatcher {
|
|
52
|
+
constructor(configLoader, options = {}) {
|
|
53
|
+
this.serverApp = null;
|
|
54
|
+
this.watcher = null;
|
|
55
|
+
this.pendingEvents = [];
|
|
56
|
+
this.debounceTimer = null;
|
|
57
|
+
this.reloadCallbacks = new Set();
|
|
58
|
+
this.errorCallbacks = new Set();
|
|
59
|
+
this.isReloading = false;
|
|
60
|
+
this.watchedFiles = new Set();
|
|
61
|
+
this.configLoader = configLoader;
|
|
62
|
+
this.options = { ...types_js_1.DEFAULT_WATCHER_OPTIONS, ...options };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Attach a MockServerApp to receive config updates
|
|
66
|
+
*/
|
|
67
|
+
attachServer(serverApp) {
|
|
68
|
+
this.serverApp = serverApp;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Detach the MockServerApp
|
|
72
|
+
*/
|
|
73
|
+
detachServer() {
|
|
74
|
+
this.serverApp = null;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Start watching configuration directories
|
|
78
|
+
*/
|
|
79
|
+
async start() {
|
|
80
|
+
if (this.watcher) {
|
|
81
|
+
return; // Already watching
|
|
82
|
+
}
|
|
83
|
+
const endpointsDir = this.configLoader.getEndpointsDir();
|
|
84
|
+
const flowsDir = this.configLoader.getFlowsDir();
|
|
85
|
+
const watchPaths = [];
|
|
86
|
+
// Check which directories exist
|
|
87
|
+
if (await this.directoryExists(endpointsDir)) {
|
|
88
|
+
watchPaths.push(endpointsDir);
|
|
89
|
+
}
|
|
90
|
+
if (await this.directoryExists(flowsDir)) {
|
|
91
|
+
watchPaths.push(flowsDir);
|
|
92
|
+
}
|
|
93
|
+
if (watchPaths.length === 0) {
|
|
94
|
+
throw new Error('No configuration directories found to watch');
|
|
95
|
+
}
|
|
96
|
+
// Build ignore patterns for chokidar
|
|
97
|
+
const ignored = this.buildIgnorePatterns();
|
|
98
|
+
// Create chokidar watcher
|
|
99
|
+
this.watcher = chokidar_1.default.watch(watchPaths, {
|
|
100
|
+
persistent: true,
|
|
101
|
+
ignoreInitial: true,
|
|
102
|
+
depth: this.options.recursive ? undefined : 0,
|
|
103
|
+
ignored,
|
|
104
|
+
awaitWriteFinish: {
|
|
105
|
+
stabilityThreshold: 100,
|
|
106
|
+
pollInterval: 50,
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
// Set up event handlers
|
|
110
|
+
this.watcher
|
|
111
|
+
.on('add', (filePath) => this.handleFileEvent('add', filePath))
|
|
112
|
+
.on('change', (filePath) => this.handleFileEvent('change', filePath))
|
|
113
|
+
.on('unlink', (filePath) => this.handleFileEvent('unlink', filePath))
|
|
114
|
+
.on('error', (error) => this.handleError(error instanceof Error ? error : new Error(String(error))))
|
|
115
|
+
.on('ready', () => {
|
|
116
|
+
// Track initial watched files
|
|
117
|
+
const watched = this.watcher?.getWatched() ?? {};
|
|
118
|
+
for (const dir of Object.keys(watched)) {
|
|
119
|
+
for (const file of watched[dir]) {
|
|
120
|
+
const fullPath = path_1.default.join(dir, file);
|
|
121
|
+
if (this.isWatchableFile(fullPath)) {
|
|
122
|
+
this.watchedFiles.add(fullPath);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
// Wait for watcher to be ready
|
|
128
|
+
await new Promise((resolve) => {
|
|
129
|
+
this.watcher?.once('ready', resolve);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Stop watching configuration directories
|
|
134
|
+
*/
|
|
135
|
+
async stop() {
|
|
136
|
+
if (this.debounceTimer) {
|
|
137
|
+
clearTimeout(this.debounceTimer);
|
|
138
|
+
this.debounceTimer = null;
|
|
139
|
+
}
|
|
140
|
+
this.pendingEvents = [];
|
|
141
|
+
this.watchedFiles.clear();
|
|
142
|
+
if (this.watcher) {
|
|
143
|
+
await this.watcher.close();
|
|
144
|
+
this.watcher = null;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Add a callback for reload events
|
|
149
|
+
*/
|
|
150
|
+
onReload(callback) {
|
|
151
|
+
this.reloadCallbacks.add(callback);
|
|
152
|
+
return () => this.reloadCallbacks.delete(callback);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Add a callback for error events
|
|
156
|
+
*/
|
|
157
|
+
onError(callback) {
|
|
158
|
+
this.errorCallbacks.add(callback);
|
|
159
|
+
return () => this.errorCallbacks.delete(callback);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get current watcher state
|
|
163
|
+
*/
|
|
164
|
+
getState() {
|
|
165
|
+
const watchedDirectories = [];
|
|
166
|
+
if (this.watcher) {
|
|
167
|
+
const watched = this.watcher.getWatched();
|
|
168
|
+
watchedDirectories.push(...Object.keys(watched));
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
watching: this.watcher !== null,
|
|
172
|
+
watchedDirectories,
|
|
173
|
+
fileCount: this.watchedFiles.size,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Check if watcher is active
|
|
178
|
+
*/
|
|
179
|
+
isWatching() {
|
|
180
|
+
return this.watcher !== null;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Manually trigger a reload (useful for testing or forced refresh)
|
|
184
|
+
*/
|
|
185
|
+
async triggerReload() {
|
|
186
|
+
await this.performReload([]);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Handle a file system event
|
|
190
|
+
*/
|
|
191
|
+
handleFileEvent(type, filePath) {
|
|
192
|
+
// Only handle supported config file extensions
|
|
193
|
+
if (!this.isWatchableFile(filePath)) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// Determine which directory the file belongs to
|
|
197
|
+
const directory = this.getFileDirectory(filePath);
|
|
198
|
+
if (!directory) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// Track file count changes
|
|
202
|
+
if (type === 'add') {
|
|
203
|
+
this.watchedFiles.add(filePath);
|
|
204
|
+
}
|
|
205
|
+
else if (type === 'unlink') {
|
|
206
|
+
this.watchedFiles.delete(filePath);
|
|
207
|
+
}
|
|
208
|
+
// Add to pending events
|
|
209
|
+
this.pendingEvents.push({ type, path: filePath, directory });
|
|
210
|
+
// Reset debounce timer
|
|
211
|
+
if (this.debounceTimer) {
|
|
212
|
+
clearTimeout(this.debounceTimer);
|
|
213
|
+
}
|
|
214
|
+
this.debounceTimer = setTimeout(() => {
|
|
215
|
+
this.processEvents();
|
|
216
|
+
}, this.options.debounceMs);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Process pending events after debounce
|
|
220
|
+
*/
|
|
221
|
+
async processEvents() {
|
|
222
|
+
if (this.pendingEvents.length === 0 || this.isReloading) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const events = [...this.pendingEvents];
|
|
226
|
+
this.pendingEvents = [];
|
|
227
|
+
this.debounceTimer = null;
|
|
228
|
+
await this.performReload(events);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Perform the actual reload
|
|
232
|
+
*/
|
|
233
|
+
async performReload(events) {
|
|
234
|
+
if (this.isReloading) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
this.isReloading = true;
|
|
238
|
+
try {
|
|
239
|
+
// Reload configuration
|
|
240
|
+
const result = await this.configLoader.reload();
|
|
241
|
+
if (result.errors.length > 0) {
|
|
242
|
+
// Report validation errors but don't prevent reload if we have config
|
|
243
|
+
const errorMessages = result.errors.map(e => `${e.filePath}: ${e.error}`).join('\n');
|
|
244
|
+
const error = new Error(`Configuration reload completed with errors:\n${errorMessages}`);
|
|
245
|
+
this.emitError(error);
|
|
246
|
+
}
|
|
247
|
+
// Update server if attached and we have valid config
|
|
248
|
+
if (this.serverApp && result.config) {
|
|
249
|
+
this.serverApp.reloadConfig(result.config.endpoints, result.config.flows);
|
|
250
|
+
}
|
|
251
|
+
// Emit reload event
|
|
252
|
+
const reloadEvent = {
|
|
253
|
+
changedFiles: events,
|
|
254
|
+
timestamp: new Date(),
|
|
255
|
+
};
|
|
256
|
+
await this.emitReload(reloadEvent);
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
this.handleError(error instanceof Error ? error : new Error(String(error)));
|
|
260
|
+
}
|
|
261
|
+
finally {
|
|
262
|
+
this.isReloading = false;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Handle errors
|
|
267
|
+
*/
|
|
268
|
+
handleError(error) {
|
|
269
|
+
this.emitError(error);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Emit reload event to all callbacks
|
|
273
|
+
*/
|
|
274
|
+
async emitReload(event) {
|
|
275
|
+
for (const callback of this.reloadCallbacks) {
|
|
276
|
+
try {
|
|
277
|
+
await callback(event);
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
console.error('Reload callback error:', error);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Emit error to all callbacks
|
|
286
|
+
*/
|
|
287
|
+
emitError(error) {
|
|
288
|
+
for (const callback of this.errorCallbacks) {
|
|
289
|
+
try {
|
|
290
|
+
callback(error);
|
|
291
|
+
}
|
|
292
|
+
catch (err) {
|
|
293
|
+
console.error('Error callback error:', err);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Check if a file should be watched based on extension
|
|
299
|
+
*/
|
|
300
|
+
isWatchableFile(filePath) {
|
|
301
|
+
const ext = path_1.default.extname(filePath).toLowerCase();
|
|
302
|
+
return this.options.extensions.includes(ext);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Determine which config directory a file belongs to
|
|
306
|
+
*/
|
|
307
|
+
getFileDirectory(filePath) {
|
|
308
|
+
const normalized = path_1.default.normalize(filePath);
|
|
309
|
+
const endpointsDir = path_1.default.normalize(this.configLoader.getEndpointsDir());
|
|
310
|
+
const flowsDir = path_1.default.normalize(this.configLoader.getFlowsDir());
|
|
311
|
+
if (normalized.startsWith(endpointsDir)) {
|
|
312
|
+
return 'endpoints';
|
|
313
|
+
}
|
|
314
|
+
if (normalized.startsWith(flowsDir)) {
|
|
315
|
+
return 'flows';
|
|
316
|
+
}
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Build ignore patterns for chokidar
|
|
321
|
+
*/
|
|
322
|
+
buildIgnorePatterns() {
|
|
323
|
+
const patterns = [];
|
|
324
|
+
for (const pattern of this.options.ignorePatterns) {
|
|
325
|
+
if (pattern.includes('*')) {
|
|
326
|
+
// Convert glob-like patterns to regex
|
|
327
|
+
const regexPattern = pattern
|
|
328
|
+
.replace(/\./g, '\\.')
|
|
329
|
+
.replace(/\*/g, '.*');
|
|
330
|
+
patterns.push(new RegExp(regexPattern));
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
patterns.push(pattern);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return patterns;
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Check if a directory exists
|
|
340
|
+
*/
|
|
341
|
+
async directoryExists(dirPath) {
|
|
342
|
+
try {
|
|
343
|
+
const fs = await Promise.resolve().then(() => __importStar(require('fs/promises')));
|
|
344
|
+
const stat = await fs.stat(dirPath);
|
|
345
|
+
return stat.isDirectory();
|
|
346
|
+
}
|
|
347
|
+
catch {
|
|
348
|
+
return false;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
exports.ConfigWatcher = ConfigWatcher;
|
|
353
|
+
/**
|
|
354
|
+
* Factory function to create a ConfigWatcher
|
|
355
|
+
*/
|
|
356
|
+
function createConfigWatcher(configLoader, options) {
|
|
357
|
+
return new ConfigWatcher(configLoader, options);
|
|
358
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-watcher.js","sourceRoot":"","sources":["../../src/watcher/config-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watcher module - Configuration file watching for hot reload
|
|
3
|
+
*/
|
|
4
|
+
export type { WatcherOptions, WatcherEvent, WatcherEventType, ReloadEvent, ReloadCallback, ErrorCallback, WatcherState, } from './types.js';
|
|
5
|
+
export { DEFAULT_WATCHER_OPTIONS } from './types.js';
|
|
6
|
+
export { ConfigWatcher, createConfigWatcher } from './config-watcher.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/watcher/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,YAAY,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createConfigWatcher = exports.ConfigWatcher = exports.DEFAULT_WATCHER_OPTIONS = void 0;
|
|
4
|
+
var types_js_1 = require("./types.js");
|
|
5
|
+
Object.defineProperty(exports, "DEFAULT_WATCHER_OPTIONS", { enumerable: true, get: function () { return types_js_1.DEFAULT_WATCHER_OPTIONS; } });
|
|
6
|
+
var config_watcher_js_1 = require("./config-watcher.js");
|
|
7
|
+
Object.defineProperty(exports, "ConfigWatcher", { enumerable: true, get: function () { return config_watcher_js_1.ConfigWatcher; } });
|
|
8
|
+
Object.defineProperty(exports, "createConfigWatcher", { enumerable: true, get: function () { return config_watcher_js_1.createConfigWatcher; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/watcher/index.ts"],"names":[],"mappings":";;;AAaA,uCAAqD;AAA5C,mHAAA,uBAAuB,OAAA;AAEhC,yDAAyE;AAAhE,kHAAA,aAAa,OAAA;AAAE,wHAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the configuration file watcher module
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Configuration options for the file watcher
|
|
6
|
+
*/
|
|
7
|
+
export interface WatcherOptions {
|
|
8
|
+
/** Debounce delay in milliseconds (default: 300) */
|
|
9
|
+
debounceMs?: number;
|
|
10
|
+
/** Whether to watch recursively in subdirectories (default: true) */
|
|
11
|
+
recursive?: boolean;
|
|
12
|
+
/** File extensions to watch (default: all supported config extensions) */
|
|
13
|
+
extensions?: string[];
|
|
14
|
+
/** Ignore patterns for files/directories */
|
|
15
|
+
ignorePatterns?: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Default watcher options
|
|
19
|
+
*/
|
|
20
|
+
export declare const DEFAULT_WATCHER_OPTIONS: Required<WatcherOptions>;
|
|
21
|
+
/**
|
|
22
|
+
* Event types emitted by the watcher
|
|
23
|
+
*/
|
|
24
|
+
export type WatcherEventType = 'add' | 'change' | 'unlink';
|
|
25
|
+
/**
|
|
26
|
+
* Event data for file change events
|
|
27
|
+
*/
|
|
28
|
+
export interface WatcherEvent {
|
|
29
|
+
/** Type of file system event */
|
|
30
|
+
type: WatcherEventType;
|
|
31
|
+
/** Absolute path to the changed file */
|
|
32
|
+
path: string;
|
|
33
|
+
/** Directory being watched (endpoints or flows) */
|
|
34
|
+
directory: 'endpoints' | 'flows';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Reload event data emitted after debounce
|
|
38
|
+
*/
|
|
39
|
+
export interface ReloadEvent {
|
|
40
|
+
/** Files that triggered the reload */
|
|
41
|
+
changedFiles: WatcherEvent[];
|
|
42
|
+
/** Timestamp of the reload */
|
|
43
|
+
timestamp: Date;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Callback for reload events
|
|
47
|
+
*/
|
|
48
|
+
export type ReloadCallback = (event: ReloadEvent) => void | Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Callback for error events
|
|
51
|
+
*/
|
|
52
|
+
export type ErrorCallback = (error: Error) => void;
|
|
53
|
+
/**
|
|
54
|
+
* Watcher state
|
|
55
|
+
*/
|
|
56
|
+
export interface WatcherState {
|
|
57
|
+
/** Whether the watcher is currently active */
|
|
58
|
+
watching: boolean;
|
|
59
|
+
/** Directories being watched */
|
|
60
|
+
watchedDirectories: string[];
|
|
61
|
+
/** Number of files being watched */
|
|
62
|
+
fileCount: number;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/watcher/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,cAAc,CAK5D,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,IAAI,EAAE,gBAAgB,CAAC;IACvB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,8BAA8B;IAC9B,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,gCAAgC;IAChC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Types for the configuration file watcher module
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEFAULT_WATCHER_OPTIONS = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Default watcher options
|
|
9
|
+
*/
|
|
10
|
+
exports.DEFAULT_WATCHER_OPTIONS = {
|
|
11
|
+
debounceMs: 300,
|
|
12
|
+
recursive: true,
|
|
13
|
+
extensions: ['.json', '.js', '.ts', '.mjs', '.mts'],
|
|
14
|
+
ignorePatterns: ['node_modules', '.git', '*.d.ts', '*.test.*', '__tests__'],
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/watcher/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAgBH;;GAEG;AACU,QAAA,uBAAuB,GAA6B;IAC/D,UAAU,EAAE,GAAG;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;IACnD,cAAc,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC;CAC5E,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zze/mock-server",
|
|
3
|
+
"version": "0.2.4",
|
|
4
|
+
"description": "A reusable Node.js mock server for microfrontend development",
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"require": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc && npm run build:ui",
|
|
19
|
+
"build:lib": "tsc",
|
|
20
|
+
"build:ui": "vite build",
|
|
21
|
+
"dev": "tsc --watch",
|
|
22
|
+
"dev:ui": "vite",
|
|
23
|
+
"test": "vitest",
|
|
24
|
+
"test:run": "vitest run",
|
|
25
|
+
"prepublishOnly": "npm run build"
|
|
26
|
+
},
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=18.0.0"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"mock-server",
|
|
32
|
+
"api",
|
|
33
|
+
"testing",
|
|
34
|
+
"development",
|
|
35
|
+
"microfrontend"
|
|
36
|
+
],
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"chokidar": "^5.0.0",
|
|
40
|
+
"express": "^4.18.2",
|
|
41
|
+
"jiti": "^2.6.1",
|
|
42
|
+
"zod": "^3.22.4"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/express": "^4.17.21",
|
|
46
|
+
"@types/node": "^20.10.0",
|
|
47
|
+
"@types/react": "^19.2.14",
|
|
48
|
+
"@types/react-dom": "^19.2.3",
|
|
49
|
+
"react": "^19.2.4",
|
|
50
|
+
"react-dom": "^19.2.4",
|
|
51
|
+
"@types/supertest": "^6.0.3",
|
|
52
|
+
"@vitejs/plugin-react": "^5.1.4",
|
|
53
|
+
"supertest": "^7.2.2",
|
|
54
|
+
"typescript": "^5.3.2",
|
|
55
|
+
"vite": "^7.3.1",
|
|
56
|
+
"vitest": "^1.0.0"
|
|
57
|
+
}
|
|
58
|
+
}
|