256 lines
5.5 KiB
TypeScript
256 lines
5.5 KiB
TypeScript
|
/// <reference types="node" />
|
||
|
|
||
|
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<string> | true;
|
||
|
}
|
||
|
|
||
|
interface Deny {
|
||
|
|
||
|
readonly deny: Set<string>;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
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<string, string>;
|
||
|
|
||
|
|
||
|
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<Options.Options, Options.Relative>;
|
||
|
|
||
|
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;
|
||
|
}
|
||
|
}
|