import { FlagView } from '../../spec/flag_view.ts';
import { FileStat, LineFacts, PathSpec, type LsIndicator, type LsLinkMode, type LsSortBy, type LsTimeKind, type ReaddirFn, type StatFn } from '../../../types.ts';
import type { CommandFnResult, Context } from '../../config.ts';
import type { StatPath } from '../../../view/types.ts';
import { type LsColumns } from '../utils/formatting.ts';
export declare const LS_OK = 0;
export declare const LS_MINOR_PROBLEM = 1;
export declare const LS_FAILURE = 2;
interface LsWarning {
    message: string;
    serious: boolean;
}
export declare function exitStatusFor(warnings: readonly LsWarning[]): number;
/**
 * The mark GNU appends to a name for a style (coreutils 9.7). A directory is
 * `/` in every style but none; `slash` marks nothing else. A link is `@` and a FIFO `|`; an executable regular file is
 * `*`, but only under classify. The mark rides the row's own type and mode, so
 * it needs no separate lookup; a row nothing could stat (a dangling link's
 * target) takes none. Mirrors Python's type_indicator.
 */
export declare function typeIndicator(entry: FileStat | null, style: LsIndicator): string;
export declare function uriEscape(path: string): string;
/**
 * Indices of `names` (none holding a NUL) in `ls -v` order, each once;
 * equal names keep their input order. Mirrors sort_by_version in ls.py.
 */
export declare function sortByVersion(names: readonly string[]): Promise<number[]>;
export declare function sortStats(stats: readonly FileStat[], sortBy: LsSortBy, reverse: boolean, timeKind?: LsTimeKind, groupDirsFirst?: boolean, escape?: boolean): Promise<FileStat[]>;
/** The ls flag bag, parsed once. */
export interface LsFlags {
    readonly long: boolean;
    readonly all: boolean;
    readonly showDotEntries: boolean;
    readonly human: boolean;
    readonly reverse: boolean;
    readonly indicator: LsIndicator;
    readonly recursive: boolean;
    readonly listDir: boolean;
    readonly deref: boolean;
    readonly followArgs: boolean;
    readonly sortBy: LsSortBy;
    readonly timeKind: LsTimeKind;
    readonly groupDirsFirst: boolean;
    readonly columns: LsColumns;
    readonly escape: boolean;
    readonly hyperlink: boolean;
}
/**
 * The indicator style a line asks for: the last of -F/--classify[=WHEN], -p,
 * --file-type and --indicator-style wins, and every one is checked on the
 * way, as GNU checks each value while it reads the options (coreutils 9.7).
 * Mirrors Python's indicator_flag.
 */
export declare function indicatorFlag(fl: FlagView): LsIndicator;
/**
 * Which command-line links GNU ls resolves before it lists them. GNU settles
 * it once: the last of -L, -H and --dereference-command-line-symlink-to-dir
 * wins, and with none of them -d, a long format or the classify style resolve
 * no link while anything else resolves one that leads to a directory
 * (coreutils 9.7). A value the command refuses leaves the style unclassified,
 * since that line fails before it lists anything. `indicator` is the style a
 * scan of the whole line already read; without it the indicator options are
 * read here. Mirrors Python's link_mode.
 */
export declare function linkMode(fl: FlagView, indicator?: LsIndicator): LsLinkMode;
/**
 * An ls line resolves the command-line links `linkMode` says, and walks, and
 * reads, below its operands under `-R`. Mirrors Python's `facts`.
 */
export declare function facts(fl: FlagView, _operands: readonly (string | PathSpec)[]): LineFacts;
export declare function parseFlags(fl: FlagView): LsFlags;
export declare function lsGeneric(paths: PathSpec[], ctx: Context, readdir: ReaddirFn<[path: PathSpec, nofollow?: boolean, limit?: number]>, stat: StatFn, statPath?: StatPath | null, flags?: LsFlags): Promise<CommandFnResult>;
export {};
//# sourceMappingURL=ls.d.ts.map