@masuidrive/procman 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +149 -0
- package/dist/src/cli/commands/clear-log.d.ts +10 -0
- package/dist/src/cli/commands/clear-log.d.ts.map +1 -0
- package/dist/src/cli/commands/clear-log.js +77 -0
- package/dist/src/cli/commands/clear-log.js.map +1 -0
- package/dist/src/cli/commands/exit.d.ts +10 -0
- package/dist/src/cli/commands/exit.d.ts.map +1 -0
- package/dist/src/cli/commands/exit.js +65 -0
- package/dist/src/cli/commands/exit.js.map +1 -0
- package/dist/src/cli/commands/help.d.ts +10 -0
- package/dist/src/cli/commands/help.d.ts.map +1 -0
- package/dist/src/cli/commands/help.js +340 -0
- package/dist/src/cli/commands/help.js.map +1 -0
- package/dist/src/cli/commands/list.d.ts +11 -0
- package/dist/src/cli/commands/list.d.ts.map +1 -0
- package/dist/src/cli/commands/list.js +130 -0
- package/dist/src/cli/commands/list.js.map +1 -0
- package/dist/src/cli/commands/load.d.ts +11 -0
- package/dist/src/cli/commands/load.d.ts.map +1 -0
- package/dist/src/cli/commands/load.js +250 -0
- package/dist/src/cli/commands/load.js.map +1 -0
- package/dist/src/cli/commands/log.d.ts +18 -0
- package/dist/src/cli/commands/log.d.ts.map +1 -0
- package/dist/src/cli/commands/log.js +282 -0
- package/dist/src/cli/commands/log.js.map +1 -0
- package/dist/src/cli/commands/restart.d.ts +11 -0
- package/dist/src/cli/commands/restart.d.ts.map +1 -0
- package/dist/src/cli/commands/restart.js +99 -0
- package/dist/src/cli/commands/restart.js.map +1 -0
- package/dist/src/cli/commands/start.d.ts +11 -0
- package/dist/src/cli/commands/start.d.ts.map +1 -0
- package/dist/src/cli/commands/start.js +105 -0
- package/dist/src/cli/commands/start.js.map +1 -0
- package/dist/src/cli/commands/stop.d.ts +12 -0
- package/dist/src/cli/commands/stop.d.ts.map +1 -0
- package/dist/src/cli/commands/stop.js +105 -0
- package/dist/src/cli/commands/stop.js.map +1 -0
- package/dist/src/cli/index.d.ts +3 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +28 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/parser.d.ts +14 -0
- package/dist/src/cli/parser.d.ts.map +1 -0
- package/dist/src/cli/parser.js +131 -0
- package/dist/src/cli/parser.js.map +1 -0
- package/dist/src/cli/signal-handler.d.ts +51 -0
- package/dist/src/cli/signal-handler.d.ts.map +1 -0
- package/dist/src/cli/signal-handler.js +129 -0
- package/dist/src/cli/signal-handler.js.map +1 -0
- package/dist/src/cli/utils/error-handler.d.ts +39 -0
- package/dist/src/cli/utils/error-handler.d.ts.map +1 -0
- package/dist/src/cli/utils/error-handler.js +200 -0
- package/dist/src/cli/utils/error-handler.js.map +1 -0
- package/dist/src/cli/utils/error-utils.d.ts +16 -0
- package/dist/src/cli/utils/error-utils.d.ts.map +1 -0
- package/dist/src/cli/utils/error-utils.js +48 -0
- package/dist/src/cli/utils/error-utils.js.map +1 -0
- package/dist/src/cli/utils/ipc-client.d.ts +80 -0
- package/dist/src/cli/utils/ipc-client.d.ts.map +1 -0
- package/dist/src/cli/utils/ipc-client.js +275 -0
- package/dist/src/cli/utils/ipc-client.js.map +1 -0
- package/dist/src/config/config-loader.d.ts +74 -0
- package/dist/src/config/config-loader.d.ts.map +1 -0
- package/dist/src/config/config-loader.js +229 -0
- package/dist/src/config/config-loader.js.map +1 -0
- package/dist/src/config/config-normalizer.d.ts +135 -0
- package/dist/src/config/config-normalizer.d.ts.map +1 -0
- package/dist/src/config/config-normalizer.js +309 -0
- package/dist/src/config/config-normalizer.js.map +1 -0
- package/dist/src/config/config-reporter.d.ts +183 -0
- package/dist/src/config/config-reporter.d.ts.map +1 -0
- package/dist/src/config/config-reporter.js +311 -0
- package/dist/src/config/config-reporter.js.map +1 -0
- package/dist/src/config/config-validator.d.ts +163 -0
- package/dist/src/config/config-validator.d.ts.map +1 -0
- package/dist/src/config/config-validator.js +489 -0
- package/dist/src/config/config-validator.js.map +1 -0
- package/dist/src/config/config-watcher.d.ts +161 -0
- package/dist/src/config/config-watcher.d.ts.map +1 -0
- package/dist/src/config/config-watcher.js +245 -0
- package/dist/src/config/config-watcher.js.map +1 -0
- package/dist/src/config/index.d.ts +36 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +41 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/config/secure-config-loader.d.ts +77 -0
- package/dist/src/config/secure-config-loader.d.ts.map +1 -0
- package/dist/src/config/secure-config-loader.js +326 -0
- package/dist/src/config/secure-config-loader.js.map +1 -0
- package/dist/src/daemon/base-socket-connection.d.ts +66 -0
- package/dist/src/daemon/base-socket-connection.d.ts.map +1 -0
- package/dist/src/daemon/base-socket-connection.js +192 -0
- package/dist/src/daemon/base-socket-connection.js.map +1 -0
- package/dist/src/daemon/component-manager.d.ts +180 -0
- package/dist/src/daemon/component-manager.d.ts.map +1 -0
- package/dist/src/daemon/component-manager.js +794 -0
- package/dist/src/daemon/component-manager.js.map +1 -0
- package/dist/src/daemon/crash-recovery.d.ts +71 -0
- package/dist/src/daemon/crash-recovery.d.ts.map +1 -0
- package/dist/src/daemon/crash-recovery.js +282 -0
- package/dist/src/daemon/crash-recovery.js.map +1 -0
- package/dist/src/daemon/daemon-main.d.ts +18 -0
- package/dist/src/daemon/daemon-main.d.ts.map +1 -0
- package/dist/src/daemon/daemon-main.js +160 -0
- package/dist/src/daemon/daemon-main.js.map +1 -0
- package/dist/src/daemon/daemon-state-manager.d.ts +111 -0
- package/dist/src/daemon/daemon-state-manager.d.ts.map +1 -0
- package/dist/src/daemon/daemon-state-manager.js +194 -0
- package/dist/src/daemon/daemon-state-manager.js.map +1 -0
- package/dist/src/daemon/data-directory.d.ts +51 -0
- package/dist/src/daemon/data-directory.d.ts.map +1 -0
- package/dist/src/daemon/data-directory.js +136 -0
- package/dist/src/daemon/data-directory.js.map +1 -0
- package/dist/src/daemon/index.d.ts +20 -0
- package/dist/src/daemon/index.d.ts.map +1 -0
- package/dist/src/daemon/index.js +24 -0
- package/dist/src/daemon/index.js.map +1 -0
- package/dist/src/daemon/ipc-client-base.d.ts +153 -0
- package/dist/src/daemon/ipc-client-base.d.ts.map +1 -0
- package/dist/src/daemon/ipc-client-base.js +476 -0
- package/dist/src/daemon/ipc-client-base.js.map +1 -0
- package/dist/src/daemon/ipc-command-handler.d.ts +107 -0
- package/dist/src/daemon/ipc-command-handler.d.ts.map +1 -0
- package/dist/src/daemon/ipc-command-handler.js +483 -0
- package/dist/src/daemon/ipc-command-handler.js.map +1 -0
- package/dist/src/daemon/ipc-factory.d.ts +92 -0
- package/dist/src/daemon/ipc-factory.d.ts.map +1 -0
- package/dist/src/daemon/ipc-factory.js +210 -0
- package/dist/src/daemon/ipc-factory.js.map +1 -0
- package/dist/src/daemon/ipc-server-base.d.ts +158 -0
- package/dist/src/daemon/ipc-server-base.d.ts.map +1 -0
- package/dist/src/daemon/ipc-server-base.js +491 -0
- package/dist/src/daemon/ipc-server-base.js.map +1 -0
- package/dist/src/daemon/message-protocol.d.ts +132 -0
- package/dist/src/daemon/message-protocol.d.ts.map +1 -0
- package/dist/src/daemon/message-protocol.js +252 -0
- package/dist/src/daemon/message-protocol.js.map +1 -0
- package/dist/src/daemon/named-pipe-client.d.ts +61 -0
- package/dist/src/daemon/named-pipe-client.d.ts.map +1 -0
- package/dist/src/daemon/named-pipe-client.js +221 -0
- package/dist/src/daemon/named-pipe-client.js.map +1 -0
- package/dist/src/daemon/named-pipe-server.d.ts +40 -0
- package/dist/src/daemon/named-pipe-server.d.ts.map +1 -0
- package/dist/src/daemon/named-pipe-server.js +102 -0
- package/dist/src/daemon/named-pipe-server.js.map +1 -0
- package/dist/src/daemon/orphan-detector.d.ts +66 -0
- package/dist/src/daemon/orphan-detector.d.ts.map +1 -0
- package/dist/src/daemon/orphan-detector.js +208 -0
- package/dist/src/daemon/orphan-detector.js.map +1 -0
- package/dist/src/daemon/pid-manager.d.ts +49 -0
- package/dist/src/daemon/pid-manager.d.ts.map +1 -0
- package/dist/src/daemon/pid-manager.js +110 -0
- package/dist/src/daemon/pid-manager.js.map +1 -0
- package/dist/src/daemon/procman-daemon.d.ts +188 -0
- package/dist/src/daemon/procman-daemon.d.ts.map +1 -0
- package/dist/src/daemon/procman-daemon.js +802 -0
- package/dist/src/daemon/procman-daemon.js.map +1 -0
- package/dist/src/daemon/reconnection-system.d.ts +113 -0
- package/dist/src/daemon/reconnection-system.d.ts.map +1 -0
- package/dist/src/daemon/reconnection-system.js +223 -0
- package/dist/src/daemon/reconnection-system.js.map +1 -0
- package/dist/src/daemon/resource-manager.d.ts +204 -0
- package/dist/src/daemon/resource-manager.d.ts.map +1 -0
- package/dist/src/daemon/resource-manager.js +423 -0
- package/dist/src/daemon/resource-manager.js.map +1 -0
- package/dist/src/daemon/signal-handler.d.ts +58 -0
- package/dist/src/daemon/signal-handler.d.ts.map +1 -0
- package/dist/src/daemon/signal-handler.js +142 -0
- package/dist/src/daemon/signal-handler.js.map +1 -0
- package/dist/src/daemon/simple-resource-manager.d.ts +95 -0
- package/dist/src/daemon/simple-resource-manager.d.ts.map +1 -0
- package/dist/src/daemon/simple-resource-manager.js +180 -0
- package/dist/src/daemon/simple-resource-manager.js.map +1 -0
- package/dist/src/daemon/unix-socket-client.d.ts +69 -0
- package/dist/src/daemon/unix-socket-client.d.ts.map +1 -0
- package/dist/src/daemon/unix-socket-client.js +313 -0
- package/dist/src/daemon/unix-socket-client.js.map +1 -0
- package/dist/src/daemon/unix-socket-server.d.ts +61 -0
- package/dist/src/daemon/unix-socket-server.d.ts.map +1 -0
- package/dist/src/daemon/unix-socket-server.js +262 -0
- package/dist/src/daemon/unix-socket-server.js.map +1 -0
- package/dist/src/daemon/zombie-reaper.d.ts +83 -0
- package/dist/src/daemon/zombie-reaper.d.ts.map +1 -0
- package/dist/src/daemon/zombie-reaper.js +278 -0
- package/dist/src/daemon/zombie-reaper.js.map +1 -0
- package/dist/src/process-manager/index.d.ts +13 -0
- package/dist/src/process-manager/index.d.ts.map +1 -0
- package/dist/src/process-manager/index.js +11 -0
- package/dist/src/process-manager/index.js.map +1 -0
- package/dist/src/process-manager/interfaces/index.d.ts +31 -0
- package/dist/src/process-manager/interfaces/index.d.ts.map +1 -0
- package/dist/src/process-manager/interfaces/index.js +14 -0
- package/dist/src/process-manager/interfaces/index.js.map +1 -0
- package/dist/src/process-manager/interfaces/process-group.d.ts +200 -0
- package/dist/src/process-manager/interfaces/process-group.d.ts.map +1 -0
- package/dist/src/process-manager/interfaces/process-group.js +10 -0
- package/dist/src/process-manager/interfaces/process-group.js.map +1 -0
- package/dist/src/process-manager/interfaces/process-lifecycle.d.ts +97 -0
- package/dist/src/process-manager/interfaces/process-lifecycle.d.ts.map +1 -0
- package/dist/src/process-manager/interfaces/process-lifecycle.js +10 -0
- package/dist/src/process-manager/interfaces/process-lifecycle.js.map +1 -0
- package/dist/src/process-manager/interfaces/process-monitor.d.ts +118 -0
- package/dist/src/process-manager/interfaces/process-monitor.d.ts.map +1 -0
- package/dist/src/process-manager/interfaces/process-monitor.js +10 -0
- package/dist/src/process-manager/interfaces/process-monitor.js.map +1 -0
- package/dist/src/process-manager/interfaces/process-persistence.d.ts +125 -0
- package/dist/src/process-manager/interfaces/process-persistence.d.ts.map +1 -0
- package/dist/src/process-manager/interfaces/process-persistence.js +10 -0
- package/dist/src/process-manager/interfaces/process-persistence.js.map +1 -0
- package/dist/src/process-manager/managed-process-info.d.ts +307 -0
- package/dist/src/process-manager/managed-process-info.d.ts.map +1 -0
- package/dist/src/process-manager/managed-process-info.js +650 -0
- package/dist/src/process-manager/managed-process-info.js.map +1 -0
- package/dist/src/process-manager/process-group-manager.d.ts +103 -0
- package/dist/src/process-manager/process-group-manager.d.ts.map +1 -0
- package/dist/src/process-manager/process-group-manager.js +400 -0
- package/dist/src/process-manager/process-group-manager.js.map +1 -0
- package/dist/src/process-manager/process-lifecycle-manager.d.ts +68 -0
- package/dist/src/process-manager/process-lifecycle-manager.d.ts.map +1 -0
- package/dist/src/process-manager/process-lifecycle-manager.js +372 -0
- package/dist/src/process-manager/process-lifecycle-manager.js.map +1 -0
- package/dist/src/process-manager/process-manager.d.ts +296 -0
- package/dist/src/process-manager/process-manager.d.ts.map +1 -0
- package/dist/src/process-manager/process-manager.js +659 -0
- package/dist/src/process-manager/process-manager.js.map +1 -0
- package/dist/src/process-manager/process-monitor.d.ts +95 -0
- package/dist/src/process-manager/process-monitor.d.ts.map +1 -0
- package/dist/src/process-manager/process-monitor.js +357 -0
- package/dist/src/process-manager/process-monitor.js.map +1 -0
- package/dist/src/process-manager/process-persistence.d.ts +68 -0
- package/dist/src/process-manager/process-persistence.d.ts.map +1 -0
- package/dist/src/process-manager/process-persistence.js +364 -0
- package/dist/src/process-manager/process-persistence.js.map +1 -0
- package/dist/src/process-manager/utils/mutex.d.ts +82 -0
- package/dist/src/process-manager/utils/mutex.d.ts.map +1 -0
- package/dist/src/process-manager/utils/mutex.js +172 -0
- package/dist/src/process-manager/utils/mutex.js.map +1 -0
- package/dist/src/services/index.d.ts +8 -0
- package/dist/src/services/index.d.ts.map +1 -0
- package/dist/src/services/index.js +8 -0
- package/dist/src/services/index.js.map +1 -0
- package/dist/src/services/log-manager-config.d.ts +65 -0
- package/dist/src/services/log-manager-config.d.ts.map +1 -0
- package/dist/src/services/log-manager-config.js +145 -0
- package/dist/src/services/log-manager-config.js.map +1 -0
- package/dist/src/services/log-manager-factory.d.ts +134 -0
- package/dist/src/services/log-manager-factory.d.ts.map +1 -0
- package/dist/src/services/log-manager-factory.js +203 -0
- package/dist/src/services/log-manager-factory.js.map +1 -0
- package/dist/src/services/log-manager.d.ts +170 -0
- package/dist/src/services/log-manager.d.ts.map +1 -0
- package/dist/src/services/log-manager.js +1199 -0
- package/dist/src/services/log-manager.js.map +1 -0
- package/dist/src/services/log-path-validator.d.ts +121 -0
- package/dist/src/services/log-path-validator.d.ts.map +1 -0
- package/dist/src/services/log-path-validator.js +302 -0
- package/dist/src/services/log-path-validator.js.map +1 -0
- package/dist/src/services/process-log-integration.d.ts +62 -0
- package/dist/src/services/process-log-integration.d.ts.map +1 -0
- package/dist/src/services/process-log-integration.js +157 -0
- package/dist/src/services/process-log-integration.js.map +1 -0
- package/dist/src/shared/config.d.ts +67 -0
- package/dist/src/shared/config.d.ts.map +1 -0
- package/dist/src/shared/config.js +92 -0
- package/dist/src/shared/config.js.map +1 -0
- package/dist/src/shared/constants-streaming.d.ts +39 -0
- package/dist/src/shared/constants-streaming.d.ts.map +1 -0
- package/dist/src/shared/constants-streaming.js +39 -0
- package/dist/src/shared/constants-streaming.js.map +1 -0
- package/dist/src/shared/constants.d.ts +60 -0
- package/dist/src/shared/constants.d.ts.map +1 -0
- package/dist/src/shared/constants.js +71 -0
- package/dist/src/shared/constants.js.map +1 -0
- package/dist/src/shared/errors.d.ts +70 -0
- package/dist/src/shared/errors.d.ts.map +1 -0
- package/dist/src/shared/errors.js +101 -0
- package/dist/src/shared/errors.js.map +1 -0
- package/dist/src/shared/index.d.ts +14 -0
- package/dist/src/shared/index.d.ts.map +1 -0
- package/dist/src/shared/index.js +22 -0
- package/dist/src/shared/index.js.map +1 -0
- package/dist/src/shared/ipc.d.ts +402 -0
- package/dist/src/shared/ipc.d.ts.map +1 -0
- package/dist/src/shared/ipc.js +85 -0
- package/dist/src/shared/ipc.js.map +1 -0
- package/dist/src/shared/logger.d.ts +38 -0
- package/dist/src/shared/logger.d.ts.map +1 -0
- package/dist/src/shared/logger.js +139 -0
- package/dist/src/shared/logger.js.map +1 -0
- package/dist/src/shared/logs.d.ts +53 -0
- package/dist/src/shared/logs.d.ts.map +1 -0
- package/dist/src/shared/logs.js +26 -0
- package/dist/src/shared/logs.js.map +1 -0
- package/dist/src/shared/process.d.ts +102 -0
- package/dist/src/shared/process.d.ts.map +1 -0
- package/dist/src/shared/process.js +55 -0
- package/dist/src/shared/process.js.map +1 -0
- package/dist/src/shared/types.d.ts +15 -0
- package/dist/src/shared/types.d.ts.map +1 -0
- package/dist/src/shared/types.js +8 -0
- package/dist/src/shared/types.js.map +1 -0
- package/dist/src/types/index.d.ts +19 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +5 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/utils/event-cleanup.d.ts +30 -0
- package/dist/src/utils/event-cleanup.d.ts.map +1 -0
- package/dist/src/utils/event-cleanup.js +32 -0
- package/dist/src/utils/event-cleanup.js.map +1 -0
- package/dist/src/utils/memory/memory-monitor.d.ts +126 -0
- package/dist/src/utils/memory/memory-monitor.d.ts.map +1 -0
- package/dist/src/utils/memory/memory-monitor.js +246 -0
- package/dist/src/utils/memory/memory-monitor.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Reporter
|
|
3
|
+
*
|
|
4
|
+
* Handles reporting logic for procman configuration validation.
|
|
5
|
+
* Provides detailed validation reports and error tracking.
|
|
6
|
+
*/
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import { ProcmanError } from '../shared/errors.js';
|
|
9
|
+
/**
|
|
10
|
+
* Configuration reporter class
|
|
11
|
+
* Responsible for generating validation reports and error messages
|
|
12
|
+
*/
|
|
13
|
+
export class ConfigReporter {
|
|
14
|
+
includeSuggestions;
|
|
15
|
+
maxIssues;
|
|
16
|
+
validationIssues = [];
|
|
17
|
+
lastReport = null;
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
this.includeSuggestions = options.includeSuggestions !== false;
|
|
20
|
+
this.maxIssues = options.maxIssues || 100;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate validation report for configuration
|
|
24
|
+
* @param config Validated configuration (or null if validation failed)
|
|
25
|
+
* @param filePath Path to configuration file
|
|
26
|
+
* @param issues Array of validation issues
|
|
27
|
+
* @returns Validation report
|
|
28
|
+
*/
|
|
29
|
+
generateReport(config, filePath, issues = []) {
|
|
30
|
+
const absolutePath = path.resolve(filePath);
|
|
31
|
+
this.validationIssues = [...issues];
|
|
32
|
+
const report = {
|
|
33
|
+
success: config !== null,
|
|
34
|
+
filePath: absolutePath,
|
|
35
|
+
appCount: config?.apps.length || 0,
|
|
36
|
+
issues: [...this.validationIssues],
|
|
37
|
+
summary: this.calculateSummary(this.validationIssues),
|
|
38
|
+
apps: [],
|
|
39
|
+
};
|
|
40
|
+
if (config) {
|
|
41
|
+
// Generate app summaries
|
|
42
|
+
report.apps = config.apps.map((app) => ({
|
|
43
|
+
name: app.name,
|
|
44
|
+
script: app.script,
|
|
45
|
+
memoryLimit: app.max_memory_restart,
|
|
46
|
+
hasEnvVars: !!app.env && Object.keys(app.env).length > 0,
|
|
47
|
+
hasLogFiles: !!(app.log_file || app.out_file || app.error_file),
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
this.lastReport = report;
|
|
51
|
+
return report;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Generate report from validation attempt
|
|
55
|
+
* @param filePath Path to configuration file
|
|
56
|
+
* @param validationFunction Function that performs validation
|
|
57
|
+
* @returns Validation report
|
|
58
|
+
*/
|
|
59
|
+
async generateReportFromValidation(filePath, validationFunction) {
|
|
60
|
+
const absolutePath = path.resolve(filePath);
|
|
61
|
+
this.validationIssues = [];
|
|
62
|
+
const report = {
|
|
63
|
+
success: false,
|
|
64
|
+
filePath: absolutePath,
|
|
65
|
+
appCount: 0,
|
|
66
|
+
issues: [],
|
|
67
|
+
summary: { errors: 0, warnings: 0, infos: 0 },
|
|
68
|
+
apps: [],
|
|
69
|
+
};
|
|
70
|
+
try {
|
|
71
|
+
const config = await validationFunction();
|
|
72
|
+
// Generate app summaries
|
|
73
|
+
report.appCount = config.apps.length;
|
|
74
|
+
report.apps = config.apps.map((app) => ({
|
|
75
|
+
name: app.name,
|
|
76
|
+
script: app.script,
|
|
77
|
+
memoryLimit: app.max_memory_restart,
|
|
78
|
+
hasEnvVars: !!app.env && Object.keys(app.env).length > 0,
|
|
79
|
+
hasLogFiles: !!(app.log_file || app.out_file || app.error_file),
|
|
80
|
+
}));
|
|
81
|
+
report.success = true;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
// Add error to issues
|
|
85
|
+
if (error instanceof ProcmanError) {
|
|
86
|
+
this.addValidationIssue({
|
|
87
|
+
severity: 'error',
|
|
88
|
+
category: 'structure',
|
|
89
|
+
message: error.message,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.addValidationIssue({
|
|
94
|
+
severity: 'error',
|
|
95
|
+
category: 'structure',
|
|
96
|
+
message: `Unexpected error: ${error instanceof Error ? error.message : String(error)}`,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Add collected issues to report
|
|
101
|
+
report.issues = [...this.validationIssues];
|
|
102
|
+
// Calculate summary
|
|
103
|
+
report.summary = this.calculateSummary(report.issues);
|
|
104
|
+
this.lastReport = report;
|
|
105
|
+
return report;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Add validation issue to collection
|
|
109
|
+
* @param issue Validation issue to add
|
|
110
|
+
*/
|
|
111
|
+
addValidationIssue(issue) {
|
|
112
|
+
if (this.validationIssues.length < this.maxIssues) {
|
|
113
|
+
this.validationIssues.push(issue);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get collected validation issues
|
|
118
|
+
* @returns Array of validation issues
|
|
119
|
+
*/
|
|
120
|
+
getValidationIssues() {
|
|
121
|
+
return [...this.validationIssues];
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Clear collected validation issues
|
|
125
|
+
*/
|
|
126
|
+
clearValidationIssues() {
|
|
127
|
+
this.validationIssues = [];
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get last validation report
|
|
131
|
+
* @returns Last validation report or null
|
|
132
|
+
*/
|
|
133
|
+
getLastReport() {
|
|
134
|
+
return this.lastReport;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Calculate summary statistics from issues
|
|
138
|
+
* @param issues Array of validation issues
|
|
139
|
+
* @returns Summary object with counts
|
|
140
|
+
*/
|
|
141
|
+
calculateSummary(issues) {
|
|
142
|
+
const summary = { errors: 0, warnings: 0, infos: 0 };
|
|
143
|
+
for (const issue of issues) {
|
|
144
|
+
switch (issue.severity) {
|
|
145
|
+
case 'error':
|
|
146
|
+
summary.errors++;
|
|
147
|
+
break;
|
|
148
|
+
case 'warning':
|
|
149
|
+
summary.warnings++;
|
|
150
|
+
break;
|
|
151
|
+
case 'info':
|
|
152
|
+
summary.infos++;
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return summary;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Create enhanced validation error with suggestions
|
|
160
|
+
* @param originalError Original error
|
|
161
|
+
* @param issues Validation issues
|
|
162
|
+
* @returns Enhanced validation error
|
|
163
|
+
*/
|
|
164
|
+
createEnhancedValidationError(originalError, issues = []) {
|
|
165
|
+
const suggestions = this.includeSuggestions
|
|
166
|
+
? this.generateSuggestions(originalError.code, originalError.details?.field)
|
|
167
|
+
: [];
|
|
168
|
+
const enhancedError = originalError;
|
|
169
|
+
enhancedError.suggestions = suggestions;
|
|
170
|
+
enhancedError.validationIssues = [...issues];
|
|
171
|
+
return enhancedError;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Generate suggestions for validation errors
|
|
175
|
+
* @param errorCode Error code
|
|
176
|
+
* @param field Field name (optional)
|
|
177
|
+
* @returns Array of suggestions
|
|
178
|
+
*/
|
|
179
|
+
generateSuggestions(errorCode, field) {
|
|
180
|
+
const suggestions = [];
|
|
181
|
+
switch (errorCode) {
|
|
182
|
+
case 'CONFIG_VALIDATION_ERROR':
|
|
183
|
+
if (field === 'name') {
|
|
184
|
+
suggestions.push('Use only alphanumeric characters, dashes, and underscores');
|
|
185
|
+
suggestions.push('Ensure the name is unique across all apps');
|
|
186
|
+
}
|
|
187
|
+
else if (field === 'script') {
|
|
188
|
+
suggestions.push('Provide the full command to execute');
|
|
189
|
+
suggestions.push('Use absolute paths for executables if needed');
|
|
190
|
+
}
|
|
191
|
+
else if (field === 'max_memory_restart') {
|
|
192
|
+
suggestions.push('Use format like "300M", "1G", or "512000K"');
|
|
193
|
+
suggestions.push('Ensure the unit (K/M/G) is specified');
|
|
194
|
+
}
|
|
195
|
+
break;
|
|
196
|
+
case 'CONFIG_SECURITY_ERROR':
|
|
197
|
+
suggestions.push('Use relative paths within the project directory');
|
|
198
|
+
suggestions.push('Avoid ".." in paths to prevent directory traversal');
|
|
199
|
+
suggestions.push('Use absolute paths only when explicitly needed');
|
|
200
|
+
break;
|
|
201
|
+
case 'CONFIG_FILE_ERROR':
|
|
202
|
+
suggestions.push('Ensure the configuration file exists');
|
|
203
|
+
suggestions.push('Check file permissions for read access');
|
|
204
|
+
suggestions.push('Verify the file has .js extension');
|
|
205
|
+
break;
|
|
206
|
+
default:
|
|
207
|
+
suggestions.push('Check the configuration documentation');
|
|
208
|
+
suggestions.push('Verify all required fields are present');
|
|
209
|
+
}
|
|
210
|
+
return suggestions;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Format validation report as human-readable text
|
|
214
|
+
* @param report Validation report to format
|
|
215
|
+
* @returns Formatted report text
|
|
216
|
+
*/
|
|
217
|
+
formatReport(report) {
|
|
218
|
+
const lines = [];
|
|
219
|
+
lines.push(`Configuration Validation Report`);
|
|
220
|
+
lines.push(`==============================`);
|
|
221
|
+
lines.push(`File: ${report.filePath}`);
|
|
222
|
+
lines.push(`Status: ${report.success ? 'VALID' : 'INVALID'}`);
|
|
223
|
+
lines.push(`Apps: ${report.appCount}`);
|
|
224
|
+
lines.push('');
|
|
225
|
+
if (report.summary.errors > 0 ||
|
|
226
|
+
report.summary.warnings > 0 ||
|
|
227
|
+
report.summary.infos > 0) {
|
|
228
|
+
lines.push(`Summary: ${report.summary.errors} errors, ${report.summary.warnings} warnings, ${report.summary.infos} info`);
|
|
229
|
+
lines.push('');
|
|
230
|
+
}
|
|
231
|
+
if (report.issues.length > 0) {
|
|
232
|
+
lines.push('Issues:');
|
|
233
|
+
lines.push('-------');
|
|
234
|
+
for (const issue of report.issues) {
|
|
235
|
+
const location = issue.location
|
|
236
|
+
? ` (app[${issue.location.appIndex}]${issue.location.field ? `.${issue.location.field}` : ''})`
|
|
237
|
+
: '';
|
|
238
|
+
lines.push(`[${issue.severity.toUpperCase()}] ${issue.message}${location}`);
|
|
239
|
+
if (issue.suggestion && this.includeSuggestions) {
|
|
240
|
+
lines.push(` Suggestion: ${issue.suggestion}`);
|
|
241
|
+
}
|
|
242
|
+
lines.push('');
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (report.success && report.apps.length > 0) {
|
|
246
|
+
lines.push('Apps:');
|
|
247
|
+
lines.push('-----');
|
|
248
|
+
for (const app of report.apps) {
|
|
249
|
+
lines.push(`• ${app.name}: ${app.script}`);
|
|
250
|
+
const details = [];
|
|
251
|
+
if (app.memoryLimit)
|
|
252
|
+
details.push(`memory: ${app.memoryLimit}`);
|
|
253
|
+
if (app.hasEnvVars)
|
|
254
|
+
details.push('env vars');
|
|
255
|
+
if (app.hasLogFiles)
|
|
256
|
+
details.push('log files');
|
|
257
|
+
if (details.length > 0) {
|
|
258
|
+
lines.push(` (${details.join(', ')})`);
|
|
259
|
+
}
|
|
260
|
+
lines.push('');
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return lines.join('\n');
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Format validation report as JSON
|
|
267
|
+
* @param report Validation report to format
|
|
268
|
+
* @param pretty Whether to pretty-print JSON (default: false)
|
|
269
|
+
* @returns JSON string
|
|
270
|
+
*/
|
|
271
|
+
formatReportAsJson(report, pretty = false) {
|
|
272
|
+
return JSON.stringify(report, null, pretty ? 2 : undefined);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Set whether to include suggestions in reports
|
|
276
|
+
* @param include Whether to include suggestions
|
|
277
|
+
*/
|
|
278
|
+
setIncludeSuggestions(include) {
|
|
279
|
+
this.includeSuggestions = include;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Get whether suggestions are included in reports
|
|
283
|
+
* @returns True if suggestions are included
|
|
284
|
+
*/
|
|
285
|
+
isIncludingSuggestions() {
|
|
286
|
+
return this.includeSuggestions;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Set maximum number of issues to collect
|
|
290
|
+
* @param maxIssues Maximum number of issues
|
|
291
|
+
*/
|
|
292
|
+
setMaxIssues(maxIssues) {
|
|
293
|
+
this.maxIssues = Math.max(1, maxIssues);
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get maximum number of issues to collect
|
|
297
|
+
* @returns Maximum number of issues
|
|
298
|
+
*/
|
|
299
|
+
getMaxIssues() {
|
|
300
|
+
return this.maxIssues;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Create a new configuration reporter instance
|
|
305
|
+
* @param options Reporter options
|
|
306
|
+
* @returns ConfigReporter instance
|
|
307
|
+
*/
|
|
308
|
+
export function createConfigReporter(options) {
|
|
309
|
+
return new ConfigReporter(options);
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=config-reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-reporter.js","sourceRoot":"","sources":["../../../src/config/config-reporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAyEnD;;;GAGG;AACH,MAAM,OAAO,cAAc;IACjB,kBAAkB,CAAU;IAC5B,SAAS,CAAS;IAClB,gBAAgB,GAAsB,EAAE,CAAC;IACzC,UAAU,GAA4B,IAAI,CAAC;IAEnD,YAAY,UAAiC,EAAE;QAC7C,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,KAAK,KAAK,CAAC;QAC/D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;IAC5C,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CACZ,MAA4B,EAC5B,QAAgB,EAChB,SAA4B,EAAE;QAE9B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAEpC,MAAM,MAAM,GAAqB;YAC/B,OAAO,EAAE,MAAM,KAAK,IAAI;YACxB,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;YAClC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAClC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACrD,IAAI,EAAE,EAAE;SACT,CAAC;QAEF,IAAI,MAAM,EAAE,CAAC;YACX,yBAAyB;YACzB,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,WAAW,EAAE,GAAG,CAAC,kBAAkB;gBACnC,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;gBACxD,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC;aAChE,CAAC,CAAC,CAAC;QACN,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,4BAA4B,CAChC,QAAgB,EAChB,kBAAgD;QAEhD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAE3B,MAAM,MAAM,GAAqB;YAC/B,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YAC7C,IAAI,EAAE,EAAE;SACT,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;YAE1C,yBAAyB;YACzB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YACrC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,WAAW,EAAE,GAAG,CAAC,kBAAkB;gBACnC,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;gBACxD,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC;aAChE,CAAC,CAAC,CAAC;YAEJ,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sBAAsB;YACtB,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;gBAClC,IAAI,CAAC,kBAAkB,CAAC;oBACtB,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,WAAW;oBACrB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,kBAAkB,CAAC;oBACtB,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,WAAW;oBACrB,OAAO,EAAE,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACvF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE3C,oBAAoB;QACpB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,KAAsB;QACvC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAClD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,mBAAmB;QACjB,OAAO,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,MAAyB;QAKxC,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAErD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,QAAQ,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACvB,KAAK,OAAO;oBACV,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACnB,MAAM;gBACR,KAAK,MAAM;oBACT,OAAO,CAAC,KAAK,EAAE,CAAC;oBAChB,MAAM;YACV,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,6BAA6B,CAC3B,aAA2B,EAC3B,SAA4B,EAAE;QAE9B,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB;YACzC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CACtB,aAAa,CAAC,IAAI,EAClB,aAAa,CAAC,OAAO,EAAE,KAAe,CACvC;YACH,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,aAAa,GAAG,aAAwC,CAAC;QAC/D,aAAa,CAAC,WAAW,GAAG,WAAW,CAAC;QACxC,aAAa,CAAC,gBAAgB,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAE7C,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACH,mBAAmB,CAAC,SAAiB,EAAE,KAAc;QACnD,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,yBAAyB;gBAC5B,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;oBACrB,WAAW,CAAC,IAAI,CACd,2DAA2D,CAC5D,CAAC;oBACF,WAAW,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;gBAChE,CAAC;qBAAM,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,WAAW,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;oBACxD,WAAW,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;gBACnE,CAAC;qBAAM,IAAI,KAAK,KAAK,oBAAoB,EAAE,CAAC;oBAC1C,WAAW,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;oBAC/D,WAAW,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBAC3D,CAAC;gBACD,MAAM;YAER,KAAK,uBAAuB;gBAC1B,WAAW,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;gBACpE,WAAW,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;gBACvE,WAAW,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;gBACnE,MAAM;YAER,KAAK,mBAAmB;gBACtB,WAAW,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBACzD,WAAW,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBAC3D,WAAW,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBACtD,MAAM;YAER;gBACE,WAAW,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;gBAC1D,WAAW,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,MAAwB;QACnC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,IACE,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACzB,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EACxB,CAAC;YACD,KAAK,CAAC,IAAI,CACR,YAAY,MAAM,CAAC,OAAO,CAAC,MAAM,YAAY,MAAM,CAAC,OAAO,CAAC,QAAQ,cAAc,MAAM,CAAC,OAAO,CAAC,KAAK,OAAO,CAC9G,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEtB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;oBAC7B,CAAC,CAAC,SAAS,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;oBAC/F,CAAC,CAAC,EAAE,CAAC;gBAEP,KAAK,CAAC,IAAI,CACR,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,OAAO,GAAG,QAAQ,EAAE,CAChE,CAAC;gBAEF,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAChD,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;gBAClD,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAE3C,MAAM,OAAO,GAAa,EAAE,CAAC;gBAC7B,IAAI,GAAG,CAAC,WAAW;oBAAE,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;gBAChE,IAAI,GAAG,CAAC,UAAU;oBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC7C,IAAI,GAAG,CAAC,WAAW;oBAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAE/C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1C,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,CAChB,MAAwB,EACxB,SAAkB,KAAK;QAEvB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACH,qBAAqB,CAAC,OAAgB;QACpC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,sBAAsB;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,SAAiB;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAA+B;IAE/B,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Validator
|
|
3
|
+
*
|
|
4
|
+
* Handles validation logic for procman configuration files.
|
|
5
|
+
* Provides comprehensive validation with detailed error reporting and suggestions.
|
|
6
|
+
*/
|
|
7
|
+
import { ProcmanConfig } from '../shared/config.js';
|
|
8
|
+
/**
|
|
9
|
+
* Validation issue severity levels
|
|
10
|
+
*/
|
|
11
|
+
export type ValidationSeverity = 'error' | 'warning' | 'info';
|
|
12
|
+
/**
|
|
13
|
+
* Validation issue details
|
|
14
|
+
*/
|
|
15
|
+
export interface ValidationIssue {
|
|
16
|
+
/** Issue severity level */
|
|
17
|
+
severity: ValidationSeverity;
|
|
18
|
+
/** Issue category */
|
|
19
|
+
category: 'structure' | 'security' | 'performance' | 'compatibility';
|
|
20
|
+
/** Issue message */
|
|
21
|
+
message: string;
|
|
22
|
+
/** Location of the issue */
|
|
23
|
+
location?: {
|
|
24
|
+
appIndex?: number;
|
|
25
|
+
field?: string;
|
|
26
|
+
value?: string;
|
|
27
|
+
};
|
|
28
|
+
/** Suggested fix */
|
|
29
|
+
suggestion?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Configuration validator options
|
|
33
|
+
*/
|
|
34
|
+
export interface ConfigValidatorOptions {
|
|
35
|
+
/** Project root path for security validation */
|
|
36
|
+
projectRoot?: string;
|
|
37
|
+
/** Whether to collect validation issues for reporting (default: false) */
|
|
38
|
+
collectIssues?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Configuration validator class
|
|
42
|
+
* Responsible for validating procman configuration structure and content
|
|
43
|
+
*/
|
|
44
|
+
export declare class ConfigValidator {
|
|
45
|
+
private projectRoot;
|
|
46
|
+
private collectIssues;
|
|
47
|
+
private validationIssues;
|
|
48
|
+
constructor(options?: ConfigValidatorOptions);
|
|
49
|
+
/**
|
|
50
|
+
* Validate configuration structure and content
|
|
51
|
+
* @param config Configuration object to validate
|
|
52
|
+
* @throws ProcmanError if validation fails
|
|
53
|
+
*/
|
|
54
|
+
validateConfig(config: unknown): asserts config is ProcmanConfig;
|
|
55
|
+
/**
|
|
56
|
+
* Validate individual app configuration
|
|
57
|
+
* @param app App configuration to validate
|
|
58
|
+
* @param index Index in the apps array (for error reporting)
|
|
59
|
+
* @param appNames Set to track duplicate names
|
|
60
|
+
* @throws ProcmanError if validation fails
|
|
61
|
+
*/
|
|
62
|
+
validateAppConfig(app: unknown, index: number, appNames: Set<string>): void;
|
|
63
|
+
/**
|
|
64
|
+
* Validate required field exists and has correct type
|
|
65
|
+
* @param obj Object to validate
|
|
66
|
+
* @param field Field name
|
|
67
|
+
* @param expectedType Expected type
|
|
68
|
+
* @param appIndex App index for error reporting
|
|
69
|
+
* @throws ProcmanError if validation fails
|
|
70
|
+
*/
|
|
71
|
+
private validateRequiredField;
|
|
72
|
+
/**
|
|
73
|
+
* Validate optional field has correct type if present
|
|
74
|
+
* @param obj Object to validate
|
|
75
|
+
* @param field Field name
|
|
76
|
+
* @param expectedType Expected type
|
|
77
|
+
* @param appIndex App index for error reporting
|
|
78
|
+
* @throws ProcmanError if validation fails
|
|
79
|
+
*/
|
|
80
|
+
private validateOptionalField;
|
|
81
|
+
/**
|
|
82
|
+
* Validate environment variables object
|
|
83
|
+
* @param env Environment variables object
|
|
84
|
+
* @param appIndex App index for error reporting
|
|
85
|
+
* @throws ProcmanError if validation fails
|
|
86
|
+
*/
|
|
87
|
+
private validateEnvObject;
|
|
88
|
+
/**
|
|
89
|
+
* Validate memory size format and convert to bytes
|
|
90
|
+
* @param memorySize Memory size string (e.g., "300M", "1G")
|
|
91
|
+
* @param appIndex App index for error reporting
|
|
92
|
+
* @throws ProcmanError if validation fails
|
|
93
|
+
*/
|
|
94
|
+
validateMemorySize(memorySize: string, appIndex: number): void;
|
|
95
|
+
/**
|
|
96
|
+
* Validate script path for security issues
|
|
97
|
+
* @param scriptPath Script path to validate
|
|
98
|
+
* @param appIndex App index for error reporting
|
|
99
|
+
*/
|
|
100
|
+
private validateScriptPathSecurity;
|
|
101
|
+
/**
|
|
102
|
+
* Validate file path for security issues
|
|
103
|
+
* @param filePath File path to validate
|
|
104
|
+
* @param appIndex App index for error reporting
|
|
105
|
+
* @param fieldName Field name for error reporting
|
|
106
|
+
*/
|
|
107
|
+
private validatePathSecurity;
|
|
108
|
+
/**
|
|
109
|
+
* Add validation issue to collection (if enabled)
|
|
110
|
+
* @param issue Validation issue to add
|
|
111
|
+
*/
|
|
112
|
+
private addValidationIssue;
|
|
113
|
+
/**
|
|
114
|
+
* Get collected validation issues
|
|
115
|
+
* @returns Array of validation issues
|
|
116
|
+
*/
|
|
117
|
+
getValidationIssues(): ValidationIssue[];
|
|
118
|
+
/**
|
|
119
|
+
* Clear collected validation issues
|
|
120
|
+
*/
|
|
121
|
+
clearValidationIssues(): void;
|
|
122
|
+
/**
|
|
123
|
+
* Sanitize file path to prevent path traversal attacks
|
|
124
|
+
* @param filePath File path to sanitize
|
|
125
|
+
* @returns Sanitized file path
|
|
126
|
+
* @throws ProcmanError if path is potentially malicious
|
|
127
|
+
*/
|
|
128
|
+
private sanitizeFilePath;
|
|
129
|
+
/**
|
|
130
|
+
* Validate that a path stays within the project boundaries
|
|
131
|
+
* @param filePath File path to validate (relative)
|
|
132
|
+
* @param basePath Base path to resolve against
|
|
133
|
+
* @returns Resolved absolute path
|
|
134
|
+
* @throws ProcmanError if path escapes project boundaries
|
|
135
|
+
*/
|
|
136
|
+
private validatePathWithinProject;
|
|
137
|
+
/**
|
|
138
|
+
* Generate suggestions for validation errors
|
|
139
|
+
* @param errorCode Error code
|
|
140
|
+
* @param field Field name (optional)
|
|
141
|
+
* @returns Array of suggestions
|
|
142
|
+
*/
|
|
143
|
+
generateSuggestions(errorCode: string, field?: string): string[];
|
|
144
|
+
/**
|
|
145
|
+
* Enhanced type guard for configuration objects
|
|
146
|
+
* @param config Unknown input to validate
|
|
147
|
+
* @returns Type predicate indicating if config is a valid object
|
|
148
|
+
*/
|
|
149
|
+
private isValidConfigObject;
|
|
150
|
+
/**
|
|
151
|
+
* Generate detailed error message for invalid config types
|
|
152
|
+
* @param config Invalid config to analyze
|
|
153
|
+
* @returns Descriptive error message
|
|
154
|
+
*/
|
|
155
|
+
private getConfigTypeErrorMessage;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Create a new configuration validator instance
|
|
159
|
+
* @param options Validator options
|
|
160
|
+
* @returns ConfigValidator instance
|
|
161
|
+
*/
|
|
162
|
+
export declare function createConfigValidator(options?: ConfigValidatorOptions): ConfigValidator;
|
|
163
|
+
//# sourceMappingURL=config-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-validator.d.ts","sourceRoot":"","sources":["../../../src/config/config-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,aAAa,EAAmB,MAAM,qBAAqB,CAAC;AAGrE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,qBAAqB;IACrB,QAAQ,EAAE,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,eAAe,CAAC;IACrE,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,oBAAoB;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,gBAAgB,CAAyB;gBAErC,OAAO,GAAE,sBAA2B;IAKhD;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa;IA0ChE;;;;;;OAMG;IACH,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI;IAwG3E;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAgCzB;;;;;OAKG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IA+B9D;;;;OAIG;IACH,OAAO,CAAC,0BAA0B;IA2BlC;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;;OAGG;IACH,mBAAmB,IAAI,eAAe,EAAE;IAIxC;;OAEG;IACH,qBAAqB,IAAI,IAAI;IAI7B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IA6CxB;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;IA4BjC;;;;;OAKG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAiChE;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;CA+BlC;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,eAAe,CAEjB"}
|