import type { TiDBFilesystemAccessor } from '../../accessor/tidb_filesystem.ts';
import type { FsError } from '../../errors/types.ts';
import type { PathSpec } from '../../types.ts';
import type { Entry, Kinds } from './types.ts';
/**
 * What each mount-local path is, in one fs:batch-stat. drive9 creates missing
 * parents on a write, a mkdir and a file rename, and keeps a file and a
 * directory of one name side by side, so the errno open(2) or rename(2) would
 * answer has to be worked out here from what the paths are before the call.
 * Each path is asked bare, which answers the file of a name that is both, and
 * with a trailing slash, kept under `key + '/'`, which answers only a
 * directory. The mount root is always a directory and is not asked.
 */
export declare function kindsOf(accessor: TiDBFilesystemAccessor, keys: readonly string[]): Promise<Kinds>;
/**
 * What `key` is as a folder on a longer path: the directory of a name that is
 * also a file, as a listing shows it, else what is there.
 */
export declare function folderOf(kinds: Kinds, key: string): Entry | null;
/**
 * ENOTDIR for a file above `key`, ENOENT for a missing directory above it,
 * the first the walk meets, as the kernel resolves a path.
 */
export declare function brokenParent(kinds: Kinds, spec: PathSpec, key: string): FsError | null;
export declare function lookupError(kinds: Kinds, spec: PathSpec, key: string): FsError;
export declare function checkWriteTarget(kinds: Kinds, spec: PathSpec, key: string): void;
/**
 * Refuse a mkdir GNU refuses; true when `-p` finds it done. Plain mkdir is
 * EEXIST for anything at the target and owes the parent chain the walk a
 * write owes it. `-p` names the component it trips on: a file above the
 * target is ENOTDIR, the target as a file EEXIST, and the target as a
 * directory is success.
 */
export declare function checkMkdirTarget(kinds: Kinds, spec: PathSpec, key: string, parents: boolean): boolean;
/**
 * Refuse a rename rename(2) refuses once both ends resolve. A missing
 * destination parent is ENOENT and a file above it ENOTDIR; a file onto a
 * directory is EISDIR, a directory onto a file ENOTDIR, and into its own
 * subtree EINVAL. A directory onto one that holds entries is left to drive9,
 * which answers it with a conflict.
 */
export declare function checkRename(kinds: Kinds, src: PathSpec, s: string, dst: PathSpec, d: string): void;
//# sourceMappingURL=dest.d.ts.map