container.ts
Version:
Modular application framework
187 lines (186 loc) • 7.47 kB
TypeScript
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;
}