type ruleReturn = boolean | Promise<boolean>
type ruleValidator = (value: any) => ruleReturn
type variableType = 'string' | 'object' | 'array' | 'boolean' | 'number' | 'null' | 'undefined' | 'symbol' | 'NaN'
export interface ruleType {
[key: string]: any;
message?: string;
msg?: string;
required?: (value: any, ruleValue: boolean) => ruleReturn;
validator?: (value: any, ruleValue: ruleValidator) => ruleReturn;
eq?: (value: any, ruleValue: any) => ruleReturn;
not?: (value: any, ruleValue: any) => ruleReturn;
type?: (value: any, ruleValue: variableType) => ruleReturn;
min?: (value: any, ruleValue: number) => ruleReturn;
max?: (value: any, ruleValue: number) => ruleReturn;
gt?: (value: any, ruleValue: any) => ruleReturn;
gte?: (value: any, ruleValue: any) => ruleReturn;
lt?: (value: any, ruleValue: any) => ruleReturn;
lte?: (value: any, ruleValue: any) => ruleReturn;
length?: (value: any, ruleType: number | [number, number]) => ruleReturn;
between?: (value: any, ruleValue: [any, any]) => ruleReturn;
notBetween?: (value: any, ruleValue: [any, any]) => ruleReturn;
in?: (value: any, ruleValue: any[] | string | object) => ruleReturn;
notIn?: (value: any, ruleValue: any) => ruleReturn;
math?: (value: any, ruleValue: RegExp) => ruleReturn;
notMath?: (value: any, ruleValue: RegExp) => ruleReturn;
like?: (value: any, ruleValue: string) => ruleReturn;
notLike?: (value: any, ruleValue: string) => ruleReturn;
email?: (value: any, ruleValue: RegExp | boolean) => ruleReturn;
empty?: (value: any, ruleValue: boolean) => ruleReturn;
}