/// import * as Hoek from '@hapi/hoek'; export namespace domain { /** * Analyzes a string to verify it is a valid domain name. * * @param domain - the domain name to validate. * @param options - optional settings. * * @return - undefined when valid, otherwise an object with single error key with a string message value. */ function analyze(domain: string, options?: Options): Analysis | null; /** * Analyzes a string to verify it is a valid domain name. * * @param domain - the domain name to validate. * @param options - optional settings. * * @return - true when valid, otherwise false. */ function isValid(domain: string, options?: Options): boolean; interface Options { /** * Determines whether Unicode characters are allowed. * * @default true */ readonly allowUnicode?: boolean; /** * The minimum number of domain segments (e.g. `x.y.z` has 3 segments) required. * * @default 2 */ readonly minDomainSegments?: number; /** * Top-level-domain options * * @default true */ readonly tlds?: Tlds.Allow | Tlds.Deny | boolean; } namespace Tlds { interface Allow { readonly allow: Set | true; } interface Deny { readonly deny: Set; } } } export namespace email { /** * Analyzes a string to verify it is a valid email address. * * @param email - the email address to validate. * @param options - optional settings. * * @return - undefined when valid, otherwise an object with single error key with a string message value. */ function analyze(email: string, options?: Options): Analysis | null; /** * Analyzes a string to verify it is a valid email address. * * @param email - the email address to validate. * @param options - optional settings. * * @return - true when valid, otherwise false. */ function isValid(email: string, options?: Options): boolean; interface Options extends domain.Options { /** * Determines whether to ignore the standards maximum email length limit. * * @default false */ readonly ignoreLength?: boolean; } } export interface Analysis { /** * The reason validation failed. */ error: string; /** * The error code. */ code: string; } export const errors: Record; export namespace ip { /** * Generates a regular expression used to validate IP addresses. * * @param options - optional settings. * * @returns an object with the regular expression and meta data. */ function regex(options?: Options): Expression; interface Options { /** * The required CIDR mode. * * @default 'optional' */ readonly cidr?: Cidr; /** * The allowed versions. * * @default ['ipv4', 'ipv6', 'ipvfuture'] */ readonly version?: Version | Version[]; } type Cidr = 'optional' | 'required' | 'forbidden'; type Version = 'ipv4' | 'ipv6' | 'ipvfuture'; interface Expression { /** * The CIDR mode. */ cidr: Cidr; /** * The raw regular expression string. */ raw: string; /** * The regular expression. */ regex: RegExp; /** * The array of versions allowed. */ versions: Version[]; } } export namespace uri { /** * Faster version of decodeURIComponent() that does not throw. * * @param string - the URL string to decode. * * @returns the decoded string or null if invalid. */ function decode(string: string): string | null; /** * Generates a regular expression used to validate URI addresses. * * @param options - optional settings. * * @returns an object with the regular expression and meta data. */ function regex(options?: Options): Expression; type Options = Hoek.ts.XOR; namespace Options { interface Query { /** * Allow the use of [] in query parameters. * * @default false */ readonly allowQuerySquareBrackets?: boolean; } interface Relative extends Query { /** * Requires the URI to be relative. * * @default false */ readonly relativeOnly?: boolean; } interface Options extends Query { /** * Allow relative URIs. * * @default false */ readonly allowRelative?: boolean; /** * Capture domain segment ($1). * * @default false */ readonly domain?: boolean; /** * The allowed URI schemes. */ readonly scheme?: Scheme | Scheme[]; } type Scheme = string | RegExp; } interface Expression { /** * The raw regular expression string. */ raw: string; /** * The regular expression. */ regex: RegExp; } }