export interface BaseRequirement { value: any; path: string[]; message: string; } export interface RequirementFactory { (path: string[], value: any): R; } export declare type Requirement = SingleRequirement | DependenceRequirement | AlternativeRequirement | ConcatenationRequirement; export interface SingleRequirement extends BaseRequirement { type: 'single'; } export interface DependenceRequirement extends BaseRequirement { type: 'dependence'; requirement: Requirement; } export interface AlternativeRequirement extends BaseRequirement { type: 'alternative'; requirements: Requirement[]; } export interface ConcatenationRequirement extends BaseRequirement { type: 'concatenation'; requirements: Requirement[]; } export declare function isRequirement(requirement: Requirement | null): requirement is Requirement; export declare function singleRequirementFactory(message: string): RequirementFactory; export declare function dependenceRequirementFactory(message: string, requirement: Requirement): RequirementFactory; export declare function alternativeRequirementFactory(message: string, requirements: Requirement[]): RequirementFactory; export declare function concatenationRequirementFactory(message: string, requirements: Requirement[]): RequirementFactory;