import type { execaCommand } from 'execa';
import { Injector, commonTokens, PluginContext } from '@stryker-mutator/api/plugin';
import { StrykerOptions } from '@stryker-mutator/api/core';
import { Reporter } from '@stryker-mutator/api/report';
import { I } from '@stryker-mutator/util';
import { coreTokens, PluginCreator } from '../di/index.js';
import { Timer } from '../utils/timer.js';
import { TemporaryDirectory } from '../utils/temporary-directory.js';
import { UnexpectedExitHandler } from '../unexpected-exit-handler.js';
import { FileSystem, Project } from '../fs/index.js';
import { DryRunContext } from './3-dry-run-executor.js';
export interface MutantInstrumenterContext extends PluginContext {
    [commonTokens.options]: StrykerOptions;
    [coreTokens.project]: Project;
    [coreTokens.reporter]: Required<Reporter>;
    [coreTokens.timer]: I<Timer>;
    [coreTokens.temporaryDirectory]: I<TemporaryDirectory>;
    [coreTokens.execa]: typeof execaCommand;
    [coreTokens.process]: NodeJS.Process;
    [coreTokens.unexpectedExitRegistry]: I<UnexpectedExitHandler>;
    [coreTokens.pluginModulePaths]: readonly string[];
    [coreTokens.fs]: I<FileSystem>;
    [coreTokens.pluginCreator]: PluginCreator;
    [coreTokens.loggingServerAddress]: {
        port: number;
    };
}
export declare class MutantInstrumenterExecutor {
    private readonly injector;
    private readonly project;
    private readonly options;
    private readonly pluginCreator;
    static readonly inject: ["$injector", "project", "options", "pluginCreator"];
    constructor(injector: Injector<MutantInstrumenterContext>, project: Project, options: StrykerOptions, pluginCreator: PluginCreator);
    execute(): Promise<Injector<DryRunContext>>;
    private readFilesToMutate;
    private writeInstrumentedFiles;
}
//# sourceMappingURL=2-mutant-instrumenter-executor.d.ts.map