import { Observable, NextObserver } from 'rxjs'; import { BasicModel } from './models'; export declare const ASYNC_VALIDATOR: unique symbol; export interface IAsyncValidator { [ASYNC_VALIDATOR]: true; validator(input: T, ctx: ValidatorContext): null | Observable> | Promise>; $$id?: any; } export interface ISyncValidator { (input: T, ctx: ValidatorContext): IMaybeError; $$id?: any; } export declare type IValidator = IAsyncValidator | ISyncValidator; export declare type IValidators = readonly IValidator[]; export declare function isAsyncValidator(validator: ISyncValidator | IAsyncValidator): validator is IAsyncValidator; export declare function createAsyncValidator(validator: (value: T, context: ValidatorContext) => null | Observable> | Promise>): IAsyncValidator; export interface IValidateResult { name: string; message?: string; expect?: T; actual?: T; [key: string]: any; } export declare type IMaybeError = IValidateResult | null | undefined; export declare enum ValidateOption { Empty = 0, IncludeAsync = 2, IncludeUntouched = 4, IncludeChildrenRecursively = 8, ExcludePristine = 16, StopPropagation = 32, Default = 0 } export interface IValidation { option: ValidateOption; resolve(error?: IMaybeError): void; reject(error?: any): void; } export declare class ErrorSubscriber implements NextObserver> { private readonly model; constructor(model: BasicModel); next(error: IMaybeError): void; } export declare class ValidatorContext { readonly model: BasicModel; constructor(model: BasicModel); getSection(): BasicModel['owner']; getSectionValue(...names: string[]): T | null; getFormValue(): T | null | undefined; } export declare function validate(model: BasicModel): (validation: IValidation) => Observable>;