declare type ObjectValueTypes = null | undefined | number | string | Date | bigint | boolean | Symbol;
interface AnyObject {
    [k: string]: ObjectValueTypes | AnyObject | AnyObject[];
}
declare type classOptions = {
    nullable: boolean;
    required: boolean;
};
declare type Matcher = {
    message?: string;
    type: "number" | "string" | "boolean" | "date" | "object" | "array";
    checker: <T>(e: T) => boolean;
}[];
interface ClassDefaultChain {
    nullable: (e: boolean) => CorePrototypes;
    required: (e: boolean) => CorePrototypes;
    validate: (e: ObjectValueTypes | AnyObject | AnyObject[]) => string | null;
}
declare class CorePrototypes {
    constructor();
    options: classOptions;
    matcher: Matcher;
    nullable: (value?: boolean) => {
        validate: (value: any) => string;
    };
    required: (value?: boolean) => {
        validate: (value: any) => string;
    };
    validate(value: any): string;
    defaultChain: () => ClassDefaultChain;
}
interface StringBase {
    email: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    password: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    phone: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    creditCard: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    url: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    match: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    BindRegexpHook: (regexp: RegExp) => (message: string) => ClassDefaultChain;
}
declare class StringBase extends CorePrototypes implements StringBase {
    customRegexp?: RegExp;
    constructor(customRegexp?: RegExp);
    BindRegexpHook(regexp: RegExp): (message?: string) => ClassDefaultChain;
    email: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    password: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    phone: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    creditCard: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    url: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    match: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
}
interface NumberBase {
    email: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    password: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    phone: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    creditCard: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    url: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    match: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    BindRegexpHook: (regexp: RegExp) => (message: string, customRegexp?: RegExp) => ClassDefaultChain;
}
declare class NumberBase extends CorePrototypes implements NumberBase {
    private maxMin?;
    constructor(maxMin?: number);
    BindNumberHook: (checkFunc: (e: any, maxMin?: number) => boolean) => (message?: string) => ClassDefaultChain;
    positive: (message?: string) => ClassDefaultChain;
    negative: (message?: string) => ClassDefaultChain;
    max: (message?: string) => ClassDefaultChain;
    min: (message?: string) => ClassDefaultChain;
    float: (message?: string) => ClassDefaultChain;
    integer: (message?: string) => ClassDefaultChain;
    safeInteger: (message?: string) => ClassDefaultChain;
    bigInteger: (message?: string) => ClassDefaultChain;
}
interface DateBase {
    max: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    min: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    BindRegexpHook: (checkFunc: (e: any, maxMin?: Date) => boolean) => (message: string) => ClassDefaultChain;
}
declare class DateBase extends CorePrototypes implements DateBase {
    private maxMin?;
    constructor(maxMin?: Date);
    BindDateHook: (checkFunc: (e: any, maxMin?: Date) => boolean) => (message?: string) => ClassDefaultChain;
    max: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
    min: (message: string, customRegexp?: RegExp) => ClassDefaultChain;
}
interface BooleanBase {
}
declare class BooleanBase extends CorePrototypes implements BooleanBase {
    constructor(message?: string);
}
interface ObjectBase<T> {
}
declare class ObjectBase<T> extends CorePrototypes implements ObjectBase<T> {
    rules?: T;
    each?: false;
    message: string;
    constructor(rules?: T, each?: false, message?: string);
    init: () => this;
}
export declare const string: () => StringBase;
export declare const number: (maxMin?: number) => NumberBase;
export declare const date: () => DateBase;
export declare const boolean: (msg?: string) => BooleanBase;
export declare const object: <T>(rules?: T, message?: string, each?: false) => ObjectBase<T>;
export {};
