/// <reference types="validator" />
import * as moment from "moment-timezone";
import { ErrorChain } from "../error";
/** Validate error codes. */
export declare enum EValidateError {
    InvalidBoolean = 0,
    InvalidInteger = 1,
    InvalidFloat = 2,
    InvalidHexadecimal = 3,
    InvalidString = 4,
    InvalidAscii = 5,
    InvalidBase64 = 6,
    InvalidAlpha = 7,
    InvalidAlphanumeric = 8,
    InvalidCreditCard = 9,
    InvalidEmail = 10,
    InvalidDomain = 11,
    InvalidHexColour = 12,
    InvalidIp = 13,
    InvalidJson = 14,
    InvalidMacAddress = 15,
    InvalidMd5 = 16,
    InvalidMobilePhone = 17,
    InvalidMongoId = 18,
    InvalidPostalCode = 19,
    InvalidUrl = 20,
    InvalidUuid = 21,
    InvalidPort = 22,
    InvalidLanguage = 23,
    InvalidCountry = 24,
    InvalidLocale = 25,
    InvalidTimeZone = 26,
    InvalidDate = 27,
    InvalidDuration = 28,
}
/** Validate error chain class. */
export declare class ValidateError extends ErrorChain {
    constructor(code: EValidateError, value?: any, cause?: Error);
}
/** Validate.isBoolean options. */
export interface IValidateBoolean {
    /** If true, strict validation is used. */
    strict?: boolean;
}
/** Wrapper for validator.toBoolean. */
export declare function isBoolean(value?: string, options?: IValidateBoolean): boolean;
/** Validate.isInteger options. */
export interface IValidateInteger extends ValidatorJS.IsIntOptions {
}
/** Wrapper for validator.isInt. */
export declare function isInteger(value?: string, options?: IValidateInteger): number;
/** Validate.isFloat options. */
export interface IValidateFloat extends ValidatorJS.IsFloatOptions {
}
/** Wrapper for validator.isFloat. */
export declare function isFloat(value?: string, options?: IValidateFloat): number;
/** Wrapper for validator.isHexadecimal. */
export declare function isHexadecimal(value?: string): number;
/** Validate.isString options. */
export interface IValidateString extends ValidatorJS.IsLengthOptions {
    /** Require lower case characters. */
    lowercase?: boolean;
    /** Require upper case characters. */
    uppercase?: boolean;
    /** Optional array of allowed values. */
    values?: string[];
}
/** Wrapper for validator methods isLength, isUppercase, isLowercase and isIn. */
export declare function isString(value?: string, options?: IValidateString): string;
/** Wrapper for validator.isAscii. */
export declare function isAscii(value?: string, options?: IValidateString): string;
/** Wrapper for validator.isBase64. */
export declare function isBase64(value?: string, options?: IValidateString): string;
/** Validate.isAlpha options. */
export interface IValidateAlpha extends IValidateString {
    /** Locale used by validator, defaults to en-GB. */
    locale?: ValidatorJS.AlphaLocale;
}
/** Wrapper for validator.isAlpha. */
export declare function isAlpha(value?: string, options?: IValidateAlpha): string;
/** Validate.isAlphanumeric options. */
export interface IValidateAlphanumeric extends IValidateString {
    /** Locale used by validator, defaults to en-GB. */
    locale?: ValidatorJS.AlphanumericLocale;
}
/** Wrapper for validator.isAlphanumeric. */
export declare function isAlphanumeric(value?: string, options?: IValidateAlphanumeric): string;
/** Wrapper for validator.isCreditCard. */
export declare function isCreditCard(value?: string): string;
/** Validate.isEmail options. */
export interface IValidateEmail extends ValidatorJS.IsEmailOptions {
}
/** Wrapper for validator.isEmail. */
export declare function isEmail(value?: string, options?: IValidateEmail): string;
/** Validate.isDomain options. */
export interface IValidateDomain extends ValidatorJS.IsFQDNOptions {
}
/** Wrapper for validator.isFQDN. */
export declare function isDomain(value?: string, options?: IValidateDomain): string;
/** Wrapper for validator.isHexColor. */
export declare function isHexColour(value?: string): string;
/** Validate.isIp options. */
export interface IValidateIp {
    /** IP version number, defaults to 4. */
    version?: 4 | 6;
}
/** Wrapper for validator.isIP. */
export declare function isIp(value?: string, options?: IValidateIp): string;
/** Wrapper for validator.isJSON. */
export declare function isJson<T>(value?: string): T;
/** Wrapper for validator.isMACAddress. */
export declare function isMacAddress(value?: string): string;
/** Wrapper for validator.isMD5. */
export declare function isMd5(value?: string): string;
/** Validate.isMobilePhone options. */
export interface IValidateMobilePhone {
    /** Locale used by validator, defaults to en-GB. */
    locale?: ValidatorJS.MobilePhoneLocale;
}
/** Wrapper for validator.isMobilePhone. */
export declare function isMobilePhone(value?: string, options?: IValidateMobilePhone): string;
/** Wrapper for validator.isMongoId. */
export declare function isMongoId(value?: string): string;
/** Validate.isPostalCode options. */
export interface IValidatePostalCode {
    /** Locale used by validator, defaults to GB. */
    locale?: ValidatorJS.PostalCodeLocale;
}
/** Wrapper for validator.isPostalCode. */
export declare function isPostalCode(value?: string, options?: IValidatePostalCode): string;
/** Validate.isUrl options. */
export interface IValidateUrl extends ValidatorJS.IsURLOptions {
}
/** Wrapper for validator.isURL. */
export declare function isUrl(value?: string, options?: IValidateUrl): string;
/** Validate.isUuid options. */
export interface IValidateUuid {
    /** UUID version number, defaults to all. */
    version?: 3 | 4 | 5;
}
/** Wrapper for validator.isUUID. */
export declare function isUuid(value?: string, options?: IValidateUuid): string;
/** Validate that value is a valid port number (1 - 65535). */
export declare function isPort(value?: string): number;
/** Validate that value is a valid ISO639 language code. */
export declare function isLanguage(value?: string): string;
/** Validate that value is a valid ISO3166 country code. */
export declare function isCountry(value?: string): string;
/** Validate.isLocale options. */
export interface IValidateLocale {
    /** Language/country code separator, defaults to '_'. */
    separator?: string;
}
/** Validate that value is a valid locale (language_COUNTRY). */
export declare function isLocale(value?: string, options?: IValidateLocale): string;
/** Validate that value is a valid time zone defined in 'moment-timezone' library. */
export declare function isTimeZone(value?: string): string;
/** Validate.isDate options. */
export interface IValidateDate {
    /** Formatting hints passed to 'moment-timezone', defaults to ISO8601. */
    format?: string | string[];
    /** Timezone used for parsing, defaults to 'Etc/UTC'. */
    timezone?: string;
}
/** Validate that value is a valid date parsed by 'moment-timezone' library. */
export declare function isDate(value?: string, options?: IValidateDate): moment.Moment;
/** Validate.isDuration options. */
export interface IValidateDuration {
    /** Optional unit of time passed to 'moment-timezone'. */
    unit?: moment.unitOfTime.DurationConstructor;
}
/** Validate that value is a valid duration parsed by 'moment-timezone' library. */
export declare function isDuration(value?: string, options?: IValidateDuration): moment.Duration;
/** Static validate methods container. */
export declare class Validate {
    static isBoolean: typeof isBoolean;
    static isInteger: typeof isInteger;
    static isFloat: typeof isFloat;
    static isHexadecimal: typeof isHexadecimal;
    static isString: typeof isString;
    static isAscii: typeof isAscii;
    static isBase64: typeof isBase64;
    static isAlpha: typeof isAlpha;
    static isAlphanumeric: typeof isAlphanumeric;
    static isCreditCard: typeof isCreditCard;
    static isEmail: typeof isEmail;
    static isDomain: typeof isDomain;
    static isHexColour: typeof isHexColour;
    static isIp: typeof isIp;
    static isJson: typeof isJson;
    static isMacAddress: typeof isMacAddress;
    static isMd5: typeof isMd5;
    static isMobilePhone: typeof isMobilePhone;
    static isMongoId: typeof isMongoId;
    static isPostalCode: typeof isPostalCode;
    static isUrl: typeof isUrl;
    static isUuid: typeof isUuid;
    static isPort: typeof isPort;
    static isLanguage: typeof isLanguage;
    static isCountry: typeof isCountry;
    static isLocale: typeof isLocale;
    static isTimeZone: typeof isTimeZone;
    static isDate: typeof isDate;
    static isDuration: typeof isDuration;
}
