@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.
Files changed (315) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/dist/src/cli/commands/clear-log.d.ts +10 -0
  4. package/dist/src/cli/commands/clear-log.d.ts.map +1 -0
  5. package/dist/src/cli/commands/clear-log.js +77 -0
  6. package/dist/src/cli/commands/clear-log.js.map +1 -0
  7. package/dist/src/cli/commands/exit.d.ts +10 -0
  8. package/dist/src/cli/commands/exit.d.ts.map +1 -0
  9. package/dist/src/cli/commands/exit.js +65 -0
  10. package/dist/src/cli/commands/exit.js.map +1 -0
  11. package/dist/src/cli/commands/help.d.ts +10 -0
  12. package/dist/src/cli/commands/help.d.ts.map +1 -0
  13. package/dist/src/cli/commands/help.js +340 -0
  14. package/dist/src/cli/commands/help.js.map +1 -0
  15. package/dist/src/cli/commands/list.d.ts +11 -0
  16. package/dist/src/cli/commands/list.d.ts.map +1 -0
  17. package/dist/src/cli/commands/list.js +130 -0
  18. package/dist/src/cli/commands/list.js.map +1 -0
  19. package/dist/src/cli/commands/load.d.ts +11 -0
  20. package/dist/src/cli/commands/load.d.ts.map +1 -0
  21. package/dist/src/cli/commands/load.js +250 -0
  22. package/dist/src/cli/commands/load.js.map +1 -0
  23. package/dist/src/cli/commands/log.d.ts +18 -0
  24. package/dist/src/cli/commands/log.d.ts.map +1 -0
  25. package/dist/src/cli/commands/log.js +282 -0
  26. package/dist/src/cli/commands/log.js.map +1 -0
  27. package/dist/src/cli/commands/restart.d.ts +11 -0
  28. package/dist/src/cli/commands/restart.d.ts.map +1 -0
  29. package/dist/src/cli/commands/restart.js +99 -0
  30. package/dist/src/cli/commands/restart.js.map +1 -0
  31. package/dist/src/cli/commands/start.d.ts +11 -0
  32. package/dist/src/cli/commands/start.d.ts.map +1 -0
  33. package/dist/src/cli/commands/start.js +105 -0
  34. package/dist/src/cli/commands/start.js.map +1 -0
  35. package/dist/src/cli/commands/stop.d.ts +12 -0
  36. package/dist/src/cli/commands/stop.d.ts.map +1 -0
  37. package/dist/src/cli/commands/stop.js +105 -0
  38. package/dist/src/cli/commands/stop.js.map +1 -0
  39. package/dist/src/cli/index.d.ts +3 -0
  40. package/dist/src/cli/index.d.ts.map +1 -0
  41. package/dist/src/cli/index.js +28 -0
  42. package/dist/src/cli/index.js.map +1 -0
  43. package/dist/src/cli/parser.d.ts +14 -0
  44. package/dist/src/cli/parser.d.ts.map +1 -0
  45. package/dist/src/cli/parser.js +131 -0
  46. package/dist/src/cli/parser.js.map +1 -0
  47. package/dist/src/cli/signal-handler.d.ts +51 -0
  48. package/dist/src/cli/signal-handler.d.ts.map +1 -0
  49. package/dist/src/cli/signal-handler.js +129 -0
  50. package/dist/src/cli/signal-handler.js.map +1 -0
  51. package/dist/src/cli/utils/error-handler.d.ts +39 -0
  52. package/dist/src/cli/utils/error-handler.d.ts.map +1 -0
  53. package/dist/src/cli/utils/error-handler.js +200 -0
  54. package/dist/src/cli/utils/error-handler.js.map +1 -0
  55. package/dist/src/cli/utils/error-utils.d.ts +16 -0
  56. package/dist/src/cli/utils/error-utils.d.ts.map +1 -0
  57. package/dist/src/cli/utils/error-utils.js +48 -0
  58. package/dist/src/cli/utils/error-utils.js.map +1 -0
  59. package/dist/src/cli/utils/ipc-client.d.ts +80 -0
  60. package/dist/src/cli/utils/ipc-client.d.ts.map +1 -0
  61. package/dist/src/cli/utils/ipc-client.js +275 -0
  62. package/dist/src/cli/utils/ipc-client.js.map +1 -0
  63. package/dist/src/config/config-loader.d.ts +74 -0
  64. package/dist/src/config/config-loader.d.ts.map +1 -0
  65. package/dist/src/config/config-loader.js +229 -0
  66. package/dist/src/config/config-loader.js.map +1 -0
  67. package/dist/src/config/config-normalizer.d.ts +135 -0
  68. package/dist/src/config/config-normalizer.d.ts.map +1 -0
  69. package/dist/src/config/config-normalizer.js +309 -0
  70. package/dist/src/config/config-normalizer.js.map +1 -0
  71. package/dist/src/config/config-reporter.d.ts +183 -0
  72. package/dist/src/config/config-reporter.d.ts.map +1 -0
  73. package/dist/src/config/config-reporter.js +311 -0
  74. package/dist/src/config/config-reporter.js.map +1 -0
  75. package/dist/src/config/config-validator.d.ts +163 -0
  76. package/dist/src/config/config-validator.d.ts.map +1 -0
  77. package/dist/src/config/config-validator.js +489 -0
  78. package/dist/src/config/config-validator.js.map +1 -0
  79. package/dist/src/config/config-watcher.d.ts +161 -0
  80. package/dist/src/config/config-watcher.d.ts.map +1 -0
  81. package/dist/src/config/config-watcher.js +245 -0
  82. package/dist/src/config/config-watcher.js.map +1 -0
  83. package/dist/src/config/index.d.ts +36 -0
  84. package/dist/src/config/index.d.ts.map +1 -0
  85. package/dist/src/config/index.js +41 -0
  86. package/dist/src/config/index.js.map +1 -0
  87. package/dist/src/config/secure-config-loader.d.ts +77 -0
  88. package/dist/src/config/secure-config-loader.d.ts.map +1 -0
  89. package/dist/src/config/secure-config-loader.js +326 -0
  90. package/dist/src/config/secure-config-loader.js.map +1 -0
  91. package/dist/src/daemon/base-socket-connection.d.ts +66 -0
  92. package/dist/src/daemon/base-socket-connection.d.ts.map +1 -0
  93. package/dist/src/daemon/base-socket-connection.js +192 -0
  94. package/dist/src/daemon/base-socket-connection.js.map +1 -0
  95. package/dist/src/daemon/component-manager.d.ts +180 -0
  96. package/dist/src/daemon/component-manager.d.ts.map +1 -0
  97. package/dist/src/daemon/component-manager.js +794 -0
  98. package/dist/src/daemon/component-manager.js.map +1 -0
  99. package/dist/src/daemon/crash-recovery.d.ts +71 -0
  100. package/dist/src/daemon/crash-recovery.d.ts.map +1 -0
  101. package/dist/src/daemon/crash-recovery.js +282 -0
  102. package/dist/src/daemon/crash-recovery.js.map +1 -0
  103. package/dist/src/daemon/daemon-main.d.ts +18 -0
  104. package/dist/src/daemon/daemon-main.d.ts.map +1 -0
  105. package/dist/src/daemon/daemon-main.js +160 -0
  106. package/dist/src/daemon/daemon-main.js.map +1 -0
  107. package/dist/src/daemon/daemon-state-manager.d.ts +111 -0
  108. package/dist/src/daemon/daemon-state-manager.d.ts.map +1 -0
  109. package/dist/src/daemon/daemon-state-manager.js +194 -0
  110. package/dist/src/daemon/daemon-state-manager.js.map +1 -0
  111. package/dist/src/daemon/data-directory.d.ts +51 -0
  112. package/dist/src/daemon/data-directory.d.ts.map +1 -0
  113. package/dist/src/daemon/data-directory.js +136 -0
  114. package/dist/src/daemon/data-directory.js.map +1 -0
  115. package/dist/src/daemon/index.d.ts +20 -0
  116. package/dist/src/daemon/index.d.ts.map +1 -0
  117. package/dist/src/daemon/index.js +24 -0
  118. package/dist/src/daemon/index.js.map +1 -0
  119. package/dist/src/daemon/ipc-client-base.d.ts +153 -0
  120. package/dist/src/daemon/ipc-client-base.d.ts.map +1 -0
  121. package/dist/src/daemon/ipc-client-base.js +476 -0
  122. package/dist/src/daemon/ipc-client-base.js.map +1 -0
  123. package/dist/src/daemon/ipc-command-handler.d.ts +107 -0
  124. package/dist/src/daemon/ipc-command-handler.d.ts.map +1 -0
  125. package/dist/src/daemon/ipc-command-handler.js +483 -0
  126. package/dist/src/daemon/ipc-command-handler.js.map +1 -0
  127. package/dist/src/daemon/ipc-factory.d.ts +92 -0
  128. package/dist/src/daemon/ipc-factory.d.ts.map +1 -0
  129. package/dist/src/daemon/ipc-factory.js +210 -0
  130. package/dist/src/daemon/ipc-factory.js.map +1 -0
  131. package/dist/src/daemon/ipc-server-base.d.ts +158 -0
  132. package/dist/src/daemon/ipc-server-base.d.ts.map +1 -0
  133. package/dist/src/daemon/ipc-server-base.js +491 -0
  134. package/dist/src/daemon/ipc-server-base.js.map +1 -0
  135. package/dist/src/daemon/message-protocol.d.ts +132 -0
  136. package/dist/src/daemon/message-protocol.d.ts.map +1 -0
  137. package/dist/src/daemon/message-protocol.js +252 -0
  138. package/dist/src/daemon/message-protocol.js.map +1 -0
  139. package/dist/src/daemon/named-pipe-client.d.ts +61 -0
  140. package/dist/src/daemon/named-pipe-client.d.ts.map +1 -0
  141. package/dist/src/daemon/named-pipe-client.js +221 -0
  142. package/dist/src/daemon/named-pipe-client.js.map +1 -0
  143. package/dist/src/daemon/named-pipe-server.d.ts +40 -0
  144. package/dist/src/daemon/named-pipe-server.d.ts.map +1 -0
  145. package/dist/src/daemon/named-pipe-server.js +102 -0
  146. package/dist/src/daemon/named-pipe-server.js.map +1 -0
  147. package/dist/src/daemon/orphan-detector.d.ts +66 -0
  148. package/dist/src/daemon/orphan-detector.d.ts.map +1 -0
  149. package/dist/src/daemon/orphan-detector.js +208 -0
  150. package/dist/src/daemon/orphan-detector.js.map +1 -0
  151. package/dist/src/daemon/pid-manager.d.ts +49 -0
  152. package/dist/src/daemon/pid-manager.d.ts.map +1 -0
  153. package/dist/src/daemon/pid-manager.js +110 -0
  154. package/dist/src/daemon/pid-manager.js.map +1 -0
  155. package/dist/src/daemon/procman-daemon.d.ts +188 -0
  156. package/dist/src/daemon/procman-daemon.d.ts.map +1 -0
  157. package/dist/src/daemon/procman-daemon.js +802 -0
  158. package/dist/src/daemon/procman-daemon.js.map +1 -0
  159. package/dist/src/daemon/reconnection-system.d.ts +113 -0
  160. package/dist/src/daemon/reconnection-system.d.ts.map +1 -0
  161. package/dist/src/daemon/reconnection-system.js +223 -0
  162. package/dist/src/daemon/reconnection-system.js.map +1 -0
  163. package/dist/src/daemon/resource-manager.d.ts +204 -0
  164. package/dist/src/daemon/resource-manager.d.ts.map +1 -0
  165. package/dist/src/daemon/resource-manager.js +423 -0
  166. package/dist/src/daemon/resource-manager.js.map +1 -0
  167. package/dist/src/daemon/signal-handler.d.ts +58 -0
  168. package/dist/src/daemon/signal-handler.d.ts.map +1 -0
  169. package/dist/src/daemon/signal-handler.js +142 -0
  170. package/dist/src/daemon/signal-handler.js.map +1 -0
  171. package/dist/src/daemon/simple-resource-manager.d.ts +95 -0
  172. package/dist/src/daemon/simple-resource-manager.d.ts.map +1 -0
  173. package/dist/src/daemon/simple-resource-manager.js +180 -0
  174. package/dist/src/daemon/simple-resource-manager.js.map +1 -0
  175. package/dist/src/daemon/unix-socket-client.d.ts +69 -0
  176. package/dist/src/daemon/unix-socket-client.d.ts.map +1 -0
  177. package/dist/src/daemon/unix-socket-client.js +313 -0
  178. package/dist/src/daemon/unix-socket-client.js.map +1 -0
  179. package/dist/src/daemon/unix-socket-server.d.ts +61 -0
  180. package/dist/src/daemon/unix-socket-server.d.ts.map +1 -0
  181. package/dist/src/daemon/unix-socket-server.js +262 -0
  182. package/dist/src/daemon/unix-socket-server.js.map +1 -0
  183. package/dist/src/daemon/zombie-reaper.d.ts +83 -0
  184. package/dist/src/daemon/zombie-reaper.d.ts.map +1 -0
  185. package/dist/src/daemon/zombie-reaper.js +278 -0
  186. package/dist/src/daemon/zombie-reaper.js.map +1 -0
  187. package/dist/src/process-manager/index.d.ts +13 -0
  188. package/dist/src/process-manager/index.d.ts.map +1 -0
  189. package/dist/src/process-manager/index.js +11 -0
  190. package/dist/src/process-manager/index.js.map +1 -0
  191. package/dist/src/process-manager/interfaces/index.d.ts +31 -0
  192. package/dist/src/process-manager/interfaces/index.d.ts.map +1 -0
  193. package/dist/src/process-manager/interfaces/index.js +14 -0
  194. package/dist/src/process-manager/interfaces/index.js.map +1 -0
  195. package/dist/src/process-manager/interfaces/process-group.d.ts +200 -0
  196. package/dist/src/process-manager/interfaces/process-group.d.ts.map +1 -0
  197. package/dist/src/process-manager/interfaces/process-group.js +10 -0
  198. package/dist/src/process-manager/interfaces/process-group.js.map +1 -0
  199. package/dist/src/process-manager/interfaces/process-lifecycle.d.ts +97 -0
  200. package/dist/src/process-manager/interfaces/process-lifecycle.d.ts.map +1 -0
  201. package/dist/src/process-manager/interfaces/process-lifecycle.js +10 -0
  202. package/dist/src/process-manager/interfaces/process-lifecycle.js.map +1 -0
  203. package/dist/src/process-manager/interfaces/process-monitor.d.ts +118 -0
  204. package/dist/src/process-manager/interfaces/process-monitor.d.ts.map +1 -0
  205. package/dist/src/process-manager/interfaces/process-monitor.js +10 -0
  206. package/dist/src/process-manager/interfaces/process-monitor.js.map +1 -0
  207. package/dist/src/process-manager/interfaces/process-persistence.d.ts +125 -0
  208. package/dist/src/process-manager/interfaces/process-persistence.d.ts.map +1 -0
  209. package/dist/src/process-manager/interfaces/process-persistence.js +10 -0
  210. package/dist/src/process-manager/interfaces/process-persistence.js.map +1 -0
  211. package/dist/src/process-manager/managed-process-info.d.ts +307 -0
  212. package/dist/src/process-manager/managed-process-info.d.ts.map +1 -0
  213. package/dist/src/process-manager/managed-process-info.js +650 -0
  214. package/dist/src/process-manager/managed-process-info.js.map +1 -0
  215. package/dist/src/process-manager/process-group-manager.d.ts +103 -0
  216. package/dist/src/process-manager/process-group-manager.d.ts.map +1 -0
  217. package/dist/src/process-manager/process-group-manager.js +400 -0
  218. package/dist/src/process-manager/process-group-manager.js.map +1 -0
  219. package/dist/src/process-manager/process-lifecycle-manager.d.ts +68 -0
  220. package/dist/src/process-manager/process-lifecycle-manager.d.ts.map +1 -0
  221. package/dist/src/process-manager/process-lifecycle-manager.js +372 -0
  222. package/dist/src/process-manager/process-lifecycle-manager.js.map +1 -0
  223. package/dist/src/process-manager/process-manager.d.ts +296 -0
  224. package/dist/src/process-manager/process-manager.d.ts.map +1 -0
  225. package/dist/src/process-manager/process-manager.js +659 -0
  226. package/dist/src/process-manager/process-manager.js.map +1 -0
  227. package/dist/src/process-manager/process-monitor.d.ts +95 -0
  228. package/dist/src/process-manager/process-monitor.d.ts.map +1 -0
  229. package/dist/src/process-manager/process-monitor.js +357 -0
  230. package/dist/src/process-manager/process-monitor.js.map +1 -0
  231. package/dist/src/process-manager/process-persistence.d.ts +68 -0
  232. package/dist/src/process-manager/process-persistence.d.ts.map +1 -0
  233. package/dist/src/process-manager/process-persistence.js +364 -0
  234. package/dist/src/process-manager/process-persistence.js.map +1 -0
  235. package/dist/src/process-manager/utils/mutex.d.ts +82 -0
  236. package/dist/src/process-manager/utils/mutex.d.ts.map +1 -0
  237. package/dist/src/process-manager/utils/mutex.js +172 -0
  238. package/dist/src/process-manager/utils/mutex.js.map +1 -0
  239. package/dist/src/services/index.d.ts +8 -0
  240. package/dist/src/services/index.d.ts.map +1 -0
  241. package/dist/src/services/index.js +8 -0
  242. package/dist/src/services/index.js.map +1 -0
  243. package/dist/src/services/log-manager-config.d.ts +65 -0
  244. package/dist/src/services/log-manager-config.d.ts.map +1 -0
  245. package/dist/src/services/log-manager-config.js +145 -0
  246. package/dist/src/services/log-manager-config.js.map +1 -0
  247. package/dist/src/services/log-manager-factory.d.ts +134 -0
  248. package/dist/src/services/log-manager-factory.d.ts.map +1 -0
  249. package/dist/src/services/log-manager-factory.js +203 -0
  250. package/dist/src/services/log-manager-factory.js.map +1 -0
  251. package/dist/src/services/log-manager.d.ts +170 -0
  252. package/dist/src/services/log-manager.d.ts.map +1 -0
  253. package/dist/src/services/log-manager.js +1199 -0
  254. package/dist/src/services/log-manager.js.map +1 -0
  255. package/dist/src/services/log-path-validator.d.ts +121 -0
  256. package/dist/src/services/log-path-validator.d.ts.map +1 -0
  257. package/dist/src/services/log-path-validator.js +302 -0
  258. package/dist/src/services/log-path-validator.js.map +1 -0
  259. package/dist/src/services/process-log-integration.d.ts +62 -0
  260. package/dist/src/services/process-log-integration.d.ts.map +1 -0
  261. package/dist/src/services/process-log-integration.js +157 -0
  262. package/dist/src/services/process-log-integration.js.map +1 -0
  263. package/dist/src/shared/config.d.ts +67 -0
  264. package/dist/src/shared/config.d.ts.map +1 -0
  265. package/dist/src/shared/config.js +92 -0
  266. package/dist/src/shared/config.js.map +1 -0
  267. package/dist/src/shared/constants-streaming.d.ts +39 -0
  268. package/dist/src/shared/constants-streaming.d.ts.map +1 -0
  269. package/dist/src/shared/constants-streaming.js +39 -0
  270. package/dist/src/shared/constants-streaming.js.map +1 -0
  271. package/dist/src/shared/constants.d.ts +60 -0
  272. package/dist/src/shared/constants.d.ts.map +1 -0
  273. package/dist/src/shared/constants.js +71 -0
  274. package/dist/src/shared/constants.js.map +1 -0
  275. package/dist/src/shared/errors.d.ts +70 -0
  276. package/dist/src/shared/errors.d.ts.map +1 -0
  277. package/dist/src/shared/errors.js +101 -0
  278. package/dist/src/shared/errors.js.map +1 -0
  279. package/dist/src/shared/index.d.ts +14 -0
  280. package/dist/src/shared/index.d.ts.map +1 -0
  281. package/dist/src/shared/index.js +22 -0
  282. package/dist/src/shared/index.js.map +1 -0
  283. package/dist/src/shared/ipc.d.ts +402 -0
  284. package/dist/src/shared/ipc.d.ts.map +1 -0
  285. package/dist/src/shared/ipc.js +85 -0
  286. package/dist/src/shared/ipc.js.map +1 -0
  287. package/dist/src/shared/logger.d.ts +38 -0
  288. package/dist/src/shared/logger.d.ts.map +1 -0
  289. package/dist/src/shared/logger.js +139 -0
  290. package/dist/src/shared/logger.js.map +1 -0
  291. package/dist/src/shared/logs.d.ts +53 -0
  292. package/dist/src/shared/logs.d.ts.map +1 -0
  293. package/dist/src/shared/logs.js +26 -0
  294. package/dist/src/shared/logs.js.map +1 -0
  295. package/dist/src/shared/process.d.ts +102 -0
  296. package/dist/src/shared/process.d.ts.map +1 -0
  297. package/dist/src/shared/process.js +55 -0
  298. package/dist/src/shared/process.js.map +1 -0
  299. package/dist/src/shared/types.d.ts +15 -0
  300. package/dist/src/shared/types.d.ts.map +1 -0
  301. package/dist/src/shared/types.js +8 -0
  302. package/dist/src/shared/types.js.map +1 -0
  303. package/dist/src/types/index.d.ts +19 -0
  304. package/dist/src/types/index.d.ts.map +1 -0
  305. package/dist/src/types/index.js +5 -0
  306. package/dist/src/types/index.js.map +1 -0
  307. package/dist/src/utils/event-cleanup.d.ts +30 -0
  308. package/dist/src/utils/event-cleanup.d.ts.map +1 -0
  309. package/dist/src/utils/event-cleanup.js +32 -0
  310. package/dist/src/utils/event-cleanup.js.map +1 -0
  311. package/dist/src/utils/memory/memory-monitor.d.ts +126 -0
  312. package/dist/src/utils/memory/memory-monitor.d.ts.map +1 -0
  313. package/dist/src/utils/memory/memory-monitor.js +246 -0
  314. package/dist/src/utils/memory/memory-monitor.js.map +1 -0
  315. package/package.json +74 -0
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Configuration Normalizer
3
+ *
4
+ * Handles normalization logic for procman configuration files.
5
+ * Applies default values, normalizes paths, and expands environment variables.
6
+ */
7
+ import { ProcmanConfig, AppConfig } from '../shared/config.js';
8
+ /**
9
+ * Normalized configuration after applying defaults and path normalization
10
+ */
11
+ export interface NormalizedConfig {
12
+ apps: AppConfig[];
13
+ _metadata: {
14
+ originalPath: string;
15
+ normalizedPath: string;
16
+ normalizedAt: number;
17
+ defaultsApplied: string[];
18
+ };
19
+ }
20
+ /**
21
+ * Configuration normalizer options
22
+ */
23
+ export interface ConfigNormalizerOptions {
24
+ /** Base directory for resolving relative paths (default: process.cwd()) */
25
+ baseDirectory?: string;
26
+ /** Whether to expand environment variables (default: true) */
27
+ expandEnvironmentVariables?: boolean;
28
+ }
29
+ /**
30
+ * Configuration normalizer class
31
+ * Responsible for applying defaults and normalizing procman configuration
32
+ */
33
+ export declare class ConfigNormalizer {
34
+ private baseDirectory;
35
+ private expandEnvVars;
36
+ constructor(options?: ConfigNormalizerOptions);
37
+ /**
38
+ * Apply default values and normalize paths
39
+ * @param config Configuration to normalize
40
+ * @param originalPath Original configuration file path
41
+ * @returns Normalized configuration
42
+ */
43
+ normalizeConfig(config: ProcmanConfig, originalPath: string): NormalizedConfig;
44
+ /**
45
+ * Apply only default values without path normalization
46
+ * @param config Configuration to apply defaults to
47
+ * @param originalPath Original configuration file path
48
+ * @returns Configuration with defaults applied
49
+ */
50
+ applyDefaults(config: ProcmanConfig, originalPath: string): ProcmanConfig;
51
+ /**
52
+ * Normalize file paths (relative to absolute conversion)
53
+ * @param filePath File path to normalize
54
+ * @param basePath Base path to resolve relative paths against
55
+ * @returns Normalized absolute path
56
+ */
57
+ normalizePath(filePath: string, basePath: string): string;
58
+ /**
59
+ * Expand environment variables in environment configuration
60
+ * @param env Environment variables object
61
+ * @returns Environment variables with expanded values
62
+ */
63
+ expandEnvironmentVariables(env: Record<string, string>): Record<string, string>;
64
+ /**
65
+ * Convert relative paths to absolute based on a base directory
66
+ * @param config Configuration to resolve paths for
67
+ * @param baseDir Base directory for path resolution
68
+ * @returns Configuration with resolved paths
69
+ */
70
+ resolvePaths(config: ProcmanConfig, baseDir: string): ProcmanConfig;
71
+ /**
72
+ * Merge two configurations, with the second overriding the first
73
+ * @param base Base configuration
74
+ * @param override Configuration to merge in
75
+ * @returns Merged configuration
76
+ */
77
+ mergeConfigs(base: ProcmanConfig, override: Partial<ProcmanConfig>): ProcmanConfig;
78
+ /**
79
+ * Deep clone configuration to avoid mutations
80
+ * @param config Configuration to clone
81
+ * @returns Cloned configuration
82
+ */
83
+ cloneConfig(config: ProcmanConfig): ProcmanConfig;
84
+ /**
85
+ * Validate that all required defaults have been applied
86
+ * @param config Configuration to validate
87
+ * @returns True if all defaults are present
88
+ */
89
+ hasAllDefaults(config: ProcmanConfig): boolean;
90
+ /**
91
+ * Set base directory for path resolution
92
+ * @param baseDirectory New base directory
93
+ */
94
+ setBaseDirectory(baseDirectory: string): void;
95
+ /**
96
+ * Get current base directory
97
+ * @returns Current base directory
98
+ */
99
+ getBaseDirectory(): string;
100
+ /**
101
+ * Enable or disable environment variable expansion
102
+ * @param enable Whether to enable expansion
103
+ */
104
+ setExpandEnvironmentVariables(enable: boolean): void;
105
+ /**
106
+ * Check if environment variable expansion is enabled
107
+ * @returns True if expansion is enabled
108
+ */
109
+ isExpandEnvironmentVariablesEnabled(): boolean;
110
+ /**
111
+ * Save normalized configuration to file
112
+ * @param config Normalized configuration to save
113
+ * @param outputPath Output file path
114
+ */
115
+ saveNormalizedConfig(config: NormalizedConfig, outputPath: string): Promise<void>;
116
+ /**
117
+ * Compare two configurations and return differences
118
+ * @param config1 First configuration
119
+ * @param config2 Second configuration
120
+ * @returns Array of differences
121
+ */
122
+ compareConfigs(config1: ProcmanConfig, config2: ProcmanConfig): Array<{
123
+ type: 'added' | 'removed' | 'modified';
124
+ path: string;
125
+ oldValue?: unknown;
126
+ newValue?: unknown;
127
+ }>;
128
+ }
129
+ /**
130
+ * Create a new configuration normalizer instance
131
+ * @param options Normalizer options
132
+ * @returns ConfigNormalizer instance
133
+ */
134
+ export declare function createConfigNormalizer(options?: ConfigNormalizerOptions): ConfigNormalizer;
135
+ //# sourceMappingURL=config-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-normalizer.d.ts","sourceRoot":"","sources":["../../../src/config/config-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,SAAS,EAAE;QACT,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAU;gBAEnB,OAAO,GAAE,uBAA4B;IAKjD;;;;;OAKG;IACH,eAAe,CACb,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,MAAM,GACnB,gBAAgB;IA2DnB;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,aAAa;IAwBzE;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOzD;;;;OAIG;IACH,0BAA0B,CACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAyBzB;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa;IA8BnE;;;;;OAKG;IACH,YAAY,CACV,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,GAC/B,aAAa;IAkChB;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa;IASjD;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAM9C;;;OAGG;IACH,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAI7C;;;OAGG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;;OAGG;IACH,6BAA6B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIpD;;;OAGG;IACH,mCAAmC,IAAI,OAAO;IAI9C;;;;OAIG;IACG,oBAAoB,CACxB,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAkBhB;;;;;OAKG;IACH,cAAc,CACZ,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,aAAa,GACrB,KAAK,CAAC;QACP,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;QACvC,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CA4CH;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,CAAC,EAAE,uBAAuB,GAChC,gBAAgB,CAElB"}
@@ -0,0 +1,309 @@
1
+ /**
2
+ * Configuration Normalizer
3
+ *
4
+ * Handles normalization logic for procman configuration files.
5
+ * Applies default values, normalizes paths, and expands environment variables.
6
+ */
7
+ import * as path from 'path';
8
+ /**
9
+ * Configuration normalizer class
10
+ * Responsible for applying defaults and normalizing procman configuration
11
+ */
12
+ export class ConfigNormalizer {
13
+ baseDirectory;
14
+ expandEnvVars;
15
+ constructor(options = {}) {
16
+ this.baseDirectory = options.baseDirectory || process.cwd();
17
+ this.expandEnvVars = options.expandEnvironmentVariables !== false;
18
+ }
19
+ /**
20
+ * Apply default values and normalize paths
21
+ * @param config Configuration to normalize
22
+ * @param originalPath Original configuration file path
23
+ * @returns Normalized configuration
24
+ */
25
+ normalizeConfig(config, originalPath) {
26
+ const defaultsApplied = [];
27
+ const configDir = path.dirname(path.resolve(originalPath));
28
+ const normalizedApps = config.apps.map((app, index) => {
29
+ const normalizedApp = { ...app };
30
+ // Apply defaults
31
+ if (!normalizedApp.cwd) {
32
+ normalizedApp.cwd = configDir;
33
+ defaultsApplied.push(`apps[${index}].cwd`);
34
+ }
35
+ if (!normalizedApp.env) {
36
+ normalizedApp.env = {};
37
+ defaultsApplied.push(`apps[${index}].env`);
38
+ }
39
+ // Normalize paths
40
+ normalizedApp.cwd = this.normalizePath(normalizedApp.cwd, configDir);
41
+ if (normalizedApp.log_file) {
42
+ normalizedApp.log_file = this.normalizePath(normalizedApp.log_file, configDir);
43
+ }
44
+ if (normalizedApp.out_file) {
45
+ normalizedApp.out_file = this.normalizePath(normalizedApp.out_file, configDir);
46
+ }
47
+ if (normalizedApp.error_file) {
48
+ normalizedApp.error_file = this.normalizePath(normalizedApp.error_file, configDir);
49
+ }
50
+ // Expand environment variables
51
+ if (this.expandEnvVars && normalizedApp.env) {
52
+ normalizedApp.env = this.expandEnvironmentVariables(normalizedApp.env);
53
+ }
54
+ return normalizedApp;
55
+ });
56
+ return {
57
+ apps: normalizedApps,
58
+ _metadata: {
59
+ originalPath,
60
+ normalizedPath: originalPath,
61
+ normalizedAt: Date.now(),
62
+ defaultsApplied,
63
+ },
64
+ };
65
+ }
66
+ /**
67
+ * Apply only default values without path normalization
68
+ * @param config Configuration to apply defaults to
69
+ * @param originalPath Original configuration file path
70
+ * @returns Configuration with defaults applied
71
+ */
72
+ applyDefaults(config, originalPath) {
73
+ const configDir = path.dirname(path.resolve(originalPath));
74
+ const appsWithDefaults = config.apps.map((app) => {
75
+ const appWithDefaults = { ...app };
76
+ // Apply defaults
77
+ if (!appWithDefaults.cwd) {
78
+ appWithDefaults.cwd = configDir;
79
+ }
80
+ if (!appWithDefaults.env) {
81
+ appWithDefaults.env = {};
82
+ }
83
+ return appWithDefaults;
84
+ });
85
+ return {
86
+ ...config,
87
+ apps: appsWithDefaults,
88
+ };
89
+ }
90
+ /**
91
+ * Normalize file paths (relative to absolute conversion)
92
+ * @param filePath File path to normalize
93
+ * @param basePath Base path to resolve relative paths against
94
+ * @returns Normalized absolute path
95
+ */
96
+ normalizePath(filePath, basePath) {
97
+ if (path.isAbsolute(filePath)) {
98
+ return path.normalize(filePath);
99
+ }
100
+ return path.normalize(path.join(basePath, filePath));
101
+ }
102
+ /**
103
+ * Expand environment variables in environment configuration
104
+ * @param env Environment variables object
105
+ * @returns Environment variables with expanded values
106
+ */
107
+ expandEnvironmentVariables(env) {
108
+ const expanded = {};
109
+ for (const [key, value] of Object.entries(env)) {
110
+ // Simple environment variable expansion
111
+ let expandedValue = value;
112
+ // Replace ${VAR} and $VAR patterns
113
+ expandedValue = expandedValue.replace(/\$\{([^}]+)\}/g, (_, varName) => {
114
+ return process.env[varName] || `\${${varName}}`;
115
+ });
116
+ expandedValue = expandedValue.replace(/\$([A-Z_][A-Z0-9_]*)/g, (_, varName) => {
117
+ return process.env[varName] || `$${varName}`;
118
+ });
119
+ expanded[key] = expandedValue;
120
+ }
121
+ return expanded;
122
+ }
123
+ /**
124
+ * Convert relative paths to absolute based on a base directory
125
+ * @param config Configuration to resolve paths for
126
+ * @param baseDir Base directory for path resolution
127
+ * @returns Configuration with resolved paths
128
+ */
129
+ resolvePaths(config, baseDir) {
130
+ const resolvedApps = config.apps.map((app) => {
131
+ const resolvedApp = { ...app };
132
+ // Resolve paths if they are relative
133
+ if (resolvedApp.cwd && !path.isAbsolute(resolvedApp.cwd)) {
134
+ resolvedApp.cwd = path.resolve(baseDir, resolvedApp.cwd);
135
+ }
136
+ if (resolvedApp.log_file && !path.isAbsolute(resolvedApp.log_file)) {
137
+ resolvedApp.log_file = path.resolve(baseDir, resolvedApp.log_file);
138
+ }
139
+ if (resolvedApp.out_file && !path.isAbsolute(resolvedApp.out_file)) {
140
+ resolvedApp.out_file = path.resolve(baseDir, resolvedApp.out_file);
141
+ }
142
+ if (resolvedApp.error_file && !path.isAbsolute(resolvedApp.error_file)) {
143
+ resolvedApp.error_file = path.resolve(baseDir, resolvedApp.error_file);
144
+ }
145
+ return resolvedApp;
146
+ });
147
+ return {
148
+ ...config,
149
+ apps: resolvedApps,
150
+ };
151
+ }
152
+ /**
153
+ * Merge two configurations, with the second overriding the first
154
+ * @param base Base configuration
155
+ * @param override Configuration to merge in
156
+ * @returns Merged configuration
157
+ */
158
+ mergeConfigs(base, override) {
159
+ const mergedApps = [...base.apps];
160
+ // If override has apps, merge them by name
161
+ if (override.apps) {
162
+ for (const overrideApp of override.apps) {
163
+ const existingIndex = mergedApps.findIndex((app) => app.name === overrideApp.name);
164
+ if (existingIndex !== -1) {
165
+ // Merge existing app
166
+ mergedApps[existingIndex] = {
167
+ ...mergedApps[existingIndex],
168
+ ...overrideApp,
169
+ env: {
170
+ ...mergedApps[existingIndex].env,
171
+ ...overrideApp.env,
172
+ },
173
+ };
174
+ }
175
+ else {
176
+ // Add new app
177
+ mergedApps.push(overrideApp);
178
+ }
179
+ }
180
+ }
181
+ return {
182
+ ...base,
183
+ ...override,
184
+ apps: mergedApps,
185
+ };
186
+ }
187
+ /**
188
+ * Deep clone configuration to avoid mutations
189
+ * @param config Configuration to clone
190
+ * @returns Cloned configuration
191
+ */
192
+ cloneConfig(config) {
193
+ return {
194
+ apps: config.apps.map((app) => ({
195
+ ...app,
196
+ env: app.env ? { ...app.env } : undefined,
197
+ })),
198
+ };
199
+ }
200
+ /**
201
+ * Validate that all required defaults have been applied
202
+ * @param config Configuration to validate
203
+ * @returns True if all defaults are present
204
+ */
205
+ hasAllDefaults(config) {
206
+ return config.apps.every((app) => {
207
+ return app.cwd !== undefined && app.env !== undefined;
208
+ });
209
+ }
210
+ /**
211
+ * Set base directory for path resolution
212
+ * @param baseDirectory New base directory
213
+ */
214
+ setBaseDirectory(baseDirectory) {
215
+ this.baseDirectory = baseDirectory;
216
+ }
217
+ /**
218
+ * Get current base directory
219
+ * @returns Current base directory
220
+ */
221
+ getBaseDirectory() {
222
+ return this.baseDirectory;
223
+ }
224
+ /**
225
+ * Enable or disable environment variable expansion
226
+ * @param enable Whether to enable expansion
227
+ */
228
+ setExpandEnvironmentVariables(enable) {
229
+ this.expandEnvVars = enable;
230
+ }
231
+ /**
232
+ * Check if environment variable expansion is enabled
233
+ * @returns True if expansion is enabled
234
+ */
235
+ isExpandEnvironmentVariablesEnabled() {
236
+ return this.expandEnvVars;
237
+ }
238
+ /**
239
+ * Save normalized configuration to file
240
+ * @param config Normalized configuration to save
241
+ * @param outputPath Output file path
242
+ */
243
+ async saveNormalizedConfig(config, outputPath) {
244
+ const configToSave = {
245
+ apps: config.apps,
246
+ // Don't save metadata
247
+ };
248
+ const configContent = `// Generated normalized configuration
249
+ // Original: ${config._metadata.originalPath}
250
+ // Normalized at: ${new Date(config._metadata.normalizedAt).toISOString()}
251
+ // Defaults applied: ${config._metadata.defaultsApplied.join(', ') || 'none'}
252
+
253
+ module.exports = ${JSON.stringify(configToSave, null, 2)};
254
+ `;
255
+ const fs = await import('fs');
256
+ await fs.promises.writeFile(outputPath, configContent, 'utf8');
257
+ }
258
+ /**
259
+ * Compare two configurations and return differences
260
+ * @param config1 First configuration
261
+ * @param config2 Second configuration
262
+ * @returns Array of differences
263
+ */
264
+ compareConfigs(config1, config2) {
265
+ const differences = [];
266
+ // Create Maps for O(1) lookup instead of O(n) with Array.find()
267
+ const apps1Map = new Map(config1.apps.map((app) => [app.name, app]));
268
+ const apps2Map = new Map(config2.apps.map((app) => [app.name, app]));
269
+ // Find added apps
270
+ for (const [appName, app] of Array.from(apps2Map.entries())) {
271
+ if (!apps1Map.has(appName)) {
272
+ differences.push({
273
+ type: 'added',
274
+ path: `apps.${appName}`,
275
+ newValue: app,
276
+ });
277
+ }
278
+ }
279
+ // Find removed and modified apps
280
+ for (const [appName, app1] of Array.from(apps1Map.entries())) {
281
+ const app2 = apps2Map.get(appName);
282
+ if (!app2) {
283
+ differences.push({
284
+ type: 'removed',
285
+ path: `apps.${appName}`,
286
+ oldValue: app1,
287
+ });
288
+ }
289
+ else if (JSON.stringify(app1) !== JSON.stringify(app2)) {
290
+ differences.push({
291
+ type: 'modified',
292
+ path: `apps.${appName}`,
293
+ oldValue: app1,
294
+ newValue: app2,
295
+ });
296
+ }
297
+ }
298
+ return differences;
299
+ }
300
+ }
301
+ /**
302
+ * Create a new configuration normalizer instance
303
+ * @param options Normalizer options
304
+ * @returns ConfigNormalizer instance
305
+ */
306
+ export function createConfigNormalizer(options) {
307
+ return new ConfigNormalizer(options);
308
+ }
309
+ //# sourceMappingURL=config-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-normalizer.js","sourceRoot":"","sources":["../../../src/config/config-normalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Configuration Reporter
3
+ *
4
+ * Handles reporting logic for procman configuration validation.
5
+ * Provides detailed validation reports and error tracking.
6
+ */
7
+ import { ProcmanConfig } from '../shared/config.js';
8
+ import { ProcmanError } from '../shared/errors.js';
9
+ /**
10
+ * Validation issue severity levels
11
+ */
12
+ export type ValidationSeverity = 'error' | 'warning' | 'info';
13
+ /**
14
+ * Validation issue details
15
+ */
16
+ export interface ValidationIssue {
17
+ /** Issue severity level */
18
+ severity: ValidationSeverity;
19
+ /** Issue category */
20
+ category: 'structure' | 'security' | 'performance' | 'compatibility';
21
+ /** Issue message */
22
+ message: string;
23
+ /** Location of the issue */
24
+ location?: {
25
+ appIndex?: number;
26
+ field?: string;
27
+ value?: string;
28
+ };
29
+ /** Suggested fix */
30
+ suggestion?: string;
31
+ }
32
+ /**
33
+ * Configuration validation report
34
+ */
35
+ export interface ValidationReport {
36
+ /** Whether validation passed */
37
+ success: boolean;
38
+ /** Configuration file path */
39
+ filePath: string;
40
+ /** Total number of apps */
41
+ appCount: number;
42
+ /** List of validation issues */
43
+ issues: ValidationIssue[];
44
+ /** Summary statistics */
45
+ summary: {
46
+ errors: number;
47
+ warnings: number;
48
+ infos: number;
49
+ };
50
+ /** Apps summary */
51
+ apps: Array<{
52
+ name: string;
53
+ script: string;
54
+ memoryLimit?: string;
55
+ hasEnvVars: boolean;
56
+ hasLogFiles: boolean;
57
+ }>;
58
+ }
59
+ /**
60
+ * Enhanced validation error with suggestions
61
+ */
62
+ export interface EnhancedValidationError extends ProcmanError {
63
+ suggestions: string[];
64
+ validationIssues: ValidationIssue[];
65
+ }
66
+ /**
67
+ * Configuration reporter options
68
+ */
69
+ export interface ConfigReporterOptions {
70
+ /** Whether to include detailed suggestions (default: true) */
71
+ includeSuggestions?: boolean;
72
+ /** Maximum number of issues to collect (default: 100) */
73
+ maxIssues?: number;
74
+ }
75
+ /**
76
+ * Configuration reporter class
77
+ * Responsible for generating validation reports and error messages
78
+ */
79
+ export declare class ConfigReporter {
80
+ private includeSuggestions;
81
+ private maxIssues;
82
+ private validationIssues;
83
+ private lastReport;
84
+ constructor(options?: ConfigReporterOptions);
85
+ /**
86
+ * Generate validation report for configuration
87
+ * @param config Validated configuration (or null if validation failed)
88
+ * @param filePath Path to configuration file
89
+ * @param issues Array of validation issues
90
+ * @returns Validation report
91
+ */
92
+ generateReport(config: ProcmanConfig | null, filePath: string, issues?: ValidationIssue[]): ValidationReport;
93
+ /**
94
+ * Generate report from validation attempt
95
+ * @param filePath Path to configuration file
96
+ * @param validationFunction Function that performs validation
97
+ * @returns Validation report
98
+ */
99
+ generateReportFromValidation(filePath: string, validationFunction: () => Promise<ProcmanConfig>): Promise<ValidationReport>;
100
+ /**
101
+ * Add validation issue to collection
102
+ * @param issue Validation issue to add
103
+ */
104
+ addValidationIssue(issue: ValidationIssue): void;
105
+ /**
106
+ * Get collected validation issues
107
+ * @returns Array of validation issues
108
+ */
109
+ getValidationIssues(): ValidationIssue[];
110
+ /**
111
+ * Clear collected validation issues
112
+ */
113
+ clearValidationIssues(): void;
114
+ /**
115
+ * Get last validation report
116
+ * @returns Last validation report or null
117
+ */
118
+ getLastReport(): ValidationReport | null;
119
+ /**
120
+ * Calculate summary statistics from issues
121
+ * @param issues Array of validation issues
122
+ * @returns Summary object with counts
123
+ */
124
+ calculateSummary(issues: ValidationIssue[]): {
125
+ errors: number;
126
+ warnings: number;
127
+ infos: number;
128
+ };
129
+ /**
130
+ * Create enhanced validation error with suggestions
131
+ * @param originalError Original error
132
+ * @param issues Validation issues
133
+ * @returns Enhanced validation error
134
+ */
135
+ createEnhancedValidationError(originalError: ProcmanError, issues?: ValidationIssue[]): EnhancedValidationError;
136
+ /**
137
+ * Generate suggestions for validation errors
138
+ * @param errorCode Error code
139
+ * @param field Field name (optional)
140
+ * @returns Array of suggestions
141
+ */
142
+ generateSuggestions(errorCode: string, field?: string): string[];
143
+ /**
144
+ * Format validation report as human-readable text
145
+ * @param report Validation report to format
146
+ * @returns Formatted report text
147
+ */
148
+ formatReport(report: ValidationReport): string;
149
+ /**
150
+ * Format validation report as JSON
151
+ * @param report Validation report to format
152
+ * @param pretty Whether to pretty-print JSON (default: false)
153
+ * @returns JSON string
154
+ */
155
+ formatReportAsJson(report: ValidationReport, pretty?: boolean): string;
156
+ /**
157
+ * Set whether to include suggestions in reports
158
+ * @param include Whether to include suggestions
159
+ */
160
+ setIncludeSuggestions(include: boolean): void;
161
+ /**
162
+ * Get whether suggestions are included in reports
163
+ * @returns True if suggestions are included
164
+ */
165
+ isIncludingSuggestions(): boolean;
166
+ /**
167
+ * Set maximum number of issues to collect
168
+ * @param maxIssues Maximum number of issues
169
+ */
170
+ setMaxIssues(maxIssues: number): void;
171
+ /**
172
+ * Get maximum number of issues to collect
173
+ * @returns Maximum number of issues
174
+ */
175
+ getMaxIssues(): number;
176
+ }
177
+ /**
178
+ * Create a new configuration reporter instance
179
+ * @param options Reporter options
180
+ * @returns ConfigReporter instance
181
+ */
182
+ export declare function createConfigReporter(options?: ConfigReporterOptions): ConfigReporter;
183
+ //# sourceMappingURL=config-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-reporter.d.ts","sourceRoot":"","sources":["../../../src/config/config-reporter.ts"],"names":[],"mappings":"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"}