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[]; /** * 判断一个校验函数是否是异步的,异步的校验函数必须使用 `createAsyncValidator` 创建 * @param validator 校验函数 */ export declare function isAsyncValidator(validator: ISyncValidator | IAsyncValidator): validator is IAsyncValidator; /** * 创建一个异步校验函数 * @param validator 异步校验函数的实现 */ 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, /** * 校验时包含没有 `touch` 过的字段 */ IncludeUntouched = 4, /** * 递归校验下层的 `Field`,适用于直接从 `FieldSet` 和 `FieldArray` 触发的校验 */ IncludeChildrenRecursively = 8, /** * 不校验没有修改过的 `Field` */ 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; } /** * 执行 `model` 上的校验规则对 `model` 校验 * @param model 要校验的 model 对象 */ export declare function validate(model: BasicModel): (validation: IValidation) => Observable>; //# sourceMappingURL=validate.d.ts.map