import { ErrorChain } from "../error"; /** Field error codes. */ export declare enum EFieldError { AndFieldError = 0, OrFieldError = 1, NotFieldError = 2, OptionalFieldError = 3 } /** Field error chain class. */ export declare class FieldError extends ErrorChain { constructor(code: EFieldError, value?: any, cause?: Error); } /** Field abstract base class. */ export declare abstract class Field { /** Validate method takes string input and returns typed output. */ abstract validate(value?: string | object, context?: C): T | null; /** Format method takes typed input and returns string output. */ format(value: T, context?: C): string | object | null; /** Return an optional instance of this field. */ optional(defaultValue?: T): OptionalField; /** And operator chaining. */ and(...fields: Field[]): Field; /** Or operator chaining. */ or(...fields: Field[]): Field; /** Not operator chaining. */ not(...fields: Field[]): Field; } /** Field operator abstract base class. */ export declare abstract class OperatorField extends Field { /** Chained fields for use by operator methods. */ protected readonly fields: Field[]; constructor(...fields: Field[]); } /** * Optional field wrapper, if value is defined uses field in validation/formatting. * If value is undefined default or null value is returned. */ export declare class OptionalField extends Field { protected readonly field: Field; protected readonly defaultValue?: T | undefined; protected readonly formatDefault: string | object | null; constructor(field: Field, defaultValue?: T | undefined, context?: any); validate(value?: string, context?: C): T | null; format(value?: T, context?: C): string | object | null; } /** And field operator, all input fields used in validation/formatting. */ export declare class AndField extends OperatorField { validate(value: string, context?: C): T; format(value: T, context?: C): string | object; } /** Or field operator, at least one input field used in validation/formatting. */ export declare class OrField extends OperatorField { validate(value: string, context?: C): T; format(value: T, context?: C): string | object; } /** Not field operator, all input fields expected to throw error/fail in validation/formatting. */ export declare class NotField extends OperatorField { validate(value: string, context?: C): null; format(value: T, context?: C): null; }