import { ItemPath, ItemPathMatchLike } from "./item-path.js"; export declare enum TreeScope { SingleItem = "SingleItem", ItemAndChildren = "ItemAndChildren", ItemAndDescendants = "ItemAndDescendants", DescendantsOnly = "DescendantsOnly" } export declare enum TreeRuleScope { Ignored = "Ignored", SingleItem = "SingleItem", ItemAndChildren = "ItemAndChildren", ItemAndDescendants = "ItemAndDescendants" } export declare enum AllowedPushOperations { CreateUpdateAndDelete = "CreateUpdateAndDelete", CreateAndUpdate = "CreateAndUpdate", CreateOnly = "CreateOnly" } export declare class TreeSpecRule { path: ItemPathMatchLike; scope?: TreeRuleScope; allowedPushOperations?: AllowedPushOperations | null; validate(parent: TreeSpec): void; protected validateInternal(parent: TreeSpec, validateScopes: boolean): void; private validateScopes; private validateItemPath; private validateItemPathMatch; } export declare class FilesystemTreeSpecRule extends TreeSpecRule { alias?: string; validate(parent: TreeSpec): void; } export declare class TreeSpec { path: ItemPath; scope: TreeScope; allowedPushOperations: AllowedPushOperations; rules: FilesystemTreeSpecRule[]; validate(): void; includesPath(path: ItemPath, logger?: (message: string) => void): boolean; getAllowedPushOperationsForItem(path: ItemPath): AllowedPushOperations; protected getRulesThatApplyTo(relativePath: ItemPath): FilesystemTreeSpecRule[]; } export declare class FilesystemTreeSpec extends TreeSpec { name: string; database: string; physicalPath: string; maxRelativePathLength?: number; validate(): void; } export declare const parseItemPathMatch: (value: string) => ItemPathMatchLike;