/// <reference types="node" />
/// <reference types="node" />
export interface Path {
    join: (...segments: string[]) => string;
    basename: (path: string, ext?: string) => string;
    extname: (path: string) => string;
    relative: (a: string, b: string) => string;
    dirname: (path: string) => string;
}
export interface Fs {
    readdir: (dir: string) => Promise<string[]>;
    stat: (dirOrFile: string) => Promise<{
        isDirectory: () => boolean;
        mtimeMs: number;
    }>;
    readFile: (path: string) => Promise<Buffer>;
    mkdir: (path: string, opts?: {
        recursive: true;
    }) => Promise<string | undefined>;
    writeFile: (path: string, contents: Buffer) => Promise<void>;
}
export interface Crypto {
    createHash: (algorithm: 'sha256') => {
        update: (content: Buffer) => {
            digest: (encoding: 'hex') => string;
        };
    };
}
export declare type TransformResult = Buffer | {
    content: Buffer;
    name: string;
} | {
    content: Buffer;
    name: string;
}[] | null;
export declare type TransformFn = (content: Buffer, file: string) => TransformResult | Promise<TransformResult>;
export declare type FileNamerFn = (originalName: string, contents: Buffer) => string | Promise<string>;
export interface BasePrcssr {
    outDir: string;
    recursive?: boolean;
    include?: (name: string, isDir: boolean, getContents?: () => Promise<Buffer | null>) => boolean | Promise<boolean>;
}
export interface RenamePrcssr extends BasePrcssr {
    rename?: FileNamerFn;
}
export interface TransformPrcssr extends BasePrcssr {
    transform: TransformFn;
}
export declare type Prcssr = RenamePrcssr | TransformPrcssr;
export interface CmplOptions {
    entry: string;
    processors: (Prcssr | Promise<Prcssr>)[];
    path?: Path | Promise<Path>;
    fs?: Fs | Promise<Fs>;
}
export declare const cntntHsh: (length?: number, crypto?: Crypto | Promise<Crypto>, path?: Path | Promise<Path>) => FileNamerFn;
export declare const cntntChngd: (crypto?: Crypto | Promise<Crypto>) => (name: string, isDir: boolean, getContents?: (() => Promise<Buffer | null>) | undefined) => Promise<boolean>;
export declare function prcss(file: string, { entry, fs, path, }: Pick<CmplOptions, 'entry' | 'fs' | 'path'>, processors: (Prcssr | null)[]): Promise<(null | Record<string, string | string[]>)[]>;
export declare function cmpl({ entry, processors, fs, path, }: CmplOptions): Promise<Record<string, string> | Record<string, string>[]>;
export interface WatchEvent {
    eventType: 'rename' | 'change';
    filename: string;
}
export interface WatchFs extends Fs {
    watch: (path: string, opts?: {
        recursive: boolean;
        signal?: AbortSignal;
    }) => AsyncIterable<WatchEvent>;
}
export interface WtchOpts extends Omit<CmplOptions, 'fs'> {
    signal?: AbortSignal;
    fs?: WatchFs | Promise<WatchFs>;
    poll?: boolean | number;
    onError?: (err: unknown) => void;
}
export declare function wtch({ signal, entry, processors, poll, onError, fs, path, }: WtchOpts): AsyncGenerator<Record<string, string> | Record<string, string>[], void, unknown>;
