export type BaseTypes = 'objectId' | 'dateInt6' | 'dateInt' | 'dateInt8' | 'dateInt12' | 'time' | 'humanReadableTimestamp' | 'date' | 'dateObject' | 'array' | 'object' | 'buffer' | 'string' | 'function' | 'boolean' | 'number' | 'bigint' | 'year' | 'email' | 'any';
export declare function issetOr(...elms: any[]): boolean;
export declare function isEmptyOrNotSet(...elms: any[]): boolean;
export declare function isDateObject(variable: any): boolean;
/** Check all values are set */
export declare function checkAllObjectValuesAreEmpty(o: any): boolean;
/** Throw an error in case data passed is not a valid ctx */
export declare function checkCtxIntegrity(ctx: any): void;
/**
## VALIDATOR

@name validator

@description support multiple names, multiple values and multiple type check
@option if nameString ends by $ sign it is considered optional

@function validator([Objects])
@return {error|true/false|testMode} depend on mode (see prop mode)
@param {} mode normal (default) | test (TODO) | boolean
@param {} name 'myName' || [{myVar1: 'blah, myvar2: myvar2}], support multiple names / values
@param {} value myVar,
@param {string} myVar myVar, instead of name / value
@param {array} in ['blah', 'otherPossibleValue', true], equal ONE OF THESE values
@param {any} eq exactly equal to in, both support string or array of values
@param {any} neq not in, both support string or array of values
@param {number} lte 3, less than or equal
@param {number} gte 1, greater or equal
@param {number} lt 3, less than
@param {number} gt 1, greater
@param {string|string[]} type
 * possibleTypes: object, number, string, boolean, array, date, dateInt8, dateInt12, dateInt6, time, objectId (mongo), humanReadableTimestamp, buffer
 * Notes: multiples value is an OR, /!\ Array is type 'array' and not 'object' like in real JS /!\
@param {regExp} regexp /regexp/, test against regexp
@param {number} minLength for string, array or number length
@param {number} maxLength
@param {number} length
@param {boolean} optional default false
@param {boolean} emptyAllowed default false (to use if must be set but can be empty)
@param {boolean} mustNotBeSet this one must not be set
@param {any} includes check if array or string includes value (like js .includes())

@example
    validator(
        { myNumber : 3, type: 'number', gte: 1, lte: 3 }, // use the name directly as a param
        { name: 'email', value: 'nameATsite.com', regexp: /[^\sAT]+AT[^\sAT]+\.[^\sAT]/},
        { name: [{'blahVar': blahVarValue, 'myOtherVar': myOtherVarValue}], type: 'string'} // multiple names for same check
    )
----------------------------------------*/
export type ValidatorObject = {
    name?: string;
    value?: any;
    type?: BaseTypes;
    eq?: any;
    neq?: any;
    in?: any[];
    lt?: number;
    gt?: number;
    lte?: number;
    gte?: number;
    length?: number;
    minLength?: number;
    maxLength?: number;
    emptyAllowed?: boolean;
    regexp?: RegExp;
    mustNotBeSet?: boolean;
    isset?: boolean;
    optional?: boolean;
    isArray?: boolean;
    includes?: any;
    [k: string]: any;
};
export declare function validator(...paramsToValidate: ValidatorObject[]): void;
/** Same as validator but return a boolean
 * See {@link validator}
 */
export declare function isValid(...paramsToValidate: ValidatorObject[]): boolean;
/** Default types + custom types
 * 'objectId','dateInt6','dateInt','dateInt8','dateInt12','time','humanReadableTimestamp','date','array','object','buffer','string','function','boolean','number','bigint',
 */
export declare function isType(value: any, type: BaseTypes): boolean;
export declare function validatorReturnErrArray(...paramsToValidate: ValidatorObject[]): [string?, object?];
