import { FileStat, PathSpec } from '../../../types.ts';
import type { DispatchFn } from '../../../runtime/types.ts';
import type { NamespaceLinks } from '../../../view/types.ts';
import type { FsCondition } from '../../../errors/types.ts';
export declare function statOrNull(dispatch: DispatchFn, path: PathSpec): Promise<FileStat | null>;
export declare function pathStat(dispatch: DispatchFn, virtual: string | PathSpec): Promise<FileStat | null>;
export declare function missCondition(dispatch: DispatchFn, virtual: string | PathSpec): Promise<FsCondition>;
export declare function pathReaddir(dispatch: DispatchFn, virtual: string | PathSpec): Promise<string[]>;
export declare function pathExists(dispatch: DispatchFn, virtual: string | PathSpec): Promise<boolean>;
/**
 * Where a path really points, as the dispatcher can address it: the namespace's
 * walk, with a relative target's walk up from the link's own directory
 * (`../a.txt`) collapsed, which the dispatcher does not do for a path it is handed
 * whole. The link's directory is a real one, since the table keys every link
 * by its resolved parent, so the `..` it names is that directory's parent.
 * `links` is the session's link table (`Namespace.sessionLinks`). Throws
 * CycleError when the chain loops. Mirrors Python's resolve_link.
 */
export declare function resolveLink(links: NamespaceLinks, virtual: string): string;
export declare function linkTargetStat(links: NamespaceLinks, dispatch: DispatchFn, virtual: string): Promise<FileStat | null>;
//# sourceMappingURL=probe.d.ts.map