import { type PipelineSource, type PipelineTransform, type PipelineTransformSource, Transform } from 'node:stream';
import { type MinimatchOptions } from 'minimatch';
import type { Abortable } from 'node:events';
export { pipeline } from 'node:stream/promises';
export type File = {
    path: string;
    contents: any;
};
interface PipelineOptions extends Abortable {
    end?: boolean | undefined;
}
type TransformFile<F extends File = File> = (this: Transform, file: F) => Promise<F | undefined> | F | undefined;
type PassthroughFile<F extends File = File> = (file: F) => Promise<void> | void;
type FilterFile<F extends File = File> = (file: F) => Promise<boolean> | boolean;
export type FilePipelineTransform<F extends File = File> = PipelineTransform<PipelineTransformSource<F>, F>;
export declare const filePipeline: <F extends File = File>(source: PipelineSource<F>, transforms: Array<FilePipelineTransform<F>>, options?: PipelineOptions) => Promise<void>;
/**
 * The returned file from transform function is passed through if any.
 */
export declare function transform<F extends File = File>(function_: TransformFile<F>): Transform;
type TransformMinimatchOptions = {
    /** Minimatch options */
    patternOptions?: MinimatchOptions;
};
export type PassthroughOptions<F extends File = File> = {
    filter?: FilterFile<F>;
    pattern?: string;
} & TransformMinimatchOptions;
/**
 * Files will always be passed through.
 */
export declare function passthrough<F extends File = File>(function_?: PassthroughFile<F>, options?: PassthroughOptions<F>): Transform;
export type TransformFileField<K extends keyof F, F extends File = File> = (value: F[K], f: F) => F[K] | Promise<F[K]>;
export declare function transformFileField<K extends keyof F, F extends File = File>(field: K, fieldValue: F[K] | TransformFileField<K, F>, options?: PassthroughOptions<F>): Transform;
export declare function transformContents<F extends File = File>(function_: (contents: F['contents']) => F['contents'] | Promise<F['contents']>, options?: PassthroughOptions<F>): Transform;
/**
 * Filter file.
 * Files that doesn't match the filter condition are removed.
 */
export declare function filter<F extends File = File>(filter: FilterFile<F>): Transform;
/**
 * Conditional filter on pattern.
 * Files that doesn't match the pattern are removed.
 */
export declare function filterPattern(pattern: string, options?: TransformMinimatchOptions): Transform;
