51 lines
2.2 KiB
TypeScript
51 lines
2.2 KiB
TypeScript
import * as T from '../../../base/lib/types';
|
|
import { SubContainer } from '../util/SubContainer';
|
|
import { Drop } from '../util';
|
|
import { DaemonCommandType } from './Daemons';
|
|
/**
|
|
* Low-level controller for a single running process inside a subcontainer (or as a JS function).
|
|
*
|
|
* Manages the child process lifecycle: spawning, waiting, and signal-based termination.
|
|
* Used internally by {@link Daemon} to manage individual command executions.
|
|
*
|
|
* @typeParam Manifest - The service manifest type
|
|
* @typeParam C - The subcontainer type, or `null` for JS-only commands
|
|
*/
|
|
export declare class CommandController<Manifest extends T.SDKManifest, C extends SubContainer<Manifest> | null> extends Drop {
|
|
readonly runningAnswer: Promise<null>;
|
|
private state;
|
|
private readonly subcontainer;
|
|
private process;
|
|
readonly sigtermTimeout: number;
|
|
private constructor();
|
|
/**
|
|
* Factory method to create a new CommandController.
|
|
*
|
|
* Returns a curried async function: `(effects, subcontainer, exec) => CommandController`.
|
|
* If the exec spec has an `fn` property, runs the function; otherwise spawns a shell command
|
|
* in the subcontainer.
|
|
*/
|
|
static of<Manifest extends T.SDKManifest, C extends SubContainer<Manifest> | null>(): (effects: T.Effects, subcontainer: C, exec: DaemonCommandType<Manifest, C>) => Promise<CommandController<Manifest, C>>;
|
|
/**
|
|
* Wait for the command to finish. Optionally terminate after a timeout.
|
|
* @param options.timeout - Milliseconds to wait before terminating. Defaults to no timeout.
|
|
*/
|
|
wait({ timeout }?: {
|
|
timeout?: number | undefined;
|
|
}): Promise<void>;
|
|
/**
|
|
* Terminate the running command by sending a signal.
|
|
*
|
|
* Sends the specified signal (default: SIGTERM), then escalates to SIGKILL
|
|
* after the timeout expires. Destroys the subcontainer after the process exits.
|
|
*
|
|
* @param options.signal - The signal to send (default: SIGTERM)
|
|
* @param options.timeout - Milliseconds before escalating to SIGKILL
|
|
*/
|
|
term({ signal, timeout }?: {
|
|
signal?: NodeJS.Signals | undefined;
|
|
timeout?: number | undefined;
|
|
}): Promise<void>;
|
|
onDrop(): void;
|
|
}
|