import type { NamespaceLinks } from '../../ops/config.ts'; import type { Resource } from '../../resource/base.ts'; import { PathSpec } from '../../types.ts'; import type { MountRegistry } from '../mount/registry.ts'; import type { Session } from '../session/session.ts'; export interface GlobOptions { nullglob: boolean; failglob: boolean; globstar: boolean; } /** Whether a mount command's glob must expand here rather than push * down: the backend knows none of these. */ export declare function globNeedsShell(opts: GlobOptions): boolean; export declare function globOptions(session: Session): GlobOptions; export interface ResourceWithGlob extends Resource { glob(paths: readonly PathSpec[], prefix?: string): Promise; } export declare function resolveGlobs(classified: readonly (string | PathSpec)[], registry: MountRegistry, noglob?: boolean, links?: NamespaceLinks | null, options?: GlobOptions | null): Promise<(string | PathSpec)[]>; /** * Expand glob words that could match across a mount boundary. * * A glob operand is normally left for the owning backend to resolve, * which is how a prefix store pushes the listing down. That only holds * while every match belongs to that backend: a nested mount's root is a * child of the directory but its keys live in another resource, so the * backend answers "no such file" for a name its own listing shows. When * the glob's fixed head holds a child mount, the word is expanded here * instead, before routing, so the matches route per mount exactly as the * same paths typed by hand already do. Every other glob is left * untouched, so pushdown is unaffected. */ export declare function expandBoundaryGlobs(parts: readonly (string | PathSpec)[], registry: MountRegistry, links: NamespaceLinks | null): Promise<(string | PathSpec)[]>; //# sourceMappingURL=globs.d.ts.map