import { EventEmitter } from 'events';
import File from 'vinyl';
import { type PipelineTransform, Readable } from 'stream';
export type FileTransform<File> = PipelineTransform<PipelineTransform<any, File>, File>;
export type StreamOptions<StoreFile extends {
    path: string;
} = File> = {
    filter?: (file: StoreFile) => boolean;
};
export type PipelineOptions<StoreFile extends {
    path: string;
} = File> = {
    filter?: (file: StoreFile) => boolean;
    resolveConflict?: (current: StoreFile, newFile: StoreFile) => StoreFile;
    refresh?: boolean;
    allowOverride?: boolean;
};
export declare function isFileTransform<StoreFile extends {
    path: string;
} = File>(transform: PipelineOptions<StoreFile> | FileTransform<StoreFile> | undefined): transform is FileTransform<StoreFile>;
export declare function loadFile(filepath: string): File;
export declare class Store<StoreFile extends {
    path: string;
} = File> extends EventEmitter {
    loadFile: (filepath: string) => StoreFile;
    private store;
    constructor(options?: {
        loadFile?: (filepath: string) => StoreFile;
    });
    private load;
    get(filepath: string): StoreFile;
    existsInMemory(filepath: string): boolean;
    add(file: StoreFile): this;
    each(onEach: (file: StoreFile) => void): this;
    all(): StoreFile[];
    stream({ filter }?: StreamOptions<StoreFile>): Readable;
    pipeline(options?: PipelineOptions<StoreFile> | FileTransform<StoreFile>, ...transforms: FileTransform<StoreFile>[]): Promise<void>;
}
export declare function create<StoreFile extends {
    path: string;
} = File>(): Store<StoreFile>;
