/// <reference types="node" />
/// <reference types="node" />
import { ChildProcess } from 'node:child_process';
import { EventEmitter } from 'node:events';
import { SupportCodeLibrary } from '../../support_code_library_builder/types';
import { AssembledTestCase } from '../../assemble';
import { ILogger, IRunEnvironment } from '../../environment';
import { RuntimeAdapter } from '../types';
import { IRunOptionsRuntime } from '../../api';
import { WorkerToCoordinatorEvent } from './types';
declare const enum WorkerState {
    'idle' = 0,
    'closed' = 1,
    'running' = 2,
    'new' = 3
}
interface ManagedWorker {
    state: WorkerState;
    process: ChildProcess;
    id: string;
}
interface WorkPlacement {
    index: number;
    item: AssembledTestCase;
}
export declare class ChildProcessAdapter implements RuntimeAdapter {
    private readonly environment;
    private readonly logger;
    private readonly eventBroadcaster;
    private readonly options;
    private readonly supportCodeLibrary;
    private idleInterventions;
    private failing;
    private onFinish;
    private todo;
    private readonly inProgress;
    private readonly workers;
    constructor(environment: IRunEnvironment, logger: ILogger, eventBroadcaster: EventEmitter, options: IRunOptionsRuntime, supportCodeLibrary: SupportCodeLibrary);
    parseWorkerMessage(worker: ManagedWorker, message: WorkerToCoordinatorEvent): void;
    awakenWorkers(triggeringWorker: ManagedWorker): void;
    startWorker(id: string, total: number): void;
    onWorkerProcessClose(exitCode: number): void;
    run(assembledTestCases: ReadonlyArray<AssembledTestCase>): Promise<boolean>;
    nextWorkPlacement(): WorkPlacement;
    placementAt(index: number): WorkPlacement;
    giveWork(worker: ManagedWorker, force?: boolean): void;
}
export {};
