@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 @@
|
|
|
1
|
+
{"version":3,"file":"config-discovery.d.ts","sourceRoot":"","sources":["../../src/config/config-discovery.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,MAAM,EAAE,CAAC,CA6BnB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAKA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.discoverConfigFiles = discoverConfigFiles;
|
|
4
|
+
exports.directoryExists = directoryExists;
|
|
5
|
+
exports.getConfigDirectories = getConfigDirectories;
|
|
6
|
+
const promises_1 = require("fs/promises");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const file_loader_js_1 = require("./file-loader.js");
|
|
9
|
+
/**
|
|
10
|
+
* Discover all supported config files in a directory
|
|
11
|
+
*/
|
|
12
|
+
async function discoverConfigFiles(directory, options = {}) {
|
|
13
|
+
const { recursive = false } = options;
|
|
14
|
+
const files = [];
|
|
15
|
+
try {
|
|
16
|
+
const entries = await (0, promises_1.readdir)(directory, { withFileTypes: true });
|
|
17
|
+
for (const entry of entries) {
|
|
18
|
+
const fullPath = (0, path_1.join)(directory, entry.name);
|
|
19
|
+
if (entry.isDirectory() && recursive) {
|
|
20
|
+
const subFiles = await discoverConfigFiles(fullPath, options);
|
|
21
|
+
files.push(...subFiles);
|
|
22
|
+
}
|
|
23
|
+
else if (entry.isFile()) {
|
|
24
|
+
const ext = (0, path_1.extname)(entry.name).toLowerCase();
|
|
25
|
+
if ((0, file_loader_js_1.isSupportedExtension)(ext)) {
|
|
26
|
+
files.push(fullPath);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
// Directory doesn't exist or can't be read - return empty array
|
|
33
|
+
if (error.code === 'ENOENT') {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
return files.sort();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if a directory exists
|
|
42
|
+
*/
|
|
43
|
+
async function directoryExists(path) {
|
|
44
|
+
try {
|
|
45
|
+
const stats = await (0, promises_1.stat)(path);
|
|
46
|
+
return stats.isDirectory();
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the standard config directories from a base config path
|
|
54
|
+
*/
|
|
55
|
+
function getConfigDirectories(configPath) {
|
|
56
|
+
return {
|
|
57
|
+
endpointsDir: (0, path_1.join)(configPath, 'endpoints'),
|
|
58
|
+
flowsDir: (0, path_1.join)(configPath, 'flows'),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-discovery.js","sourceRoot":"","sources":["../../src/config/config-discovery.ts"],"names":[],"mappings":";;AAeA,kDAgCC;AAKD,0CAOC;AAKD,oDAQC;AAxED,0CAA4C;AAC5C,+BAAqC;AACrC,qDAAwD;AAUxD;;GAEG;AACI,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,UAA4B,EAAE;IAE9B,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAElE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE7C,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,SAAS,EAAE,CAAC;gBACrC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC9D,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;YAC1B,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC9C,IAAI,IAAA,qCAAoB,EAAC,GAAG,CAAC,EAAE,CAAC;oBAC9B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gEAAgE;QAChE,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,UAAkB;IAIrD,OAAO;QACL,YAAY,EAAE,IAAA,WAAI,EAAC,UAAU,EAAE,WAAW,CAAC;QAC3C,QAAQ,EAAE,IAAA,WAAI,EAAC,UAAU,EAAE,OAAO,CAAC;KACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { EndpointConfig, FlowConfig } from '../schemas/index.js';
|
|
2
|
+
import type { ConfigLoadResult } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Configuration loader that discovers and loads endpoint and flow configs
|
|
5
|
+
*/
|
|
6
|
+
export declare class ConfigLoader {
|
|
7
|
+
private configPath;
|
|
8
|
+
private endpointsDir;
|
|
9
|
+
private flowsDir;
|
|
10
|
+
constructor(configPath: string);
|
|
11
|
+
/**
|
|
12
|
+
* Get the resolved config path
|
|
13
|
+
*/
|
|
14
|
+
getConfigPath(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Get the endpoints directory path
|
|
17
|
+
*/
|
|
18
|
+
getEndpointsDir(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Get the flows directory path
|
|
21
|
+
*/
|
|
22
|
+
getFlowsDir(): string;
|
|
23
|
+
/**
|
|
24
|
+
* Load all endpoint configurations from the endpoints directory
|
|
25
|
+
*/
|
|
26
|
+
loadEndpoints(): Promise<{
|
|
27
|
+
endpoints: EndpointConfig[];
|
|
28
|
+
errors: Array<{
|
|
29
|
+
filePath: string;
|
|
30
|
+
error: string;
|
|
31
|
+
}>;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Load all flow configurations from the flows directory
|
|
35
|
+
*/
|
|
36
|
+
loadFlows(): Promise<{
|
|
37
|
+
flows: FlowConfig[];
|
|
38
|
+
errors: Array<{
|
|
39
|
+
filePath: string;
|
|
40
|
+
error: string;
|
|
41
|
+
}>;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Load all configuration (endpoints and flows) and validate cross-references
|
|
45
|
+
*/
|
|
46
|
+
load(): Promise<ConfigLoadResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Reload configuration (used for hot reload)
|
|
49
|
+
*/
|
|
50
|
+
reload(): Promise<ConfigLoadResult>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create a new ConfigLoader instance
|
|
54
|
+
*/
|
|
55
|
+
export declare function createConfigLoader(configPath: string): ConfigLoader;
|
|
56
|
+
//# sourceMappingURL=config-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAatE,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,YAAY,CAAC;AAEjE;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAS;gBAEb,UAAU,EAAE,MAAM;IAO9B;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC;QAC7B,SAAS,EAAE,cAAc,EAAE,CAAC;QAC5B,MAAM,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACpD,CAAC;IA4CF;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC;QACzB,KAAK,EAAE,UAAU,EAAE,CAAC;QACpB,MAAM,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACpD,CAAC;IA4CF;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA6CvC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAG1C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAEnE"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigLoader = void 0;
|
|
4
|
+
exports.createConfigLoader = createConfigLoader;
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const index_js_1 = require("../schemas/index.js");
|
|
7
|
+
const file_loader_js_1 = require("./file-loader.js");
|
|
8
|
+
const config_discovery_js_1 = require("./config-discovery.js");
|
|
9
|
+
/**
|
|
10
|
+
* Configuration loader that discovers and loads endpoint and flow configs
|
|
11
|
+
*/
|
|
12
|
+
class ConfigLoader {
|
|
13
|
+
constructor(configPath) {
|
|
14
|
+
this.configPath = (0, path_1.resolve)(configPath);
|
|
15
|
+
const dirs = (0, config_discovery_js_1.getConfigDirectories)(this.configPath);
|
|
16
|
+
this.endpointsDir = dirs.endpointsDir;
|
|
17
|
+
this.flowsDir = dirs.flowsDir;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get the resolved config path
|
|
21
|
+
*/
|
|
22
|
+
getConfigPath() {
|
|
23
|
+
return this.configPath;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get the endpoints directory path
|
|
27
|
+
*/
|
|
28
|
+
getEndpointsDir() {
|
|
29
|
+
return this.endpointsDir;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the flows directory path
|
|
33
|
+
*/
|
|
34
|
+
getFlowsDir() {
|
|
35
|
+
return this.flowsDir;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Load all endpoint configurations from the endpoints directory
|
|
39
|
+
*/
|
|
40
|
+
async loadEndpoints() {
|
|
41
|
+
const endpoints = [];
|
|
42
|
+
const errors = [];
|
|
43
|
+
if (!(await (0, config_discovery_js_1.directoryExists)(this.endpointsDir))) {
|
|
44
|
+
return { endpoints, errors };
|
|
45
|
+
}
|
|
46
|
+
const files = await (0, config_discovery_js_1.discoverConfigFiles)(this.endpointsDir, { recursive: true });
|
|
47
|
+
for (const filePath of files) {
|
|
48
|
+
const loadResult = await (0, file_loader_js_1.loadConfigFile)(filePath);
|
|
49
|
+
if (!loadResult.success) {
|
|
50
|
+
errors.push({
|
|
51
|
+
filePath,
|
|
52
|
+
error: loadResult.error || 'Unknown error loading file',
|
|
53
|
+
});
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
// Handle both single endpoint and array of endpoints
|
|
57
|
+
const configs = Array.isArray(loadResult.data)
|
|
58
|
+
? loadResult.data
|
|
59
|
+
: [loadResult.data];
|
|
60
|
+
for (const config of configs) {
|
|
61
|
+
const validationResult = (0, index_js_1.validateEndpoint)(config, filePath);
|
|
62
|
+
if (!validationResult.success) {
|
|
63
|
+
errors.push({
|
|
64
|
+
filePath,
|
|
65
|
+
error: (0, index_js_1.formatValidationErrors)(validationResult.errors),
|
|
66
|
+
});
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
endpoints.push(validationResult.data);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return { endpoints, errors };
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Load all flow configurations from the flows directory
|
|
76
|
+
*/
|
|
77
|
+
async loadFlows() {
|
|
78
|
+
const flows = [];
|
|
79
|
+
const errors = [];
|
|
80
|
+
if (!(await (0, config_discovery_js_1.directoryExists)(this.flowsDir))) {
|
|
81
|
+
return { flows, errors };
|
|
82
|
+
}
|
|
83
|
+
const files = await (0, config_discovery_js_1.discoverConfigFiles)(this.flowsDir, { recursive: true });
|
|
84
|
+
for (const filePath of files) {
|
|
85
|
+
const loadResult = await (0, file_loader_js_1.loadConfigFile)(filePath);
|
|
86
|
+
if (!loadResult.success) {
|
|
87
|
+
errors.push({
|
|
88
|
+
filePath,
|
|
89
|
+
error: loadResult.error || 'Unknown error loading file',
|
|
90
|
+
});
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// Handle both single flow and array of flows
|
|
94
|
+
const configs = Array.isArray(loadResult.data)
|
|
95
|
+
? loadResult.data
|
|
96
|
+
: [loadResult.data];
|
|
97
|
+
for (const config of configs) {
|
|
98
|
+
const validationResult = (0, index_js_1.validateFlow)(config, filePath);
|
|
99
|
+
if (!validationResult.success) {
|
|
100
|
+
errors.push({
|
|
101
|
+
filePath,
|
|
102
|
+
error: (0, index_js_1.formatValidationErrors)(validationResult.errors),
|
|
103
|
+
});
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
flows.push(validationResult.data);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return { flows, errors };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Load all configuration (endpoints and flows) and validate cross-references
|
|
113
|
+
*/
|
|
114
|
+
async load() {
|
|
115
|
+
const errors = [];
|
|
116
|
+
// Load endpoints
|
|
117
|
+
const endpointResult = await this.loadEndpoints();
|
|
118
|
+
errors.push(...endpointResult.errors);
|
|
119
|
+
// Load flows
|
|
120
|
+
const flowResult = await this.loadFlows();
|
|
121
|
+
errors.push(...flowResult.errors);
|
|
122
|
+
// If there were file-level errors, return early
|
|
123
|
+
if (errors.length > 0) {
|
|
124
|
+
return {
|
|
125
|
+
success: false,
|
|
126
|
+
errors,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// Validate cross-references and uniqueness
|
|
130
|
+
const validationResult = (0, index_js_1.validateConfiguration)(endpointResult.endpoints, flowResult.flows);
|
|
131
|
+
if (!validationResult.success) {
|
|
132
|
+
return {
|
|
133
|
+
success: false,
|
|
134
|
+
errors: validationResult.errors.map((err) => ({
|
|
135
|
+
filePath: err.path || 'configuration',
|
|
136
|
+
error: err.message,
|
|
137
|
+
})),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
success: true,
|
|
142
|
+
config: {
|
|
143
|
+
endpoints: endpointResult.endpoints,
|
|
144
|
+
flows: flowResult.flows,
|
|
145
|
+
},
|
|
146
|
+
errors: [],
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Reload configuration (used for hot reload)
|
|
151
|
+
*/
|
|
152
|
+
async reload() {
|
|
153
|
+
return this.load();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.ConfigLoader = ConfigLoader;
|
|
157
|
+
/**
|
|
158
|
+
* Create a new ConfigLoader instance
|
|
159
|
+
*/
|
|
160
|
+
function createConfigLoader(configPath) {
|
|
161
|
+
return new ConfigLoader(configPath);
|
|
162
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config file writer - handles persisting endpoint and flow configs to disk
|
|
3
|
+
*/
|
|
4
|
+
import type { EndpointConfig, FlowConfig } from '../schemas/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Result of a write operation
|
|
7
|
+
*/
|
|
8
|
+
export interface WriteResult {
|
|
9
|
+
success: boolean;
|
|
10
|
+
filePath?: string;
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Options for ConfigWriter
|
|
15
|
+
*/
|
|
16
|
+
export interface ConfigWriterOptions {
|
|
17
|
+
/** Directory for endpoint config files */
|
|
18
|
+
endpointsDir: string;
|
|
19
|
+
/** Directory for flow config files */
|
|
20
|
+
flowsDir: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* ConfigWriter handles persisting endpoint and flow configurations to disk
|
|
24
|
+
*/
|
|
25
|
+
export declare class ConfigWriter {
|
|
26
|
+
private endpointsDir;
|
|
27
|
+
private flowsDir;
|
|
28
|
+
constructor(options: ConfigWriterOptions);
|
|
29
|
+
/**
|
|
30
|
+
* Get the file path for an endpoint config
|
|
31
|
+
*/
|
|
32
|
+
getEndpointFilePath(endpointId: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Get the file path for a flow config
|
|
35
|
+
*/
|
|
36
|
+
getFlowFilePath(flowId: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Check if an endpoint file exists
|
|
39
|
+
*/
|
|
40
|
+
endpointExists(endpointId: string): Promise<boolean>;
|
|
41
|
+
/**
|
|
42
|
+
* Check if a flow file exists
|
|
43
|
+
*/
|
|
44
|
+
flowExists(flowId: string): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Find an existing endpoint file by ID (could be .json, .js, or .ts)
|
|
47
|
+
*/
|
|
48
|
+
findEndpointFile(endpointId: string): Promise<string | null>;
|
|
49
|
+
/**
|
|
50
|
+
* Find an existing flow file by ID (could be .json, .js, or .ts)
|
|
51
|
+
*/
|
|
52
|
+
findFlowFile(flowId: string): Promise<string | null>;
|
|
53
|
+
/**
|
|
54
|
+
* Validate an endpoint config
|
|
55
|
+
*/
|
|
56
|
+
validateEndpoint(data: unknown): {
|
|
57
|
+
success: boolean;
|
|
58
|
+
data?: EndpointConfig;
|
|
59
|
+
error?: string;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Validate a flow config
|
|
63
|
+
*/
|
|
64
|
+
validateFlow(data: unknown): {
|
|
65
|
+
success: boolean;
|
|
66
|
+
data?: FlowConfig;
|
|
67
|
+
error?: string;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Write an endpoint config to disk
|
|
71
|
+
* Creates a new file or overwrites existing .json file
|
|
72
|
+
*/
|
|
73
|
+
writeEndpoint(endpoint: EndpointConfig): Promise<WriteResult>;
|
|
74
|
+
/**
|
|
75
|
+
* Write a flow config to disk
|
|
76
|
+
*/
|
|
77
|
+
writeFlow(flow: FlowConfig): Promise<WriteResult>;
|
|
78
|
+
/**
|
|
79
|
+
* Delete an endpoint file
|
|
80
|
+
*/
|
|
81
|
+
deleteEndpoint(endpointId: string): Promise<WriteResult>;
|
|
82
|
+
/**
|
|
83
|
+
* Delete a flow file
|
|
84
|
+
*/
|
|
85
|
+
deleteFlow(flowId: string): Promise<WriteResult>;
|
|
86
|
+
/**
|
|
87
|
+
* Clean endpoint data for JSON serialization
|
|
88
|
+
* Converts function bodies to null (they can't be serialized)
|
|
89
|
+
*/
|
|
90
|
+
private cleanEndpointForJson;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Create a ConfigWriter instance
|
|
94
|
+
*/
|
|
95
|
+
export declare function createConfigWriter(options: ConfigWriterOptions): ConfigWriter;
|
|
96
|
+
//# sourceMappingURL=config-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-writer.d.ts","sourceRoot":"","sources":["../../src/config/config-writer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,mBAAmB;IAKxC;;OAEG;IACH,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAI/C;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU1D;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUlD;;OAEG;IACG,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAclE;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAc1D;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,cAAc,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAS5F;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IASpF;;;OAGG;IACG,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAuBnE;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBvD;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAkB9D;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAkBtD;;;OAGG;IACH,OAAO,CAAC,oBAAoB;CAU7B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAE7E"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Config file writer - handles persisting endpoint and flow configs to disk
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ConfigWriter = void 0;
|
|
40
|
+
exports.createConfigWriter = createConfigWriter;
|
|
41
|
+
const fs = __importStar(require("fs/promises"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const index_js_1 = require("../schemas/index.js");
|
|
44
|
+
/**
|
|
45
|
+
* ConfigWriter handles persisting endpoint and flow configurations to disk
|
|
46
|
+
*/
|
|
47
|
+
class ConfigWriter {
|
|
48
|
+
constructor(options) {
|
|
49
|
+
this.endpointsDir = options.endpointsDir;
|
|
50
|
+
this.flowsDir = options.flowsDir;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the file path for an endpoint config
|
|
54
|
+
*/
|
|
55
|
+
getEndpointFilePath(endpointId) {
|
|
56
|
+
return path.join(this.endpointsDir, `${endpointId}.json`);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get the file path for a flow config
|
|
60
|
+
*/
|
|
61
|
+
getFlowFilePath(flowId) {
|
|
62
|
+
return path.join(this.flowsDir, `${flowId}.json`);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check if an endpoint file exists
|
|
66
|
+
*/
|
|
67
|
+
async endpointExists(endpointId) {
|
|
68
|
+
const filePath = this.getEndpointFilePath(endpointId);
|
|
69
|
+
try {
|
|
70
|
+
await fs.access(filePath);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check if a flow file exists
|
|
79
|
+
*/
|
|
80
|
+
async flowExists(flowId) {
|
|
81
|
+
const filePath = this.getFlowFilePath(flowId);
|
|
82
|
+
try {
|
|
83
|
+
await fs.access(filePath);
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Find an existing endpoint file by ID (could be .json, .js, or .ts)
|
|
92
|
+
*/
|
|
93
|
+
async findEndpointFile(endpointId) {
|
|
94
|
+
const extensions = ['.json', '.js', '.ts', '.mjs', '.mts'];
|
|
95
|
+
for (const ext of extensions) {
|
|
96
|
+
const filePath = path.join(this.endpointsDir, `${endpointId}${ext}`);
|
|
97
|
+
try {
|
|
98
|
+
await fs.access(filePath);
|
|
99
|
+
return filePath;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Continue checking
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Find an existing flow file by ID (could be .json, .js, or .ts)
|
|
109
|
+
*/
|
|
110
|
+
async findFlowFile(flowId) {
|
|
111
|
+
const extensions = ['.json', '.js', '.ts', '.mjs', '.mts'];
|
|
112
|
+
for (const ext of extensions) {
|
|
113
|
+
const filePath = path.join(this.flowsDir, `${flowId}${ext}`);
|
|
114
|
+
try {
|
|
115
|
+
await fs.access(filePath);
|
|
116
|
+
return filePath;
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Continue checking
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Validate an endpoint config
|
|
126
|
+
*/
|
|
127
|
+
validateEndpoint(data) {
|
|
128
|
+
const result = index_js_1.EndpointConfigSchema.safeParse(data);
|
|
129
|
+
if (result.success) {
|
|
130
|
+
return { success: true, data: result.data };
|
|
131
|
+
}
|
|
132
|
+
const errors = result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');
|
|
133
|
+
return { success: false, error: errors };
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Validate a flow config
|
|
137
|
+
*/
|
|
138
|
+
validateFlow(data) {
|
|
139
|
+
const result = index_js_1.FlowConfigSchema.safeParse(data);
|
|
140
|
+
if (result.success) {
|
|
141
|
+
return { success: true, data: result.data };
|
|
142
|
+
}
|
|
143
|
+
const errors = result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');
|
|
144
|
+
return { success: false, error: errors };
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Write an endpoint config to disk
|
|
148
|
+
* Creates a new file or overwrites existing .json file
|
|
149
|
+
*/
|
|
150
|
+
async writeEndpoint(endpoint) {
|
|
151
|
+
const filePath = this.getEndpointFilePath(endpoint.id);
|
|
152
|
+
try {
|
|
153
|
+
// Ensure directory exists
|
|
154
|
+
await fs.mkdir(this.endpointsDir, { recursive: true });
|
|
155
|
+
// Prepare clean endpoint data (remove function bodies for JSON)
|
|
156
|
+
const cleanEndpoint = this.cleanEndpointForJson(endpoint);
|
|
157
|
+
// Write formatted JSON
|
|
158
|
+
const content = JSON.stringify(cleanEndpoint, null, 2) + '\n';
|
|
159
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
160
|
+
return { success: true, filePath };
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
return {
|
|
164
|
+
success: false,
|
|
165
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Write a flow config to disk
|
|
171
|
+
*/
|
|
172
|
+
async writeFlow(flow) {
|
|
173
|
+
const filePath = this.getFlowFilePath(flow.id);
|
|
174
|
+
try {
|
|
175
|
+
// Ensure directory exists
|
|
176
|
+
await fs.mkdir(this.flowsDir, { recursive: true });
|
|
177
|
+
// Write formatted JSON
|
|
178
|
+
const content = JSON.stringify(flow, null, 2) + '\n';
|
|
179
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
180
|
+
return { success: true, filePath };
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
return {
|
|
184
|
+
success: false,
|
|
185
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Delete an endpoint file
|
|
191
|
+
*/
|
|
192
|
+
async deleteEndpoint(endpointId) {
|
|
193
|
+
const existingFile = await this.findEndpointFile(endpointId);
|
|
194
|
+
if (!existingFile) {
|
|
195
|
+
return { success: false, error: `Endpoint "${endpointId}" not found` };
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
await fs.unlink(existingFile);
|
|
199
|
+
return { success: true, filePath: existingFile };
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
return {
|
|
203
|
+
success: false,
|
|
204
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Delete a flow file
|
|
210
|
+
*/
|
|
211
|
+
async deleteFlow(flowId) {
|
|
212
|
+
const existingFile = await this.findFlowFile(flowId);
|
|
213
|
+
if (!existingFile) {
|
|
214
|
+
return { success: false, error: `Flow "${flowId}" not found` };
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
await fs.unlink(existingFile);
|
|
218
|
+
return { success: true, filePath: existingFile };
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
return {
|
|
222
|
+
success: false,
|
|
223
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Clean endpoint data for JSON serialization
|
|
229
|
+
* Converts function bodies to null (they can't be serialized)
|
|
230
|
+
*/
|
|
231
|
+
cleanEndpointForJson(endpoint) {
|
|
232
|
+
return {
|
|
233
|
+
...endpoint,
|
|
234
|
+
scenarios: endpoint.scenarios.map((scenario) => ({
|
|
235
|
+
...scenario,
|
|
236
|
+
// If body is a function, convert to a placeholder or keep as-is for objects
|
|
237
|
+
body: typeof scenario.body === 'function' ? { _note: 'Function body - edit in .ts file' } : scenario.body,
|
|
238
|
+
})),
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
exports.ConfigWriter = ConfigWriter;
|
|
243
|
+
/**
|
|
244
|
+
* Create a ConfigWriter instance
|
|
245
|
+
*/
|
|
246
|
+
function createConfigWriter(options) {
|
|
247
|
+
return new ConfigWriter(options);
|
|
248
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-writer.js","sourceRoot":"","sources":["../../src/config/config-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { FileLoadResult, SupportedExtension } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Check if a file extension is supported
|
|
4
|
+
*/
|
|
5
|
+
export declare function isSupportedExtension(ext: string): ext is SupportedExtension;
|
|
6
|
+
/**
|
|
7
|
+
* Load a single configuration file
|
|
8
|
+
* Supports .json, .js, .ts, .mjs, .mts extensions
|
|
9
|
+
*/
|
|
10
|
+
export declare function loadConfigFile<T>(filePath: string): Promise<FileLoadResult<T>>;
|
|
11
|
+
/**
|
|
12
|
+
* Clear the jiti module cache for a specific file
|
|
13
|
+
* Used during hot reload to ensure fresh imports
|
|
14
|
+
*/
|
|
15
|
+
export declare function clearModuleCache(filePath: string): void;
|
|
16
|
+
//# sourceMappingURL=file-loader.d.ts.map
|