import { LogLevel } from "@salesforce/code-analyzer-engine-api";
import { JavaCommandExecutor } from "@salesforce/code-analyzer-engine-api/utils";
export type CpdRunInputData = {
    runDataPerLanguage: Record<string, LanguageSpecificCpdRunData>;
    skipDuplicateFiles: boolean;
};
export type LanguageSpecificCpdRunData = {
    filesToScan: string[];
    minimumTokens: number;
};
export type CpdRunResults = {
    [language: string]: CpdLanguageRunResults;
};
export type CpdLanguageRunResults = {
    matches: CpdMatch[];
    processingErrors: CpdProcessingError[];
};
export type CpdMatch = {
    numTokensInBlock: number;
    numNonemptyLinesInBlock: number;
    numBlocks: number;
    blockLocations: CpdBlockLocation[];
};
export type CpdBlockLocation = {
    file: string;
    startLine: number;
    startCol: number;
    endLine: number;
    endCol: number;
};
export type CpdProcessingError = {
    file: string;
    message: string;
    detail: string;
};
export declare class CpdWrapperInvoker {
    private readonly javaCommandExecutor;
    private readonly emitLogEvent;
    constructor(javaCommandExecutor: JavaCommandExecutor, emitLogEvent: (logLevel: LogLevel, message: string) => void);
    invokeRunCommand(inputData: CpdRunInputData, workingFolder: string, emitProgress: (percComplete: number) => void): Promise<CpdRunResults>;
}
