UNPKG

container.ts

Version:
187 lines (186 loc) 7.47 kB
import * as moment from "moment-timezone"; import { ErrorChain } from "../error"; import * as Validate from "./Validate"; /** Field error codes. */ export declare enum EFieldError { InvalidAnd = 0, InvalidOr = 1, InvalidNot = 2, InvalidOptional = 3, } /** Field error chain class. */ export declare class FieldError extends ErrorChain { constructor(code: EFieldError, value?: any, cause?: Error); } /** * Fields have validate and format methods. * Validate method takes string input and returns typed output. * Format method takes typed input and returns string output. * Optional context available for additional validation/formatting information. */ export declare abstract class Field<T, K = any> { abstract validate(value?: string, context?: K): T | null; format(value: T, context?: K): string | null; and(...fields: Array<Field<T, K>>): Field<T, K>; or(...fields: Array<Field<T, K>>): Field<T, K>; not(...fields: Array<Field<T, K>>): Field<T, K>; } /** Operator field helper. */ export declare abstract class OperatorField<T, K> extends Field<T, K> { protected readonly fields: Array<Field<T, K>>; constructor(...fields: Array<Field<T, K>>); } /** And field wrapper, all input fields used to validate/format values. */ export declare class AndField<T, K> extends OperatorField<T, K> { validate(value: string, context?: any): T; format(value: T, context?: any): string; } /** Or field wrapper, at least one input field used to validate/format values. */ export declare class OrField<T, K> extends OperatorField<T, K> { validate(value: string, context?: any): T; format(value: T, context?: any): string; } /** Not field wrapper, all input fields expected to throw error/fail to format values. */ export declare class NotField<T, K> extends OperatorField<T, K> { validate(value: string, context?: any): null; format(value: T, context?: any): null; } /** * Optional field wrapper, if value is defined uses field to validate/format. * If value is undefined default or null value is returned. */ export declare class OptionalField<T, K> extends Field<T, K> { protected readonly field: Field<T, K>; protected readonly defaultValue: T | undefined; protected readonly formatDefault: string | null; constructor(field: Field<T, K>, defaultValue?: T | undefined, context?: any); validate(value?: string, context?: any): T | null; format(value?: T, context?: any): string | null; } export declare class BooleanField extends Field<boolean> { protected readonly options: Validate.IValidateBoolean; constructor(options?: Validate.IValidateBoolean); validate(value: string): boolean; } export declare class IntegerField extends Field<number> { protected readonly options: Validate.IValidateInteger; constructor(options?: Validate.IValidateInteger); validate(value: string): number; } export declare class FloatField extends Field<number> { protected readonly options: Validate.IValidateFloat; constructor(options?: Validate.IValidateFloat); validate(value: string): number; } export declare class HexadecimalField extends Field<number> { validate(value: string): number; format(value: number): string; } export declare class StringField extends Field<string> { protected readonly options: Validate.IValidateString; constructor(options?: Validate.IValidateString); validate(value: string): string; } export declare class AsciiField extends Field<string> { protected readonly options: Validate.IValidateString; constructor(options?: Validate.IValidateString); validate(value: string): string; } export declare class Base64Field extends Field<string> { protected readonly options: Validate.IValidateString; constructor(options?: Validate.IValidateString); validate(value: string): string; } export declare class AlphaField extends Field<string> { protected readonly options: Validate.IValidateAlpha; constructor(options?: Validate.IValidateAlpha); validate(value: string): string; } export declare class AlphanumericField extends Field<string> { protected readonly options: Validate.IValidateAlphanumeric; constructor(options?: Validate.IValidateAlphanumeric); validate(value: string): string; } export declare class CreditCardField extends Field<string> { validate(value: string): string; } export declare class EmailField extends Field<string> { protected readonly options: Validate.IValidateEmail; constructor(options?: Validate.IValidateEmail); validate(value: string): string; } export declare class DomainField extends Field<string> { protected readonly options: Validate.IValidateDomain; constructor(options?: Validate.IValidateDomain); validate(value: string): string; } export declare class HexColourField extends Field<string> { validate(value: string): string; } export declare class IpField extends Field<string> { protected readonly options: Validate.IValidateIp; constructor(options?: Validate.IValidateIp); validate(value: string): string; } export declare class JsonField<T> extends Field<T> { validate(value: string): T; format(value: T): string; } export declare class MacAddressField extends Field<string> { validate(value: string): string; } export declare class Md5Field extends Field<string> { validate(value: string): string; } export declare class MobilePhoneField extends Field<string> { protected readonly options: Validate.IValidateMobilePhone; constructor(options?: Validate.IValidateMobilePhone); validate(value: string): string; } export declare class MongoIdField extends Field<string> { validate(value: string): string; } export declare class PostalCodeField extends Field<string> { protected readonly options: Validate.IValidatePostalCode; constructor(options?: Validate.IValidatePostalCode); validate(value: string): string; } export declare class UrlField extends Field<string> { protected readonly options: Validate.IValidateUrl; constructor(options?: Validate.IValidateUrl); validate(value: string): string; } export declare class UuidField extends Field<string> { protected readonly options: Validate.IValidateUuid; constructor(options?: Validate.IValidateUuid); validate(value: string): string; } export declare class PortField extends Field<number> { validate(value: string): number; } export declare class LanguageField extends Field<string> { validate(value: string): string; } export declare class CountryField extends Field<string> { validate(value: string): string; } export declare class LocaleField extends Field<string> { protected readonly options: Validate.IValidateLocale; constructor(options?: Validate.IValidateLocale); validate(value: string): string; } export declare class TimeZoneField extends Field<string> { validate(value: string): string; } export declare class DateField extends Field<moment.Moment> { protected readonly options: Validate.IValidateDate; constructor(options?: Validate.IValidateDate); validate(value: string): moment.Moment; format(value: moment.Moment): string; } export declare class DurationField extends Field<moment.Duration> { protected readonly options: Validate.IValidateDuration; constructor(options?: Validate.IValidateDuration); validate(value: string): moment.Duration; format(value: moment.Duration): string; }