import { IOResult, type ByteSource } from '../../../io/types.ts';
import type { PathSpec } from '../../../types.ts';
import type { Context } from '../../config.ts';
import { type FlagValue } from '../../spec/types.ts';
export interface CmpFlags {
    readonly silent: boolean;
    readonly verbose: boolean;
    readonly limit: number | null;
    readonly printBytes: boolean;
    readonly skip: readonly [number, number];
}
/**
 * cmp's counts read by mirage-rs before any operand is resolved: -n, -i, -l
 * and -s in the order typed, so the first refusal is the one diffutils makes
 * while it reads its options, then the SKIP1 and SKIP2 operands of `texts`.
 * The flags, or cmp's refusal, exit 2. A count past 2**53 is the nearest
 * double, which no file reaches. Mirrors Python's `parse_flags`.
 */
export declare function parseFlags(bag: Record<string, FlagValue>, texts?: readonly string[]): CmpFlags | IOResult;
/**
 * Compare two files byte by byte, GNU cmp semantics. Each file is streamed
 * and the reads stop at the first difference, or at `-n`; only `-l`, which
 * lists every difference, reads both to the end. Under `-s` two regular files
 * whose sizes past their skips differ answer 1 unread, as diffutils does.
 * Mirrors Python's cmp_cmd.
 */
export declare function cmpGeneric(parsed: CmpFlags, paths: PathSpec[], texts: readonly string[], ctx: Context, stream: (p: PathSpec) => AsyncIterable<Uint8Array>, sizeOf?: (p: PathSpec) => Promise<number | null>, lengthOf?: ((p: PathSpec) => Promise<number | null>) | undefined): Promise<[ByteSource | null, IOResult]>;
//# sourceMappingURL=cmp.d.ts.map