@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,65 @@
1
+ /**
2
+ * Log Manager Configuration
3
+ *
4
+ * Uncle Bob's guidance: Externalize magic numbers and make them configurable
5
+ * 設定値の外部化と設定可能なパラメータとしての実装
6
+ */
7
+ /**
8
+ * ログマネージャーの設定インターフェース
9
+ */
10
+ export interface LogManagerConfig {
11
+ /** 最大ログメッセージサイズ(デフォルト: 1MB) */
12
+ maxLogMessageSize: number;
13
+ /** バッファ設定 */
14
+ buffer: {
15
+ /** 最大バッファサイズ(デフォルト: 10MB) */
16
+ maxSize: number;
17
+ /** フラッシュ間隔(ms)(デフォルト: 100ms) */
18
+ flushInterval: number;
19
+ /** バックプレッシャー閾値(デフォルト: 5MB) */
20
+ backpressureThreshold: number;
21
+ };
22
+ /** ファイル操作設定 */
23
+ file: {
24
+ /** ディレクトリのパーミッション(デフォルト: 0o700) */
25
+ directoryMode: number;
26
+ /** ファイルのパーミッション(デフォルト: 0o644) */
27
+ fileMode: number;
28
+ /** 読み込みチャンクサイズ(デフォルト: 8192) */
29
+ chunkSize: number;
30
+ /** 書き込みリトライ回数(デフォルト: 3) */
31
+ maxRetries: number;
32
+ /** リトライ間隔のベース時間(ms)(デフォルト: 100) */
33
+ retryBaseDelay: number;
34
+ };
35
+ /** パフォーマンス設定 */
36
+ performance: {
37
+ /** 小さなファイルの閾値(デフォルト: 8KB) */
38
+ smallFileThreshold: number;
39
+ };
40
+ }
41
+ /**
42
+ * デフォルトのログマネージャー設定
43
+ */
44
+ export declare const DEFAULT_LOG_MANAGER_CONFIG: LogManagerConfig;
45
+ /**
46
+ * 設定のマージ機能
47
+ */
48
+ export declare function mergeLogManagerConfig(customConfig?: Partial<LogManagerConfig>): LogManagerConfig;
49
+ /**
50
+ * 設定値の検証
51
+ */
52
+ export declare function validateLogManagerConfig(config: LogManagerConfig): void;
53
+ /**
54
+ * 開発・テスト用の設定プリセット
55
+ */
56
+ export declare const DEV_LOG_MANAGER_CONFIG: LogManagerConfig;
57
+ /**
58
+ * 本番用の設定プリセット
59
+ */
60
+ export declare const PRODUCTION_LOG_MANAGER_CONFIG: LogManagerConfig;
61
+ /**
62
+ * 高パフォーマンス用の設定プリセット
63
+ */
64
+ export declare const HIGH_PERFORMANCE_LOG_MANAGER_CONFIG: LogManagerConfig;
65
+ //# sourceMappingURL=log-manager-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-manager-config.d.ts","sourceRoot":"","sources":["../../../src/services/log-manager-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,aAAa;IACb,MAAM,EAAE;QACN,6BAA6B;QAC7B,OAAO,EAAE,MAAM,CAAC;QAChB,gCAAgC;QAChC,aAAa,EAAE,MAAM,CAAC;QACtB,8BAA8B;QAC9B,qBAAqB,EAAE,MAAM,CAAC;KAC/B,CAAC;IAEF,eAAe;IACf,IAAI,EAAE;QACJ,mCAAmC;QACnC,aAAa,EAAE,MAAM,CAAC;QACtB,iCAAiC;QACjC,QAAQ,EAAE,MAAM,CAAC;QACjB,+BAA+B;QAC/B,SAAS,EAAE,MAAM,CAAC;QAClB,2BAA2B;QAC3B,UAAU,EAAE,MAAM,CAAC;QACnB,mCAAmC;QACnC,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IAEF,gBAAgB;IAChB,WAAW,EAAE;QACX,6BAA6B;QAC7B,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AAED;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,gBAoBxC,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,GAAE,OAAO,CAAC,gBAAgB,CAAM,GAC3C,gBAAgB,CAyClB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAuCvE;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,gBAWpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,6BAA6B,EAAE,gBAY3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mCAAmC,EAAE,gBAiBjD,CAAC"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Log Manager Configuration
3
+ *
4
+ * Uncle Bob's guidance: Externalize magic numbers and make them configurable
5
+ * 設定値の外部化と設定可能なパラメータとしての実装
6
+ */
7
+ /**
8
+ * デフォルトのログマネージャー設定
9
+ */
10
+ export const DEFAULT_LOG_MANAGER_CONFIG = {
11
+ maxLogMessageSize: 1024 * 1024, // 1MB
12
+ buffer: {
13
+ maxSize: 10 * 1024 * 1024, // 10MB
14
+ flushInterval: 100, // 100ms
15
+ backpressureThreshold: 5 * 1024 * 1024, // 5MB
16
+ },
17
+ file: {
18
+ directoryMode: 0o700,
19
+ fileMode: 0o644,
20
+ chunkSize: 8192, // 8KB
21
+ maxRetries: 3,
22
+ retryBaseDelay: 100, // 100ms
23
+ },
24
+ performance: {
25
+ smallFileThreshold: 8192, // 8KB
26
+ },
27
+ };
28
+ /**
29
+ * 設定のマージ機能
30
+ */
31
+ export function mergeLogManagerConfig(customConfig = {}) {
32
+ return {
33
+ maxLogMessageSize: customConfig.maxLogMessageSize ??
34
+ DEFAULT_LOG_MANAGER_CONFIG.maxLogMessageSize,
35
+ buffer: {
36
+ maxSize: customConfig.buffer?.maxSize ??
37
+ DEFAULT_LOG_MANAGER_CONFIG.buffer.maxSize,
38
+ flushInterval: customConfig.buffer?.flushInterval ??
39
+ DEFAULT_LOG_MANAGER_CONFIG.buffer.flushInterval,
40
+ backpressureThreshold: customConfig.buffer?.backpressureThreshold ??
41
+ DEFAULT_LOG_MANAGER_CONFIG.buffer.backpressureThreshold,
42
+ },
43
+ file: {
44
+ directoryMode: customConfig.file?.directoryMode ??
45
+ DEFAULT_LOG_MANAGER_CONFIG.file.directoryMode,
46
+ fileMode: customConfig.file?.fileMode ?? DEFAULT_LOG_MANAGER_CONFIG.file.fileMode,
47
+ chunkSize: customConfig.file?.chunkSize ??
48
+ DEFAULT_LOG_MANAGER_CONFIG.file.chunkSize,
49
+ maxRetries: customConfig.file?.maxRetries ??
50
+ DEFAULT_LOG_MANAGER_CONFIG.file.maxRetries,
51
+ retryBaseDelay: customConfig.file?.retryBaseDelay ??
52
+ DEFAULT_LOG_MANAGER_CONFIG.file.retryBaseDelay,
53
+ },
54
+ performance: {
55
+ smallFileThreshold: customConfig.performance?.smallFileThreshold ??
56
+ DEFAULT_LOG_MANAGER_CONFIG.performance.smallFileThreshold,
57
+ },
58
+ };
59
+ }
60
+ /**
61
+ * 設定値の検証
62
+ */
63
+ export function validateLogManagerConfig(config) {
64
+ // 基本的な数値の範囲チェック
65
+ if (config.maxLogMessageSize <= 0) {
66
+ throw new Error('maxLogMessageSize must be greater than 0');
67
+ }
68
+ if (config.buffer.maxSize <= 0) {
69
+ throw new Error('buffer.maxSize must be greater than 0');
70
+ }
71
+ if (config.buffer.flushInterval <= 0) {
72
+ throw new Error('buffer.flushInterval must be greater than 0');
73
+ }
74
+ if (config.buffer.backpressureThreshold <= 0) {
75
+ throw new Error('buffer.backpressureThreshold must be greater than 0');
76
+ }
77
+ if (config.buffer.backpressureThreshold > config.buffer.maxSize) {
78
+ throw new Error('buffer.backpressureThreshold must not exceed buffer.maxSize');
79
+ }
80
+ if (config.file.chunkSize <= 0) {
81
+ throw new Error('file.chunkSize must be greater than 0');
82
+ }
83
+ if (config.file.maxRetries < 1) {
84
+ throw new Error('file.maxRetries must be at least 1');
85
+ }
86
+ if (config.file.retryBaseDelay < 0) {
87
+ throw new Error('file.retryBaseDelay must not be negative');
88
+ }
89
+ if (config.performance.smallFileThreshold <= 0) {
90
+ throw new Error('performance.smallFileThreshold must be greater than 0');
91
+ }
92
+ }
93
+ /**
94
+ * 開発・テスト用の設定プリセット
95
+ */
96
+ export const DEV_LOG_MANAGER_CONFIG = {
97
+ ...DEFAULT_LOG_MANAGER_CONFIG,
98
+ buffer: {
99
+ ...DEFAULT_LOG_MANAGER_CONFIG.buffer,
100
+ flushInterval: 50, // より頻繁なフラッシュ
101
+ },
102
+ file: {
103
+ ...DEFAULT_LOG_MANAGER_CONFIG.file,
104
+ maxRetries: 1, // テストでは早く失敗
105
+ retryBaseDelay: 10, // 短いディレイ
106
+ },
107
+ };
108
+ /**
109
+ * 本番用の設定プリセット
110
+ */
111
+ export const PRODUCTION_LOG_MANAGER_CONFIG = {
112
+ ...DEFAULT_LOG_MANAGER_CONFIG,
113
+ buffer: {
114
+ ...DEFAULT_LOG_MANAGER_CONFIG.buffer,
115
+ maxSize: 50 * 1024 * 1024, // 50MB - より大きなバッファ
116
+ backpressureThreshold: 25 * 1024 * 1024, // 25MB
117
+ },
118
+ file: {
119
+ ...DEFAULT_LOG_MANAGER_CONFIG.file,
120
+ maxRetries: 5, // より多いリトライ
121
+ retryBaseDelay: 200, // より長いディレイ
122
+ },
123
+ };
124
+ /**
125
+ * 高パフォーマンス用の設定プリセット
126
+ */
127
+ export const HIGH_PERFORMANCE_LOG_MANAGER_CONFIG = {
128
+ ...DEFAULT_LOG_MANAGER_CONFIG,
129
+ maxLogMessageSize: 256 * 1024, // 256KB - 短いメッセージ
130
+ buffer: {
131
+ ...DEFAULT_LOG_MANAGER_CONFIG.buffer,
132
+ maxSize: 100 * 1024 * 1024, // 100MB - 非常に大きなバッファ
133
+ flushInterval: 200, // より低頻度のフラッシュ
134
+ backpressureThreshold: 75 * 1024 * 1024, // 75MB
135
+ },
136
+ file: {
137
+ ...DEFAULT_LOG_MANAGER_CONFIG.file,
138
+ chunkSize: 64 * 1024, // 64KB - より大きなチャンク
139
+ },
140
+ performance: {
141
+ ...DEFAULT_LOG_MANAGER_CONFIG.performance,
142
+ smallFileThreshold: 64 * 1024, // 64KB
143
+ },
144
+ };
145
+ //# sourceMappingURL=log-manager-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-manager-config.js","sourceRoot":"","sources":["../../../src/services/log-manager-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Log Manager Factory Pattern Implementation
3
+ *
4
+ * Uncle Bob's guidance: Factory pattern for organized object creation
5
+ * DI Container pattern for better testability and flexibility
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import { LogManager } from './log-manager.js';
9
+ import { LogManagerConfig } from './log-manager-config.js';
10
+ /**
11
+ * ログマネージャーのファクトリーインターフェース(Abstract Factory パターン)
12
+ */
13
+ export interface ILogManagerFactory {
14
+ /**
15
+ * ログマネージャーの作成
16
+ */
17
+ createLogManager(logDir?: string, config?: Partial<LogManagerConfig>): LogManager;
18
+ /**
19
+ * 設定を使用してログマネージャーを作成
20
+ */
21
+ createLogManagerWithConfig(logDir: string, config: LogManagerConfig): LogManager;
22
+ }
23
+ /**
24
+ * 依存性注入のためのサービスコンテナ
25
+ */
26
+ export interface IServiceContainer {
27
+ /** ファイルマネージャーファクトリー */
28
+ fileManagerFactory?: () => IFileManager;
29
+ /** ログプリプロセッサーファクトリー */
30
+ logPreprocessorFactory?: () => ILogPreprocessor;
31
+ /** ログレベル戦略ファクトリー */
32
+ logLevelStrategyFactory?: () => ILogLevelStrategy;
33
+ /** イベントマネージャーファクトリー */
34
+ eventManagerFactory?: (eventEmitter: EventEmitter) => IEventManager;
35
+ }
36
+ /**
37
+ * インターフェースのインポート(循環参照を避けるため、ここで定義)
38
+ */
39
+ interface IFileManager {
40
+ ensureFileExists(filePath: string): void;
41
+ ensureLogDirectory(logDir: string): void;
42
+ readTailLines(filePath: string, maxLines: number): Promise<string[]>;
43
+ writeToFileWithRetry(filePath: string, content: string, maxRetries: number): Promise<void>;
44
+ }
45
+ interface ILogPreprocessor {
46
+ preprocessMessage(message: string): string;
47
+ }
48
+ interface ILogLevelStrategy {
49
+ determineLevel(type: 'stdout' | 'stderr', message: string): 'info' | 'warn' | 'error';
50
+ }
51
+ interface IEventManager {
52
+ emitLogEvent(logEntry: any): void;
53
+ emitFileChangeEvent(data: any): void;
54
+ emitDiskSpaceErrorEvent(data: any): void;
55
+ }
56
+ /**
57
+ * デフォルトのログマネージャーファクトリー実装
58
+ */
59
+ export declare class DefaultLogManagerFactory implements ILogManagerFactory {
60
+ private serviceContainer;
61
+ constructor(serviceContainer?: IServiceContainer);
62
+ /**
63
+ * ログマネージャーの作成(設定をマージ)
64
+ */
65
+ createLogManager(logDir?: string, config?: Partial<LogManagerConfig>): LogManager;
66
+ /**
67
+ * 設定を使用してログマネージャーを作成
68
+ */
69
+ createLogManagerWithConfig(logDir: string): LogManager;
70
+ /**
71
+ * デフォルトのログディレクトリパスを取得
72
+ */
73
+ private getDefaultLogDir;
74
+ /**
75
+ * デフォルトのファイルマネージャーを作成
76
+ */
77
+ private createDefaultFileManager;
78
+ }
79
+ /**
80
+ * テスト用のログマネージャーファクトリー
81
+ */
82
+ export declare class TestLogManagerFactory implements ILogManagerFactory {
83
+ private mockFileManager?;
84
+ private mockLogPreprocessor?;
85
+ private mockLogLevelStrategy?;
86
+ private mockEventManager?;
87
+ constructor(mockFileManager?: IFileManager | undefined, mockLogPreprocessor?: ILogPreprocessor | undefined, mockLogLevelStrategy?: ILogLevelStrategy | undefined, mockEventManager?: IEventManager | undefined);
88
+ createLogManager(logDir?: string): LogManager;
89
+ createLogManagerWithConfig(logDir: string): LogManager;
90
+ }
91
+ /**
92
+ * 開発用のログマネージャーファクトリー
93
+ */
94
+ export declare class DevelopmentLogManagerFactory implements ILogManagerFactory {
95
+ createLogManager(logDir?: string, config?: Partial<LogManagerConfig>): LogManager;
96
+ createLogManagerWithConfig(logDir: string, config: LogManagerConfig): LogManager;
97
+ private getDevLogDir;
98
+ }
99
+ /**
100
+ * 本番用のログマネージャーファクトリー
101
+ */
102
+ export declare class ProductionLogManagerFactory implements ILogManagerFactory {
103
+ createLogManager(logDir?: string, config?: Partial<LogManagerConfig>): LogManager;
104
+ createLogManagerWithConfig(logDir: string, config: LogManagerConfig): LogManager;
105
+ private getProdLogDir;
106
+ }
107
+ /**
108
+ * ファクトリーレジストリ(Registry パターン)
109
+ */
110
+ export declare class LogManagerFactoryRegistry {
111
+ private static factories;
112
+ /**
113
+ * ファクトリーの登録
114
+ */
115
+ static registerFactory(name: string, factory: ILogManagerFactory): void;
116
+ /**
117
+ * ファクトリーの取得
118
+ */
119
+ static getFactory(name: string): ILogManagerFactory;
120
+ /**
121
+ * デフォルトファクトリーの設定
122
+ */
123
+ static setDefaultFactories(): void;
124
+ /**
125
+ * 環境に応じたファクトリーの取得
126
+ */
127
+ static getFactoryForEnvironment(): ILogManagerFactory;
128
+ }
129
+ /**
130
+ * 簡単にログマネージャーを作成するためのヘルパー関数
131
+ */
132
+ export declare function createLogManager(environment?: string, logDir?: string, config?: Partial<LogManagerConfig>): LogManager;
133
+ export {};
134
+ //# sourceMappingURL=log-manager-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-manager-factory.d.ts","sourceRoot":"","sources":["../../../src/services/log-manager-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Log Manager Factory Pattern Implementation
3
+ *
4
+ * Uncle Bob's guidance: Factory pattern for organized object creation
5
+ * DI Container pattern for better testability and flexibility
6
+ */
7
+ import * as os from 'os';
8
+ import * as path from 'path';
9
+ import { LogManager } from './log-manager.js';
10
+ import { mergeLogManagerConfig, validateLogManagerConfig, } from './log-manager-config.js';
11
+ /**
12
+ * デフォルトのログマネージャーファクトリー実装
13
+ */
14
+ export class DefaultLogManagerFactory {
15
+ serviceContainer;
16
+ constructor(serviceContainer = {}) {
17
+ this.serviceContainer = serviceContainer;
18
+ }
19
+ /**
20
+ * ログマネージャーの作成(設定をマージ)
21
+ */
22
+ createLogManager(logDir, config = {}) {
23
+ // 設定をマージして検証
24
+ const mergedConfig = mergeLogManagerConfig(config);
25
+ validateLogManagerConfig(mergedConfig);
26
+ return this.createLogManagerWithConfig(logDir || this.getDefaultLogDir());
27
+ }
28
+ /**
29
+ * 設定を使用してログマネージャーを作成
30
+ */
31
+ createLogManagerWithConfig(logDir) {
32
+ // ファイルマネージャーを作成(DI)
33
+ const fileManager = this.serviceContainer.fileManagerFactory?.() ||
34
+ this.createDefaultFileManager();
35
+ // ログマネージャーを作成
36
+ return new LogManager(logDir, fileManager);
37
+ }
38
+ /**
39
+ * デフォルトのログディレクトリパスを取得
40
+ */
41
+ getDefaultLogDir() {
42
+ // Enhanced HOME detection: process.env.HOME || os.homedir()
43
+ const homeDir = process.env.HOME || os.homedir();
44
+ if (!homeDir) {
45
+ throw new Error('Unable to determine home directory for log path');
46
+ }
47
+ return path.join(homeDir, '.masuidrive-procman', 'app-logs');
48
+ }
49
+ /**
50
+ * デフォルトのファイルマネージャーを作成
51
+ */
52
+ createDefaultFileManager() {
53
+ // 設定を注入したFileManagerの作成
54
+ // 注意:実際の実装では、FileManagerクラスのコンストラクタに設定を渡す必要があります
55
+ // TODO: FileManagerの実装を追加
56
+ throw new Error('FileManager implementation not available');
57
+ }
58
+ }
59
+ /**
60
+ * テスト用のログマネージャーファクトリー
61
+ */
62
+ export class TestLogManagerFactory {
63
+ mockFileManager;
64
+ mockLogPreprocessor;
65
+ mockLogLevelStrategy;
66
+ mockEventManager;
67
+ constructor(mockFileManager, mockLogPreprocessor, mockLogLevelStrategy, mockEventManager) {
68
+ this.mockFileManager = mockFileManager;
69
+ this.mockLogPreprocessor = mockLogPreprocessor;
70
+ this.mockLogLevelStrategy = mockLogLevelStrategy;
71
+ this.mockEventManager = mockEventManager;
72
+ }
73
+ createLogManager(logDir) {
74
+ return this.createLogManagerWithConfig(logDir || '/tmp/test-logs');
75
+ }
76
+ createLogManagerWithConfig(logDir) {
77
+ // テスト用のモックを注入
78
+ return new LogManager(logDir, this.mockFileManager);
79
+ }
80
+ }
81
+ /**
82
+ * 開発用のログマネージャーファクトリー
83
+ */
84
+ export class DevelopmentLogManagerFactory {
85
+ createLogManager(logDir, config = {}) {
86
+ // 開発用の設定を適用
87
+ const baseConfig = mergeLogManagerConfig(config);
88
+ const devConfig = {
89
+ ...baseConfig,
90
+ buffer: {
91
+ ...baseConfig.buffer,
92
+ flushInterval: 50, // より頻繁なフラッシュ
93
+ },
94
+ };
95
+ return this.createLogManagerWithConfig(logDir || this.getDevLogDir(), devConfig);
96
+ }
97
+ createLogManagerWithConfig(logDir, config) {
98
+ validateLogManagerConfig(config);
99
+ return new LogManager(logDir);
100
+ }
101
+ getDevLogDir() {
102
+ return path.join(process.cwd(), 'logs', 'dev');
103
+ }
104
+ }
105
+ /**
106
+ * 本番用のログマネージャーファクトリー
107
+ */
108
+ export class ProductionLogManagerFactory {
109
+ createLogManager(logDir, config = {}) {
110
+ // 本番用の設定を適用
111
+ const baseConfig = mergeLogManagerConfig(config);
112
+ const prodConfig = {
113
+ ...baseConfig,
114
+ buffer: {
115
+ ...baseConfig.buffer,
116
+ maxSize: 50 * 1024 * 1024, // 50MB
117
+ backpressureThreshold: 25 * 1024 * 1024, // 25MB
118
+ },
119
+ file: {
120
+ ...baseConfig.file,
121
+ maxRetries: 5, // より多いリトライ
122
+ },
123
+ };
124
+ return this.createLogManagerWithConfig(logDir || this.getProdLogDir(), prodConfig);
125
+ }
126
+ createLogManagerWithConfig(logDir, config) {
127
+ validateLogManagerConfig(config);
128
+ return new LogManager(logDir);
129
+ }
130
+ getProdLogDir() {
131
+ // Enhanced HOME detection: process.env.HOME || os.homedir()
132
+ const homeDir = process.env.HOME || os.homedir();
133
+ if (!homeDir) {
134
+ throw new Error('Unable to determine home directory for log path');
135
+ }
136
+ return path.join(homeDir, '.masuidrive-procman', 'app-logs');
137
+ }
138
+ }
139
+ /**
140
+ * ファクトリーレジストリ(Registry パターン)
141
+ */
142
+ export class LogManagerFactoryRegistry {
143
+ static factories = new Map();
144
+ /**
145
+ * ファクトリーの登録
146
+ */
147
+ static registerFactory(name, factory) {
148
+ this.factories.set(name, factory);
149
+ }
150
+ /**
151
+ * ファクトリーの取得
152
+ */
153
+ static getFactory(name) {
154
+ const factory = this.factories.get(name);
155
+ if (!factory) {
156
+ throw new Error(`Factory not found: ${name}`);
157
+ }
158
+ return factory;
159
+ }
160
+ /**
161
+ * デフォルトファクトリーの設定
162
+ */
163
+ static setDefaultFactories() {
164
+ this.registerFactory('default', new DefaultLogManagerFactory());
165
+ this.registerFactory('test', new TestLogManagerFactory());
166
+ this.registerFactory('development', new DevelopmentLogManagerFactory());
167
+ this.registerFactory('production', new ProductionLogManagerFactory());
168
+ }
169
+ /**
170
+ * 環境に応じたファクトリーの取得
171
+ */
172
+ static getFactoryForEnvironment() {
173
+ const env = process.env.NODE_ENV || 'development';
174
+ // 環境に応じたファクトリーを返す
175
+ switch (env) {
176
+ case 'production':
177
+ return this.getFactory('production');
178
+ case 'test':
179
+ return this.getFactory('test');
180
+ case 'development':
181
+ default:
182
+ return this.getFactory('development');
183
+ }
184
+ }
185
+ }
186
+ // デフォルトファクトリーの登録
187
+ LogManagerFactoryRegistry.setDefaultFactories();
188
+ /**
189
+ * 簡単にログマネージャーを作成するためのヘルパー関数
190
+ */
191
+ export function createLogManager(environment, logDir, config) {
192
+ let factory;
193
+ if (environment) {
194
+ factory = LogManagerFactoryRegistry.getFactory(environment);
195
+ }
196
+ else {
197
+ factory = LogManagerFactoryRegistry.getFactoryForEnvironment();
198
+ }
199
+ return factory.createLogManager(logDir, config);
200
+ }
201
+ // Builder パターンは型の複雑さのため一時的にコメントアウト
202
+ // 基本的なFactory機能の動作確認後に再実装する
203
+ //# sourceMappingURL=log-manager-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-manager-factory.js","sourceRoot":"","sources":["../../../src/services/log-manager-factory.ts"],"names":[],"mappings":"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"}