import type { ITerminal } from '@rushstack/terminal';
import { type IFileSelectionSpecifier } from './FileGlobSpecifier';
import type { HeftConfiguration } from '../configuration/HeftConfiguration';
import type { IHeftTaskPlugin } from '../pluginFramework/IHeftPlugin';
import type { IHeftTaskSession } from '../pluginFramework/HeftTaskSession';
import type { WatchFileSystemAdapter } from '../utilities/WatchFileSystemAdapter';
/**
 * Used to specify a selection of files to copy from a specific source folder to one
 * or more destination folders.
 *
 * @public
 */
export interface ICopyOperation extends IFileSelectionSpecifier {
    /**
     * Absolute paths to folders which files or folders should be copied to.
     */
    destinationFolders: string[];
    /**
     * Copy only the file and discard the relative path from the source folder.
     */
    flatten?: boolean;
    /**
     * Hardlink files instead of copying.
     *
     * @remarks
     * If the sourcePath is a folder, the contained directory structure will be re-created
     * and all files will be individually hardlinked. This means that folders will be new
     * filesystem entities and will have separate folder metadata, while the contained files
     * will maintain normal hardlink behavior. This is done since folders do not have a
     * cross-platform equivalent of a hardlink, and since file symlinks provide fundamentally
     * different functionality in comparison to hardlinks.
     */
    hardlink?: boolean;
}
/**
 * Used to specify a selection of files to copy from a specific source folder to one
 * or more destination folders.
 *
 * @public
 */
export interface IIncrementalCopyOperation extends ICopyOperation {
    /**
     * If true, the file will be copied only if the source file is contained in the
     * IHeftTaskRunIncrementalHookOptions.changedFiles map.
     */
    onlyIfChanged?: boolean;
}
interface ICopyFilesPluginOptions {
    copyOperations: ICopyOperation[];
}
export declare function asAbsoluteCopyOperation(rootFolderPath: string, copyOperation: ICopyOperation): ICopyOperation;
export declare function asRelativeCopyOperation(rootFolderPath: string, copyOperation: ICopyOperation): ICopyOperation;
export declare function copyFilesAsync(copyOperations: Iterable<ICopyOperation>, terminal: ITerminal, buildInfoPath: string, configHash: string, watchFileSystemAdapter?: WatchFileSystemAdapter): Promise<void>;
export default class CopyFilesPlugin implements IHeftTaskPlugin<ICopyFilesPluginOptions> {
    apply(taskSession: IHeftTaskSession, heftConfiguration: HeftConfiguration, pluginOptions: ICopyFilesPluginOptions): void;
}
export {};
//# sourceMappingURL=CopyFilesPlugin.d.ts.map