import { FileDescriptions, StrykerOptions } from '@stryker-mutator/api/core';
import { Disposable, InjectableClass, InjectionToken } from 'typed-inject';
import { LoggingServerAddress } from '../logging/index.js';
import { ChildProcessContext } from './child-process-proxy-worker.js';
import { IdGenerator } from './id-generator.js';
import { LoggerFactoryMethod } from '@stryker-mutator/api/logging';
type Func<TS extends any[], R> = (...args: TS) => R;
type PromisifiedFunc<TS extends any[], R> = (...args: TS) => Promise<R>;
export type Promisified<T> = {
    [K in keyof T]: T[K] extends PromisifiedFunc<any, any> ? T[K] : T[K] extends Func<infer TS, infer R> ? PromisifiedFunc<TS, R> : () => Promise<T[K]>;
};
export declare class ChildProcessProxy<T> implements Disposable {
    readonly proxy: Promisified<T>;
    private readonly worker;
    private readonly initTask;
    private disposeTask;
    private fatalError;
    private readonly workerTasks;
    private workerTaskCounter;
    private readonly log;
    private readonly stdoutBuilder;
    private readonly stderrBuilder;
    private isDisposed;
    private readonly initMessage;
    private constructor();
    /**
     * @description Creates a proxy where each function of the object created using the constructorFunction arg is ran inside of a child process
     */
    static create<R, Tokens extends Array<InjectionToken<ChildProcessContext>>>(modulePath: string, loggingServerAddress: LoggingServerAddress, options: StrykerOptions, fileDescriptions: FileDescriptions, pluginModulePaths: readonly string[], workingDirectory: string, injectableClass: InjectableClass<ChildProcessContext, R, Tokens>, execArgv: string[], getLogger: LoggerFactoryMethod, idGenerator: IdGenerator): ChildProcessProxy<R>;
    private send;
    private initProxy;
    private forward;
    private listenForMessages;
    private listenToStdoutAndStderr;
    get stdout(): string;
    get stderr(): string;
    private reportError;
    private readonly handleUnexpectedExit;
    private readonly handleError;
    private innerProcessIsCrashed;
    dispose(): Promise<void>;
    private logUnidentifiedMessage;
}
export {};
//# sourceMappingURL=child-process-proxy.d.ts.map