@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,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IPC Client Base Implementation
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class for IPC client implementations.
|
|
5
|
+
* Provides common functionality for both Unix Domain Socket and Named Pipe clients.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
import { setTimeout } from 'timers';
|
|
9
|
+
import { SimpleDisposableBase, SimpleTimeout, SimpleInterval } from './simple-resource-manager.js';
|
|
10
|
+
import type { IPCMessage, IPCResponse, IPCLogStreamMessage, IPCClientConfig, IPCConnectionStatus, CommandType, IPCClientEvents, IPCCommandPayloadMap } from '../shared/ipc.js';
|
|
11
|
+
/**
|
|
12
|
+
* Pending request information
|
|
13
|
+
*/
|
|
14
|
+
interface PendingRequest {
|
|
15
|
+
id: string;
|
|
16
|
+
resolve: (response: IPCResponse) => void;
|
|
17
|
+
reject: (error: Error) => void;
|
|
18
|
+
timeout: ReturnType<typeof setTimeout>;
|
|
19
|
+
timestamp: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Abstract base class for IPC clients
|
|
23
|
+
*/
|
|
24
|
+
export declare abstract class IPCClientBase extends SimpleDisposableBase {
|
|
25
|
+
protected config: Required<IPCClientConfig>;
|
|
26
|
+
protected connectionStatus: IPCConnectionStatus;
|
|
27
|
+
protected clientInstance: EventEmitter | null;
|
|
28
|
+
protected pendingRequests: Map<string, PendingRequest>;
|
|
29
|
+
protected reconnectTimer: SimpleTimeout | null;
|
|
30
|
+
protected heartbeatTimer: SimpleInterval | null;
|
|
31
|
+
protected lastActivity: number;
|
|
32
|
+
protected lastPongReceived: number;
|
|
33
|
+
protected pendingPingId: string | null;
|
|
34
|
+
private eventEmitter;
|
|
35
|
+
constructor(config?: IPCClientConfig);
|
|
36
|
+
/**
|
|
37
|
+
* Connect to the IPC server
|
|
38
|
+
*/
|
|
39
|
+
connect(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Disconnect from the IPC server
|
|
42
|
+
*/
|
|
43
|
+
disconnect(): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Send a command and wait for response
|
|
46
|
+
*/
|
|
47
|
+
sendCommand<T extends CommandType>(type: T, payload: IPCCommandPayloadMap[T], timeout?: number): Promise<IPCResponse>;
|
|
48
|
+
/**
|
|
49
|
+
* Send a message and wait for response
|
|
50
|
+
*/
|
|
51
|
+
sendMessage(message: IPCMessage, timeout?: number): Promise<IPCResponse>;
|
|
52
|
+
/**
|
|
53
|
+
* Send a message without waiting for response
|
|
54
|
+
*/
|
|
55
|
+
sendRawMessage(message: IPCMessage): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Get current connection status
|
|
58
|
+
*/
|
|
59
|
+
getConnectionStatus(): IPCConnectionStatus;
|
|
60
|
+
/**
|
|
61
|
+
* Check if client is connected
|
|
62
|
+
*/
|
|
63
|
+
isConnected(): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Get number of pending requests
|
|
66
|
+
*/
|
|
67
|
+
getPendingRequestCount(): number;
|
|
68
|
+
/**
|
|
69
|
+
* Handle incoming data from server
|
|
70
|
+
*/
|
|
71
|
+
protected handleData(data: Buffer): void;
|
|
72
|
+
/**
|
|
73
|
+
* Parse multiple JSON messages from buffer
|
|
74
|
+
* Addresses the PoC issue with consecutive message parsing
|
|
75
|
+
*/
|
|
76
|
+
protected parseMessages(data: Buffer): unknown[];
|
|
77
|
+
/**
|
|
78
|
+
* Handle concatenated JSON objects in a single line
|
|
79
|
+
* Uses simplified regex approach consistent with message-protocol.ts
|
|
80
|
+
*/
|
|
81
|
+
private handleConcatenatedJSON;
|
|
82
|
+
/**
|
|
83
|
+
* Process a single parsed message
|
|
84
|
+
*/
|
|
85
|
+
protected processMessage(messageData: unknown): void;
|
|
86
|
+
/**
|
|
87
|
+
* Handle response message
|
|
88
|
+
*/
|
|
89
|
+
protected handleResponse(message: IPCResponse): void;
|
|
90
|
+
/**
|
|
91
|
+
* Handle log stream message
|
|
92
|
+
*/
|
|
93
|
+
protected handleLogStreamMessage(message: IPCLogStreamMessage): void;
|
|
94
|
+
/**
|
|
95
|
+
* Handle connection error
|
|
96
|
+
*/
|
|
97
|
+
protected handleConnectionError(error: Error): void;
|
|
98
|
+
/**
|
|
99
|
+
* Set connection status and emit event
|
|
100
|
+
*/
|
|
101
|
+
protected setConnectionStatus(status: IPCConnectionStatus): void;
|
|
102
|
+
/**
|
|
103
|
+
* Schedule reconnection attempt
|
|
104
|
+
*/
|
|
105
|
+
protected scheduleReconnect(): void;
|
|
106
|
+
/**
|
|
107
|
+
* Clear reconnect timer
|
|
108
|
+
*/
|
|
109
|
+
protected clearReconnectTimer(): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Start heartbeat mechanism
|
|
112
|
+
*/
|
|
113
|
+
protected startHeartbeat(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Clear heartbeat timer
|
|
116
|
+
*/
|
|
117
|
+
protected clearHeartbeatTimer(): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Implement disposal core for SimpleDisposableBase
|
|
120
|
+
*/
|
|
121
|
+
protected disposeCore(): void;
|
|
122
|
+
/**
|
|
123
|
+
* Get current resource usage statistics
|
|
124
|
+
*/
|
|
125
|
+
getResourceStats(): {
|
|
126
|
+
pendingRequests: number;
|
|
127
|
+
timeouts: number;
|
|
128
|
+
intervals: number;
|
|
129
|
+
eventListeners: number;
|
|
130
|
+
totalResources: number;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* TypedEventEmitter implementation methods
|
|
134
|
+
*/
|
|
135
|
+
on<K extends keyof IPCClientEvents>(event: K, listener: IPCClientEvents[K]): this;
|
|
136
|
+
once<K extends keyof IPCClientEvents>(event: K, listener: IPCClientEvents[K]): this;
|
|
137
|
+
emit<K extends keyof IPCClientEvents>(event: K, ...args: Parameters<IPCClientEvents[K]>): boolean;
|
|
138
|
+
removeListener<K extends keyof IPCClientEvents>(event: K, listener: IPCClientEvents[K]): this;
|
|
139
|
+
off<K extends keyof IPCClientEvents>(event: K, listener: IPCClientEvents[K]): this;
|
|
140
|
+
removeAllListeners<K extends keyof IPCClientEvents>(event?: K): this;
|
|
141
|
+
setMaxListeners(n: number): this;
|
|
142
|
+
getMaxListeners(): number;
|
|
143
|
+
listeners<K extends keyof IPCClientEvents>(event: K): ((...args: any[]) => void)[];
|
|
144
|
+
listenerCount<K extends keyof IPCClientEvents>(event: K): number;
|
|
145
|
+
/**
|
|
146
|
+
* Abstract methods to be implemented by subclasses
|
|
147
|
+
*/
|
|
148
|
+
protected abstract connectToServer(): Promise<void>;
|
|
149
|
+
protected abstract disconnectFromServer(): Promise<void>;
|
|
150
|
+
protected abstract writeMessage(message: IPCMessage): Promise<void>;
|
|
151
|
+
}
|
|
152
|
+
export {};
|
|
153
|
+
//# sourceMappingURL=ipc-client-base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipc-client-base.d.ts","sourceRoot":"","sources":["../../../src/daemon/ipc-client-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IPC Client Base Implementation
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class for IPC client implementations.
|
|
5
|
+
* Provides common functionality for both Unix Domain Socket and Named Pipe clients.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
import { setTimeout, clearTimeout } from 'timers';
|
|
9
|
+
import { SimpleDisposableBase, } from './simple-resource-manager.js';
|
|
10
|
+
import { generateMessageId, createIPCCommand, isIPCResponse, isIPCLogStreamMessage, } from '../shared/ipc.js';
|
|
11
|
+
/**
|
|
12
|
+
* Abstract base class for IPC clients
|
|
13
|
+
*/
|
|
14
|
+
export class IPCClientBase extends SimpleDisposableBase {
|
|
15
|
+
config;
|
|
16
|
+
connectionStatus = 'disconnected';
|
|
17
|
+
clientInstance = null;
|
|
18
|
+
pendingRequests = new Map();
|
|
19
|
+
reconnectTimer = null;
|
|
20
|
+
heartbeatTimer = null;
|
|
21
|
+
lastActivity = 0;
|
|
22
|
+
lastPongReceived = 0;
|
|
23
|
+
pendingPingId = null;
|
|
24
|
+
eventEmitter = new EventEmitter();
|
|
25
|
+
constructor(config = { path: '' }) {
|
|
26
|
+
super();
|
|
27
|
+
// Set default configuration
|
|
28
|
+
this.config = {
|
|
29
|
+
path: config.path,
|
|
30
|
+
socketPath: config.socketPath || config.path || '',
|
|
31
|
+
namedPipePath: config.namedPipePath || config.path || '',
|
|
32
|
+
timeout: config.timeout || config.requestTimeout || 5000,
|
|
33
|
+
retryAttempts: config.retryAttempts || 3,
|
|
34
|
+
retryDelay: config.retryDelay || config.reconnectDelay || 1000,
|
|
35
|
+
reconnectDelay: config.reconnectDelay || config.retryDelay || 1000,
|
|
36
|
+
autoReconnect: config.autoReconnect ?? config.reconnect ?? true,
|
|
37
|
+
reconnect: config.reconnect ?? config.autoReconnect ?? true,
|
|
38
|
+
heartbeatInterval: config.heartbeatInterval || 30000,
|
|
39
|
+
maxReconnectAttempts: config.maxReconnectAttempts || 10,
|
|
40
|
+
requestTimeout: config.requestTimeout || config.timeout || 5000,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Connect to the IPC server
|
|
45
|
+
*/
|
|
46
|
+
async connect() {
|
|
47
|
+
this.ensureNotDisposed();
|
|
48
|
+
if (this.connectionStatus === 'connected') {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (this.connectionStatus === 'connecting') {
|
|
52
|
+
throw new Error('Connection already in progress');
|
|
53
|
+
}
|
|
54
|
+
this.setConnectionStatus('connecting');
|
|
55
|
+
try {
|
|
56
|
+
await this.connectToServer();
|
|
57
|
+
this.setConnectionStatus('connected');
|
|
58
|
+
this.lastActivity = Date.now();
|
|
59
|
+
// Start heartbeat if enabled
|
|
60
|
+
if (this.config.heartbeatInterval > 0) {
|
|
61
|
+
this.startHeartbeat();
|
|
62
|
+
}
|
|
63
|
+
this.emit('connected');
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
this.setConnectionStatus('error');
|
|
67
|
+
this.emit('error', error instanceof Error ? error : new Error(String(error)));
|
|
68
|
+
// Auto-reconnect if enabled
|
|
69
|
+
if (this.config.autoReconnect) {
|
|
70
|
+
this.scheduleReconnect();
|
|
71
|
+
}
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Disconnect from the IPC server
|
|
77
|
+
*/
|
|
78
|
+
async disconnect() {
|
|
79
|
+
this.ensureNotDisposed();
|
|
80
|
+
if (this.connectionStatus === 'disconnected') {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Clear timers
|
|
84
|
+
await this.clearReconnectTimer();
|
|
85
|
+
await this.clearHeartbeatTimer();
|
|
86
|
+
// Reject all pending requests
|
|
87
|
+
const disconnectError = new Error('Client disconnected');
|
|
88
|
+
const pendingRequestsArray = Array.from(this.pendingRequests.values());
|
|
89
|
+
for (const request of pendingRequestsArray) {
|
|
90
|
+
if (request.timeout) {
|
|
91
|
+
clearTimeout(request.timeout);
|
|
92
|
+
}
|
|
93
|
+
request.reject(disconnectError);
|
|
94
|
+
}
|
|
95
|
+
this.pendingRequests.clear();
|
|
96
|
+
try {
|
|
97
|
+
await this.disconnectFromServer();
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
this.setConnectionStatus('disconnected');
|
|
101
|
+
this.emit('disconnected');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Send a command and wait for response
|
|
106
|
+
*/
|
|
107
|
+
async sendCommand(type, payload, timeout) {
|
|
108
|
+
this.ensureNotDisposed();
|
|
109
|
+
if (this.connectionStatus !== 'connected') {
|
|
110
|
+
throw new Error('Client is not connected');
|
|
111
|
+
}
|
|
112
|
+
const message = createIPCCommand(type, payload);
|
|
113
|
+
return this.sendMessage(message, timeout);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Send a message and wait for response
|
|
117
|
+
*/
|
|
118
|
+
async sendMessage(message, timeout) {
|
|
119
|
+
this.ensureNotDisposed();
|
|
120
|
+
return new Promise((resolve, reject) => {
|
|
121
|
+
const requestTimeout = timeout || this.config.timeout;
|
|
122
|
+
// Simple timeout (PM2 style)
|
|
123
|
+
const timeoutHandle = setTimeout(() => {
|
|
124
|
+
this.pendingRequests.delete(message.id);
|
|
125
|
+
reject(new Error(`Request timeout after ${requestTimeout}ms`));
|
|
126
|
+
}, requestTimeout);
|
|
127
|
+
// Store pending request
|
|
128
|
+
const pendingRequest = {
|
|
129
|
+
id: message.id,
|
|
130
|
+
resolve,
|
|
131
|
+
reject,
|
|
132
|
+
timeout: timeoutHandle,
|
|
133
|
+
timestamp: Date.now(),
|
|
134
|
+
};
|
|
135
|
+
this.pendingRequests.set(message.id, pendingRequest);
|
|
136
|
+
// Send the message
|
|
137
|
+
this.sendRawMessage(message).catch((error) => {
|
|
138
|
+
this.pendingRequests.delete(message.id);
|
|
139
|
+
clearTimeout(timeoutHandle);
|
|
140
|
+
reject(error instanceof Error ? error : new Error(String(error)));
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Send a message without waiting for response
|
|
146
|
+
*/
|
|
147
|
+
async sendRawMessage(message) {
|
|
148
|
+
this.ensureNotDisposed();
|
|
149
|
+
if (this.connectionStatus !== 'connected') {
|
|
150
|
+
throw new Error('Client is not connected');
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
await this.writeMessage(message);
|
|
154
|
+
this.lastActivity = Date.now();
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
const errorObj = error instanceof Error ? error : new Error(String(error));
|
|
158
|
+
this.emit('error', errorObj);
|
|
159
|
+
throw errorObj;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get current connection status
|
|
164
|
+
*/
|
|
165
|
+
getConnectionStatus() {
|
|
166
|
+
return this.connectionStatus;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Check if client is connected
|
|
170
|
+
*/
|
|
171
|
+
isConnected() {
|
|
172
|
+
return this.connectionStatus === 'connected';
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get number of pending requests
|
|
176
|
+
*/
|
|
177
|
+
getPendingRequestCount() {
|
|
178
|
+
return this.pendingRequests.size;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Handle incoming data from server
|
|
182
|
+
*/
|
|
183
|
+
handleData(data) {
|
|
184
|
+
try {
|
|
185
|
+
this.lastActivity = Date.now();
|
|
186
|
+
// Parse messages from buffer (handle multiple messages)
|
|
187
|
+
const messages = this.parseMessages(data);
|
|
188
|
+
for (const messageData of messages) {
|
|
189
|
+
this.processMessage(messageData);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
this.emit('messageError', error instanceof Error ? error : new Error(String(error)));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Parse multiple JSON messages from buffer
|
|
198
|
+
* Addresses the PoC issue with consecutive message parsing
|
|
199
|
+
*/
|
|
200
|
+
parseMessages(data) {
|
|
201
|
+
const messages = [];
|
|
202
|
+
const text = data.toString('utf8');
|
|
203
|
+
// Split by newlines and filter out empty lines
|
|
204
|
+
const lines = text.split('\n').filter((line) => line.trim());
|
|
205
|
+
for (const line of lines) {
|
|
206
|
+
try {
|
|
207
|
+
const parsed = JSON.parse(line.trim());
|
|
208
|
+
messages.push(parsed);
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
// Try to handle concatenated JSON objects without newlines
|
|
212
|
+
this.handleConcatenatedJSON(line.trim(), messages);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return messages;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Handle concatenated JSON objects in a single line
|
|
219
|
+
* Uses simplified regex approach consistent with message-protocol.ts
|
|
220
|
+
*/
|
|
221
|
+
handleConcatenatedJSON(text, messages) {
|
|
222
|
+
// Simple approach: match JSON objects with balanced braces
|
|
223
|
+
const jsonRegex = /\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}/g;
|
|
224
|
+
const matches = text.match(jsonRegex) || [];
|
|
225
|
+
for (const match of matches) {
|
|
226
|
+
try {
|
|
227
|
+
const parsed = JSON.parse(match.trim());
|
|
228
|
+
messages.push(parsed);
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
console.warn(`Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`, {
|
|
232
|
+
method: 'parseBuffer',
|
|
233
|
+
input: match.trim().slice(0, 100), // First 100 chars for debugging
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Process a single parsed message
|
|
240
|
+
*/
|
|
241
|
+
processMessage(messageData) {
|
|
242
|
+
try {
|
|
243
|
+
// Validate message structure
|
|
244
|
+
if (!isIPCResponse(messageData)) {
|
|
245
|
+
this.emit('invalidMessage', messageData);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const message = messageData;
|
|
249
|
+
// Handle different message types
|
|
250
|
+
if (isIPCLogStreamMessage(message)) {
|
|
251
|
+
this.handleLogStreamMessage(message);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
this.handleResponse(message);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
this.emit('messageError', error instanceof Error ? error : new Error(String(error)));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Handle response message
|
|
263
|
+
*/
|
|
264
|
+
handleResponse(message) {
|
|
265
|
+
// Handle pong response for heartbeat monitoring (internal message type)
|
|
266
|
+
if (
|
|
267
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
268
|
+
message.type === 'pong' &&
|
|
269
|
+
this.pendingPingId === message.requestId) {
|
|
270
|
+
this.lastPongReceived = Date.now();
|
|
271
|
+
this.pendingPingId = null;
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
const pendingRequest = this.pendingRequests.get(message.requestId);
|
|
275
|
+
if (!pendingRequest) {
|
|
276
|
+
// No pending request found, might be an unsolicited message
|
|
277
|
+
this.emit('unsolicitedMessage', message);
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
// Clear timeout and remove from pending requests
|
|
281
|
+
if (pendingRequest.timeout) {
|
|
282
|
+
clearTimeout(pendingRequest.timeout);
|
|
283
|
+
}
|
|
284
|
+
this.pendingRequests.delete(message.requestId);
|
|
285
|
+
// Resolve the promise
|
|
286
|
+
pendingRequest.resolve(message);
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Handle log stream message
|
|
290
|
+
*/
|
|
291
|
+
handleLogStreamMessage(message) {
|
|
292
|
+
this.emit('logStream', message);
|
|
293
|
+
this.emit('log-stream', message);
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Handle connection error
|
|
297
|
+
*/
|
|
298
|
+
handleConnectionError(error) {
|
|
299
|
+
this.setConnectionStatus('error');
|
|
300
|
+
this.emit('error', error);
|
|
301
|
+
// Auto-reconnect if enabled
|
|
302
|
+
if (this.config.autoReconnect && this.connectionStatus !== 'disconnected') {
|
|
303
|
+
this.scheduleReconnect();
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Set connection status and emit event
|
|
308
|
+
*/
|
|
309
|
+
setConnectionStatus(status) {
|
|
310
|
+
if (this.connectionStatus !== status) {
|
|
311
|
+
const oldStatus = this.connectionStatus;
|
|
312
|
+
this.connectionStatus = status;
|
|
313
|
+
this.emit('statusChange', status, oldStatus);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Schedule reconnection attempt
|
|
318
|
+
*/
|
|
319
|
+
scheduleReconnect() {
|
|
320
|
+
if (this.reconnectTimer) {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
this.reconnectTimer = this.setTimeout(() => {
|
|
324
|
+
this.reconnectTimer = null;
|
|
325
|
+
if (this.config.autoReconnect && this.connectionStatus !== 'connected') {
|
|
326
|
+
this.connect().catch(() => {
|
|
327
|
+
// Reconnection failed, will try again
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}, this.config.retryDelay);
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Clear reconnect timer
|
|
334
|
+
*/
|
|
335
|
+
async clearReconnectTimer() {
|
|
336
|
+
if (this.reconnectTimer) {
|
|
337
|
+
this.reconnectTimer.dispose();
|
|
338
|
+
this.reconnectTimer = null;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Start heartbeat mechanism
|
|
343
|
+
*/
|
|
344
|
+
startHeartbeat() {
|
|
345
|
+
if (this.heartbeatTimer) {
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
this.lastPongReceived = Date.now();
|
|
349
|
+
this.heartbeatTimer = this.setInterval(() => {
|
|
350
|
+
if (this.connectionStatus === 'connected') {
|
|
351
|
+
// Check if previous pong was received
|
|
352
|
+
const now = Date.now();
|
|
353
|
+
if (this.pendingPingId !== null &&
|
|
354
|
+
now - this.lastPongReceived > this.config.heartbeatInterval * 2) {
|
|
355
|
+
// No pong received within timeout - connection might be dead
|
|
356
|
+
this.handleConnectionError(new Error('Heartbeat timeout - no pong received'));
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
// Send ping message for connection monitoring
|
|
360
|
+
const pingMessage = {
|
|
361
|
+
id: generateMessageId(),
|
|
362
|
+
type: 'ping',
|
|
363
|
+
payload: { timestamp: now },
|
|
364
|
+
timestamp: now,
|
|
365
|
+
};
|
|
366
|
+
this.pendingPingId = pingMessage.id;
|
|
367
|
+
this.sendRawMessage(pingMessage).catch((error) => {
|
|
368
|
+
this.handleConnectionError(error);
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
}, this.config.heartbeatInterval);
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Clear heartbeat timer
|
|
375
|
+
*/
|
|
376
|
+
async clearHeartbeatTimer() {
|
|
377
|
+
if (this.heartbeatTimer) {
|
|
378
|
+
this.heartbeatTimer.dispose();
|
|
379
|
+
this.heartbeatTimer = null;
|
|
380
|
+
}
|
|
381
|
+
this.pendingPingId = null;
|
|
382
|
+
this.lastPongReceived = 0;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Implement disposal core for SimpleDisposableBase
|
|
386
|
+
*/
|
|
387
|
+
disposeCore() {
|
|
388
|
+
// Disconnect if still connected (non-blocking)
|
|
389
|
+
if (this.connectionStatus !== 'disconnected') {
|
|
390
|
+
try {
|
|
391
|
+
this.disconnect().catch(() => {
|
|
392
|
+
/* ignore */
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
// Ignore errors during disposal
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
// Clear any remaining timers
|
|
400
|
+
this.clearReconnectTimer().catch(() => {
|
|
401
|
+
/* ignore */
|
|
402
|
+
});
|
|
403
|
+
this.clearHeartbeatTimer().catch(() => {
|
|
404
|
+
/* ignore */
|
|
405
|
+
});
|
|
406
|
+
// Reject all pending requests
|
|
407
|
+
const disposalError = new Error('Client has been disposed');
|
|
408
|
+
const pendingRequestsArray = Array.from(this.pendingRequests.values());
|
|
409
|
+
for (const request of pendingRequestsArray) {
|
|
410
|
+
if (request.timeout) {
|
|
411
|
+
clearTimeout(request.timeout);
|
|
412
|
+
}
|
|
413
|
+
request.reject(disposalError);
|
|
414
|
+
}
|
|
415
|
+
this.pendingRequests.clear();
|
|
416
|
+
// Clear event listeners
|
|
417
|
+
this.eventEmitter.removeAllListeners();
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Get current resource usage statistics
|
|
421
|
+
*/
|
|
422
|
+
getResourceStats() {
|
|
423
|
+
const resourceCount = this.resources.getResourceCount();
|
|
424
|
+
return {
|
|
425
|
+
pendingRequests: this.pendingRequests.size,
|
|
426
|
+
timeouts: resourceCount.timeouts,
|
|
427
|
+
intervals: resourceCount.intervals,
|
|
428
|
+
eventListeners: resourceCount.listeners,
|
|
429
|
+
totalResources: resourceCount.timeouts +
|
|
430
|
+
resourceCount.intervals +
|
|
431
|
+
resourceCount.listeners,
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* TypedEventEmitter implementation methods
|
|
436
|
+
*/
|
|
437
|
+
on(event, listener) {
|
|
438
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
439
|
+
this.eventEmitter.on(event, listener);
|
|
440
|
+
return this;
|
|
441
|
+
}
|
|
442
|
+
once(event, listener) {
|
|
443
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
444
|
+
this.eventEmitter.once(event, listener);
|
|
445
|
+
return this;
|
|
446
|
+
}
|
|
447
|
+
emit(event, ...args) {
|
|
448
|
+
return this.eventEmitter.emit(event, ...args);
|
|
449
|
+
}
|
|
450
|
+
removeListener(event, listener) {
|
|
451
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
452
|
+
this.eventEmitter.removeListener(event, listener);
|
|
453
|
+
return this;
|
|
454
|
+
}
|
|
455
|
+
off(event, listener) {
|
|
456
|
+
return this.removeListener(event, listener);
|
|
457
|
+
}
|
|
458
|
+
removeAllListeners(event) {
|
|
459
|
+
this.eventEmitter.removeAllListeners(event);
|
|
460
|
+
return this;
|
|
461
|
+
}
|
|
462
|
+
setMaxListeners(n) {
|
|
463
|
+
this.eventEmitter.setMaxListeners(n);
|
|
464
|
+
return this;
|
|
465
|
+
}
|
|
466
|
+
getMaxListeners() {
|
|
467
|
+
return this.eventEmitter.getMaxListeners();
|
|
468
|
+
}
|
|
469
|
+
listeners(event) {
|
|
470
|
+
return this.eventEmitter.listeners(event);
|
|
471
|
+
}
|
|
472
|
+
listenerCount(event) {
|
|
473
|
+
return this.eventEmitter.listenerCount(event);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
//# sourceMappingURL=ipc-client-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipc-client-base.js","sourceRoot":"","sources":["../../../src/daemon/ipc-client-base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EACL,oBAAoB,GAGrB,MAAM,8BAA8B,CAAC;AAWtC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAa1B;;GAEG;AACH,MAAM,OAAgB,aAAc,SAAQ,oBAAoB;IACpD,MAAM,CAA4B;IAClC,gBAAgB,GAAwB,cAAc,CAAC;IACvD,cAAc,GAAwB,IAAI,CAAC;IAC3C,eAAe,GAAgC,IAAI,GAAG,EAAE,CAAC;IACzD,cAAc,GAAyB,IAAI,CAAC;IAC5C,cAAc,GAA0B,IAAI,CAAC;IAC7C,YAAY,GAAG,CAAC,CAAC;IACjB,gBAAgB,GAAG,CAAC,CAAC;IACrB,aAAa,GAAkB,IAAI,CAAC;IACtC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IAE1C,YAAY,SAA0B,EAAE,IAAI,EAAE,EAAE,EAAE;QAChD,KAAK,EAAE,CAAC;QAER,4BAA4B;QAC5B,IAAI,CAAC,MAAM,GAAG;YACZ,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE;YAClD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE;YACxD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI;YACxD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,CAAC;YACxC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI;YAC9D,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI;YAClE,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI;YAC/D,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,aAAa,IAAI,IAAI;YAC3D,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,KAAK;YACpD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,EAAE;YACvD,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI;SAChE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,gBAAgB,KAAK,WAAW,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,KAAK,YAAY,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC7B,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE/B,6BAA6B;YAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CACP,OAAO,EACP,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;YAEF,4BAA4B;YAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,gBAAgB,KAAK,cAAc,EAAE,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,eAAe;QACf,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEjC,8BAA8B;QAC9B,MAAM,eAAe,GAAG,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzD,MAAM,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,KAAK,MAAM,OAAO,IAAI,oBAAoB,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACpC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,IAAO,EACP,OAAgC,EAChC,OAAgB;QAEhB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,gBAAgB,KAAK,WAAW,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,OAAmB,EACnB,OAAgB;QAEhB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClD,MAAM,cAAc,GAAG,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAEtD,6BAA6B;YAC7B,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;gBACpC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACxC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,cAAc,IAAI,CAAC,CAAC,CAAC;YACjE,CAAC,EAAE,cAAc,CAAC,CAAC;YAEnB,wBAAwB;YACxB,MAAM,cAAc,GAAmB;gBACrC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO;gBACP,MAAM;gBACN,OAAO,EAAE,aAAa;gBACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YAEF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;YAErD,mBAAmB;YACnB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACxC,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC5B,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,OAAmB;QACtC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,gBAAgB,KAAK,WAAW,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC7B,MAAM,QAAQ,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,gBAAgB,KAAK,WAAW,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,sBAAsB;QACpB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IACnC,CAAC;IAED;;OAEG;IACO,UAAU,CAAC,IAAY;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE/B,wDAAwD;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAE1C,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE,CAAC;gBACnC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CACP,cAAc,EACd,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACO,aAAa,CAAC,IAAY;QAClC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEnC,+CAA+C;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACvC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,2DAA2D;gBAC3D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;OAGG;IACK,sBAAsB,CAAC,IAAY,EAAE,QAAmB;QAC9D,2DAA2D;QAC3D,MAAM,SAAS,GAAG,kCAAkC,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAE5C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBACxC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CACV,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACjF;oBACE,MAAM,EAAE,aAAa;oBACrB,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,gCAAgC;iBACpE,CACF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACO,cAAc,CAAC,WAAoB;QAC3C,IAAI,CAAC;YACH,6BAA6B;YAC7B,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;gBACzC,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,WAA0B,CAAC;YAE3C,iCAAiC;YACjC,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,sBAAsB,CAAC,OAA8B,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CACP,cAAc,EACd,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACO,cAAc,CAAC,OAAoB;QAC3C,wEAAwE;QACxE;QACE,8DAA8D;QAC7D,OAAe,CAAC,IAAI,KAAK,MAAM;YAChC,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,SAAS,EACxC,CAAC;YACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEnE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,4DAA4D;YAC5D,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,iDAAiD;QACjD,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC3B,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE/C,sBAAsB;QACtB,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACO,sBAAsB,CAAC,OAA4B;QAC3D,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACO,qBAAqB,CAAC,KAAY;QAC1C,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE1B,4BAA4B;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,gBAAgB,KAAK,cAAc,EAAE,CAAC;YAC1E,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACO,mBAAmB,CAAC,MAA2B;QACvD,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACxC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;OAEG;IACO,iBAAiB;QACzB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;YACzC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,gBAAgB,KAAK,WAAW,EAAE,CAAC;gBACvE,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;oBACxB,sCAAsC;gBACxC,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,mBAAmB;QACjC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACO,cAAc;QACtB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;YAC1C,IAAI,IAAI,CAAC,gBAAgB,KAAK,WAAW,EAAE,CAAC;gBAC1C,sCAAsC;gBACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,IACE,IAAI,CAAC,aAAa,KAAK,IAAI;oBAC3B,GAAG,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,EAC/D,CAAC;oBACD,6DAA6D;oBAC7D,IAAI,CAAC,qBAAqB,CACxB,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAClD,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,8CAA8C;gBAC9C,MAAM,WAAW,GAAe;oBAC9B,EAAE,EAAE,iBAAiB,EAAE;oBACvB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE;oBAC3B,SAAS,EAAE,GAAG;iBACf,CAAC;gBAEF,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,EAAE,CAAC;gBAEpC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC/C,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,mBAAmB;QACjC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACO,WAAW;QACnB,+CAA+C;QAC/C,IAAI,IAAI,CAAC,gBAAgB,KAAK,cAAc,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC3B,YAAY;gBACd,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;YACpC,YAAY;QACd,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;YACpC,YAAY;QACd,CAAC,CAAC,CAAC;QAEH,8BAA8B;QAC9B,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC5D,MAAM,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,KAAK,MAAM,OAAO,IAAI,oBAAoB,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAE7B,wBAAwB;QACxB,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,gBAAgB;QAOd,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;QACxD,OAAO;YACL,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;YAC1C,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,SAAS,EAAE,aAAa,CAAC,SAAS;YAClC,cAAc,EAAE,aAAa,CAAC,SAAS;YACvC,cAAc,EACZ,aAAa,CAAC,QAAQ;gBACtB,aAAa,CAAC,SAAS;gBACvB,aAAa,CAAC,SAAS;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,EAAE,CACA,KAAQ,EACR,QAA4B;QAE5B,8DAA8D;QAC9D,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,KAAe,EAAE,QAAe,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CACF,KAAQ,EACR,QAA4B;QAE5B,8DAA8D;QAC9D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAe,EAAE,QAAe,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CACF,KAAQ,EACR,GAAG,IAAoC;QAEvC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAe,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,cAAc,CACZ,KAAQ,EACR,QAA4B;QAE5B,8DAA8D;QAC9D,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAe,EAAE,QAAe,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CACD,KAAQ,EACR,QAA4B;QAE5B,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,kBAAkB,CAAkC,KAAS;QAC3D,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAe,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe,CAAC,CAAS;QACvB,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;IAC7C,CAAC;IAED,SAAS,CACP,KAAQ;QAER,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAe,CAEtC,CAAC;IACf,CAAC;IAED,aAAa,CAAkC,KAAQ;QACrD,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAe,CAAC,CAAC;IAC1D,CAAC;CAQF"}
|