import { ValueOf } from '../@types/common';
export declare type RuleTypeEnum = 'email' | 'integer' | 'number' | 'url' | 'json' | 'hex' | 'rgb' | 'ipv4';
export declare type MessageType = string | ((props: any) => string);
export interface Required {
    required?: boolean;
    message?: MessageType;
}
export interface Max {
    max?: number;
    message?: MessageType;
}
export interface Min {
    min?: number;
    message?: MessageType;
}
export interface Range extends Min, Max {
}
export interface Type {
    type?: RuleTypeEnum;
    message?: MessageType;
}
export interface RegExpParams {
    regExp?: RegExp | string;
    message?: MessageType;
}
export interface ValidFunc {
    (value: any, formData: any, callback: (cbArgs: (true | Error) | (true | Error)[]) => void, props: any): void | Promise<any>;
}
export interface RuleCommonResult {
    /**
     * @en whether to be required
     * @cn 是否必填
     */
    required: InnerRuleFunc<(message?: MessageType) => Required>;
    /**
     * @en The minimum value. When type is 'number', validate the value. Otherwise, validate the value.length.
     * @cn 最小值，type 为 'number' 时，判断数值大小，其他类型判断 length
     */
    min: InnerRuleFunc<(number?: number, message?: MessageType) => Min>;
    /**
     * @en The maximum value. When type is 'number', validate the value. Otherwise, validate the value.length.
     * @cn 最大值，type 为 'number' 时，判断数值大小，其他类型判断 length
     */
    max: InnerRuleFunc<(number?: number, message?: MessageType) => Max>;
    /**
     * @en Range check, automatically determines whether the check type is a string, number, or option base on the field type.
     * @cn 数值范围校验，会根据 Field 的 type 自动判断校验类型为字符串、数字或选项
     */
    range: InnerRuleFunc<(min?: number, max?: number, message?: MessageType) => Range>;
    /**
     * @en regular expression
     * @cn 正则表达式
     */
    regExp: InnerRuleFunc<(reg?: RegExp | string, message?: MessageType) => RegExpParams>;
    /**
     * @en Email check
     * @cn 邮箱校验
     */
    email: InnerRuleFunc<(message?: MessageType) => Type>;
    /**
     * @en Integer check
     * @cn 整数校验
     */
    integer: InnerRuleFunc<(message?: MessageType) => Type>;
    /**
     * @en Number check
     * @cn 数值校验
     */
    number: InnerRuleFunc<(message?: MessageType) => Type>;
    /**
     * @en Url check
     * @cn Url 校验
     */
    url: InnerRuleFunc<(message?: MessageType) => Type>;
    /**
     * @en Json check
     * @cn Json 校验
     */
    json: InnerRuleFunc<(message?: MessageType) => Type>;
    /**
     * @en Hex check
     * @cn Hex 校验
     */
    hex: InnerRuleFunc<(message?: MessageType) => Type>;
    /**
     * @en Rgb check
     * @cn Rgb 校验
     */
    rgb: InnerRuleFunc<(message?: MessageType) => Type>;
    /**
     * @en Ipv4 check
     * @cn Ipv4 校验
     */
    ipv4: InnerRuleFunc<(message?: MessageType) => Type>;
}
export interface RuleFuncResult {
    <U>(args?: U): {
        args: U;
        func: ValidFunc;
        message?: MessageType;
    };
    isInnerValidator: true;
}
export declare type RuleResult = ({
    [key: string]: RuleFuncResult;
}) | RuleCommonResult;
export declare type RuleResultValue = ValueOf<RuleResult>;
export declare type FormItemObjectRule = Type & RegExpParams & Range & Min & Max & Required & {
    func?: ValidFunc;
};
export declare type FormItemRule<Value, FormData = any, Props = any> = Array<RuleResultValue | FormItemObjectRule | ((value: Value, formData: FormData, callback: ((cbArgs: boolean | Error) => void), props?: Props) => void)>;
export interface RuleParams {
    required?: Required;
    min?: Min;
    max?: Max;
    range?: Range;
    regExp?: RegExpParams;
    email?: Type;
    integer?: Type;
    number?: Type;
    url?: Type;
    json?: Type;
    hex?: Type;
    rgb?: Type;
    ipv4?: Type;
    [propName: string]: {
        func?: ValidFunc;
        message?: MessageType;
    } | ValidFunc | undefined;
}
export declare type InnerRuleFunc<U> = U & {
    isInnerValidator: true;
};
