import { ICallback } from '../async/index.js';
import { EventEmitter, TEventEmitterEvent } from '../event/index.js';
import { PowerSwitch } from '../power-switch/index.js';
import { ILogger } from '../logger/index.js';
export declare abstract class Runnable<Event extends TEventEmitterEvent = TEventEmitterEvent> extends EventEmitter<Event> {
    protected readonly id: string;
    protected readonly powerSwitch: PowerSwitch;
    protected readonly forceShutdownOnError: boolean;
    protected abstract readonly logger: ILogger;
    private waitingForUpCallbacks;
    private waitingForDownCallbacks;
    protected constructor(forceShutdownOnError?: boolean);
    protected goingUp(): Array<(cb: ICallback<void>) => void>;
    protected goingDown(): Array<(cb: ICallback<void>) => void>;
    protected finalizeUp(): void;
    protected finalizeDown(): void;
    protected handleError(err: unknown): void;
    private flushWaitingForUp;
    private flushWaitingForDown;
    protected executeGoingUpTasks(): void;
    protected executeGoingDownTasks(): void;
    isOperational(): boolean;
    isRunning(): boolean;
    isGoingUp(): boolean;
    isGoingDown(): boolean;
    isUp(): boolean;
    isDown(): boolean;
    run(): Promise<void>;
    run(cb: ICallback): void;
    shutdown(): Promise<void>;
    shutdown(cb: ICallback): void;
    ensureIsOperational(): Promise<void>;
    ensureIsOperational(cb: ICallback): void;
    getId(): string;
}
//# sourceMappingURL=runnable.d.ts.map