UNPKG

container.ts

Version:
69 lines (68 loc) 3.31 kB
import { ErrorChain } from "../error"; import { Field } from "./Field"; /** Schema error class. */ export declare class SchemaError extends ErrorChain { constructor(keys: string, cause?: any); } export declare type ISchemaTypes = ISchemaArray | ISchemaMap; export declare type ISchemaFields = ISchemaTypes | Schema | Field<any>; /** Schema array type, recursive type. */ export interface ISchemaArray { [key: number]: ISchemaFields; } /** Schema map type, recursive type. */ export interface ISchemaMap { [key: string]: ISchemaFields; } /** Schema mask type, recursive type. */ export interface ISchemaMask { [key: string]: ISchemaMask | boolean; } /** Schema map callback handlers. */ export interface ISchemaMapHandlers { isSchemaArray?: (i: any, o: any, array: ISchemaArray, k: number | string, m?: ISchemaMask, kr?: string) => void; isSchemaMap?: (i: any, o: any, map: ISchemaMap, k: number | string, m?: ISchemaMask, kr?: string) => void; isSchema?: (i: any, o: any, schema: ISchemaConstructor, k: number | string, m?: ISchemaMask, kr?: string) => void; isField?: (i: any, o: any, field: Field<any>, k: number | string) => void; } /** Schema static interface. */ export interface ISchemaConstructor { SCHEMA: ISchemaTypes; new (): Schema; isSchema(value: any): boolean; map(inp: any, out: any, schema: ISchemaTypes, mask?: ISchemaMask, dataKeys?: Array<number | string>, keyRoot?: string, handlers?: ISchemaMapHandlers): void; validate<T>(data: any, mask?: ISchemaMask, keyRoot?: string): T; format<T>(data: T, mask?: ISchemaMask, keyRoot?: string): any; } /** Build schema class from input map. */ export declare function buildSchema(schema?: ISchemaTypes): ISchemaConstructor; export declare abstract class Schema { /** Schema array or map, override in child classes. */ static readonly SCHEMA: ISchemaTypes; /** * Returns true if value is a Schema class object. * Used to test for child schemas during validation/formatting. */ static isSchema(value: any): boolean; /** * Helper for iterating over schema fields. */ static map(inp: any, out: any, schema: ISchemaTypes, mask?: ISchemaMask | null, dataKeys?: Array<number | string>, keyRoot?: string, handlers?: ISchemaMapHandlers): void; /** * Validate input data, transform strings to typed values. * All static validation rules are applied, undefined data validation * callbacks must provide a default value, null or throw an error. * @param data Input data. */ static validate<T>(data: any, mask?: ISchemaMask, keyRoot?: string, schema?: ISchemaTypes): T; /** * Format input data, transform typed values to object of strings for serialisation. * Classes static format rules are applied where data is available. * @param data Input data. */ static format<T>(data: T, mask?: ISchemaMask, keyRoot?: string, schema?: ISchemaTypes): any; protected static readonly validateMapHandlers: ISchemaMapHandlers; protected static readonly formatMapHandlers: ISchemaMapHandlers; /** Internal schema map handler. */ protected static mapHandler(inp: any, out: any, mask: ISchemaMask | null, keyRoot: string, handlers: ISchemaMapHandlers, value: any, key: number | string): void; }