import Twm from '../TwmWatcher';
import { FileResource, ContextResource, DirectorResource } from '../resource';
import { TwmMiddleware } from '.';
export declare class GenerateDistPlugin implements TwmMiddleware {
    apply(twm: Twm): void;
    /**
     * 解析源文件生成目标文件
     * @param { ContextResource } context           上下文对象
     * @param { FileResource[] }  fileResources     修改文件列表
     */
    resolveGenerateDist(context: ContextResource, changeFilesMap: Map<FileResource, FileResource>, changeDirMap: Map<string, DirectorResource>): Promise<void>;
    /**
     * 更新需要翻译的文件，翻译后的文件需要 write，而源文件需要 copy
     * @param { FileResource } targetFile 翻译后的目标文件
     * @param { FileResource } sourceFile 源文件
     * @param { Set<FileResource> } copyFiles 需要 copy 的文件集合
     * @param { Set<FileResource> } writeFiles 需要 write 的文件集合
     */
    translateFileUpdate(source: FileResource, target: FileResource, writeFiles: Set<FileResource>, deleteFiles: Set<FileResource>, copyFiles: Set<FileResource>): void;
    /**
     * 遍历翻译文件，将源文件存入 copyFiles，翻译后的文件存入 writeFiles
     * @param { Map<FileResource, FileResource> } maps  翻译文件集合
     * @param { Set<FileResource> } writeFiles          需要 write 文件集合
     * @param { Set<FileResource> } copyFiles           需要 copy  文件集合
     */
    traversalTranslateFile(maps: Map<FileResource, FileResource>, writeFiles: Set<FileResource>, copyFiles: Set<FileResource>): void;
    resolveDirector(dir: DirectorResource, addDir: Set<string>, deleteDir: Set<string>): void;
    addWriteFile(source: FileResource, target: FileResource, writeFiles: Set<FileResource>): void;
    addDeleteFile(source: FileResource, target: FileResource, deleteFiles: Set<FileResource>): void;
    addCopyFile(source: FileResource, target: FileResource, copyFiles: Set<FileResource>): void;
    /**
     * write 文件
     */
    writeFiles(files: Set<FileResource>): Promise<void>;
    /**
     * copy 文件
     */
    copyFiles(files: Set<FileResource>): Promise<void>;
    /**
     * delete 文件
     */
    deleteFiles(files: Set<FileResource>): Promise<void>;
    addDir(dirs: Set<string>): Promise<void>;
    deleteDir(dirs: Set<string>): Promise<void>;
}
