import { type FileStat, type LsTimeKind } from '../../../types.ts';
import { type Zone } from '../../../utils/timezone.ts';
import { type Identity } from './identity.ts';
export declare const UNKNOWN_STAT_FIELD = "?";
export declare const STAT_FAILED_KEY = "stat_failed";
/** How --block-size scales the size column: bytes per printed unit
 * (sizes round up), the suffix GNU prints after the count, and the
 * human base (1024 for human-readable, 1000 for si) when it is one of
 * the two -h scales instead of a fixed divisor. */
export interface BlockSize {
    readonly divisor: number;
    readonly suffix: string;
    readonly humanBase: number | null;
}
/** Which columns an `ls` row carries and how its time is spelled: -g
 * drops the owner, -o the group; -i leads with the inode column and -Z
 * puts the context column before the size, both `?` since a VFS has
 * neither; timeKind picks the timestamp; timeStyle is `locale` (GNU's
 * six-month rule), `full-iso`, `long-iso`, `iso` or `+FORMAT`. */
export interface LsColumns {
    readonly owner: boolean;
    readonly group: boolean;
    readonly inode: boolean;
    readonly context: boolean;
    readonly timeKind: LsTimeKind;
    readonly timeStyle: string;
    readonly blockSize: BlockSize | null;
}
export declare const DEFAULT_COLUMNS: LsColumns;
export declare function scaledSize(n: number, block: BlockSize | null, human: boolean): string;
export declare function humanScaled(n: number, base: number, units: readonly string[]): string;
export declare function humanSize(n: number): string;
export declare function lsModeString(s: FileStat): string;
/**
 * A timestamp in GNU's full-iso layout, `%Y-%m-%d %H:%M:%S.%N %z`. The nine
 * fraction digits are the ones the stamp spells, so both hosts print what the
 * backend recorded rather than what their clock type keeps (a Python
 * `datetime` stops at microseconds, a `Date` at milliseconds). The time reads
 * in `zone`, UTC by default, and an unknown time is the epoch, as GNU renders
 * a missing file's. Mirrors Python's `full_iso_time`.
 */
export declare function fullIsoTime(modified: string | null | undefined, zone?: Zone): string;
export declare function styledTime(modified: string | null | undefined, style: string): string;
export declare function timeOf(s: FileStat, kind: LsTimeKind): string | null;
export declare function lsPrefix(columns: LsColumns): string;
export declare function lsName(s: FileStat): string;
export declare function formatLsLong(stats: readonly FileStat[], opts?: {
    human?: boolean;
    identity?: Identity | null;
    columns?: LsColumns;
    names?: readonly string[];
}): string[];
/**
 * One `find -ls` row in findutils' own layout. GNU's `find -ls` row is not
 * `ls -l`: it leads with the inode and the allocated 1K blocks, then
 * fixes every column's width (inode 9, blocks 6, links 3, owner and
 * group 8 left-aligned, size 8) instead of fitting them to the listing,
 * so a consumer can count fields. The inode and block columns carry
 * `?`, the answer `stat %i` and `%b` already give: a VFS has no inode
 * and no block allocation, and a number invented for either would read
 * as a fact. The remaining columns are the `ls -l` ones, from the same
 * helpers, so the two listings cannot disagree about a row; only the
 * name is spelled differently, escaped (`escapeFindName`) so the row
 * stays one line of fixed fields. `s` is the row named as find printed
 * it; `identity` is null outside a workspace, where both name columns
 * fall back to `-`.
 */
/**
 * Spell a name the way `find -ls` prints it. findutils escapes a name so
 * one row stays one line and its fields stay in place: a backslash, a
 * space and a double quote take a backslash, the C escapes stand for
 * their control characters, and every other control character and every
 * byte outside ASCII is an octal escape (`\303\274` for `ü`, as GNU
 * prints it in the C locale). `-print` is untouched; only the listing is
 * a table.
 */
export declare function escapeFindName(text: string): string;
export declare function formatFindLs(s: FileStat, identity: Identity | null): string;
//# sourceMappingURL=formatting.d.ts.map