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;
 | |
|     }
 | |
| }
 |