khulnasoft.com
Version:
KhulnaSoft Visual CMS Devtools
61 lines (60 loc) • 3.01 kB
TypeScript
import type { DevToolsSys } from "@khulnasoft.com/dev-tools/core";
import { type RequestHandler as ProxyRequestHandler } from "http-proxy-middleware";
import type { DevCommandState, HttpServerState } from "$/ai-utils";
import EventEmitter from "events";
import { ChildProcess } from "node:child_process";
import type { FusionConfig, SetupCommandState } from "$/ai-utils";
export type DevServerState = Exclude<SetupCommandState | DevCommandState, "installed" | "starting">;
export interface SetupCommandResult {
code: number | null;
output: string;
}
export interface DevServerOrchestrator {
devCommand: string;
setupCommand: string | undefined;
setupState: SetupCommandState;
devState: DevCommandState;
httpServerState: HttpServerState;
state: DevServerState;
proxyTarget: string;
proxyPort: number;
envVars: Record<string, string>;
proxyMiddleware: ProxyRequestHandler | undefined;
pid: number | undefined;
abortSetupCommand: () => void;
clearEnvVariables: () => void;
setEnvVariable: (key: string, value: string | undefined) => void;
ensureDevCommand: (abortSignal?: AbortSignal) => Promise<boolean>;
ensureSetupCommand: (abortSignal?: AbortSignal) => Promise<boolean>;
setupCommandPromise: Promise<SetupCommandResult> | undefined;
runSetupCommand: (signal?: AbortSignal) => Promise<SetupCommandResult>;
setSetupCommand: (newCommand: string, forceRestart?: boolean, signal?: AbortSignal) => Promise<SetupCommandResult | null>;
setDevCommand: (newCommand: string, signal?: AbortSignal) => Promise<boolean>;
setProxyServer: (newProxyServer: string) => Promise<boolean>;
setPort: (newPort: number) => Promise<boolean>;
pingServer: (signal?: AbortSignal) => Promise<Response>;
addCheckpoint: () => void;
getOpenPorts: () => Promise<number[]>;
getCheckpoints: (n: number, mode: "all" | "out" | "err") => string;
getAllStdout: () => string;
getAllStderr: () => string;
getOutput: () => string;
getSetupOutput: () => string;
waitUntilIdle: (initialWaitMs?: number, idleTimeMs?: number) => Promise<void>;
onClose: (callback: (code: number | null) => void) => void;
restart: (abortSignal?: AbortSignal) => Promise<void>;
emitter: EventEmitter<{
close: [number | null];
stdout: [string];
stderr: [string];
installStdout: [string];
installStderr: [string];
setupState: [SetupCommandState];
devState: [DevCommandState];
httpServerState: [HttpServerState];
}>;
close: () => Promise<void>;
}
export declare function devServerOrchestrator(sys: DevToolsSys, fusionConfig: FusionConfig, initialSetupState: "installed" | "not-installed" | "install-failed"): Promise<DevServerOrchestrator>;
export declare const checkPortsListenedByPid: (pid: number) => number[];
export declare function killProcess(sys: DevToolsSys, proc: ChildProcess | undefined, abortSignal?: AbortSignal, timeout?: number): Promise<boolean>;