import { type ByteSource } from '../../../io/types.ts';
import type { PathSpec, ReadStreamFn } from '../../../types.ts';
import type { CommandFnResult, Context } from '../../config.ts';
import { type FlagValue } from '../../spec/types.ts';
export interface WcRow {
    values: number[];
    label: string | null;
}
export interface WcFlags {
    lines: boolean;
    words: boolean;
    bytes: boolean;
    chars: boolean;
    maxLineLength: boolean;
    total: 'auto' | 'always' | 'only' | 'never';
}
export declare function parseFlags(bag: Record<string, FlagValue>): WcFlags | string;
/**
 * GNU wc's column width, which it takes from the operands.
 *
 * One operand, or stdin, shown with one count prints unpadded. Otherwise the
 * width is the digits of the regular files' total size, and at least 7 once
 * any operand is a stream or a directory, whose size GNU cannot know
 * (coreutils 9.7). A redirected file reaches mirage as a stream, so
 * `wc < file` pads to 7 where GNU pads to the file's size. `sizes` holds, per
 * operand that opened, a regular file's size or null for a stream or a
 * directory; `operands` counts the operands given, 1 for stdin. Mirrors
 * Python's number_width.
 */
export declare function numberWidth(sizes: readonly (number | null)[], operands: number, counts: number): number;
export declare function formatWcLines(rows: WcRow[], width?: number | null): string[];
export declare function formatCountRows(rows: WcRow[], totalValues: number[], operandCount: number, total: WcFlags['total'], width?: number | null): ByteSource | null;
/** How many columns a row shows under these flags. */
export declare function shownCounts(flags: WcFlags): number;
/**
 * Run wc over resolved operands, GNU semantics. Lines counted alone are asked
 * of `lineCount` first, so a mount that can count a file's lines on its own
 * (a `COUNT(*)` on a table) does not send it; null, or no `lineCount`, reads
 * the file. A row counted that way has no byte size, so the columns are as
 * wide as the printed numbers. Bytes counted alone are asked of `sizeOf`
 * first, as GNU takes a regular file's size from its stat. Mirrors Python's
 * `wc_generic` and `format_multi`.
 */
export declare function wcGeneric(paths: PathSpec[], texts: string[], ctx: Context, stream: ReadStreamFn, lineCount?: (p: PathSpec) => Promise<number | null>, sizeOf?: (p: PathSpec) => Promise<number | null>): Promise<CommandFnResult>;
//# sourceMappingURL=wc.d.ts.map