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