import { ArrayType, BooleanType, DateTimeType, DateType, EmailType, IdType, NumberType, PhoneNumberType, StringType, UriType } from '.'; export interface ArrayDef { type: ArrayType; items?: TypeDef | TypeDef[]; maxItems?: number; minItems?: number; uniqueItems?: boolean; validator?: (value: unknown[], type: BooleanDef, name: string, model: Model) => string[]; } export interface BooleanDef { type: BooleanType; validator?: (value: boolean, type: BooleanDef, name: string, model: Model) => string[]; } export interface EnumDef { type: StringType; /** * This provides an enumeration of all possible values that are valid * for the instance property. This MUST be an array, and each item in * the array represents a possible value for the instance value. If * this attribute is defined, the instance value MUST be one of the * values in the array in order for the schema to be valid. * * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.19 */ enum?: string[]; validator?: (value: string[], type: EnumDef, name: string, model: Model) => string[]; } export interface NumberDef { type: NumberType; /** * The value must be a multiple of the number * (e.g. 10 is a multiple of 5) * 1 from integer */ multipleOf?: number; maximum?: number; /** * If true maximum must be > value, >= otherwise */ exclusiveMaximum?: boolean; minimum?: number; /** * If true minimum must be < value, <= otherwise */ exclusiveMinimum?: boolean; validator?: (value: number, type: NumberDef, name: string, model: Model) => string[]; } export interface ObjectDef { definitions?: ModelDef; extends?: string | string[]; requires?: Set; validator?: (value: object, type: ObjectDef, name: string, model: Model) => string[] | undefined; } export interface StringDef { type: StringType; maxLength?: number; minLength?: number; /** * This is a regex string that the value must * conform to */ pattern?: string; format?: DateType | DateTimeType | EmailType | IdType | PhoneNumberType | UriType | string; validator?: (value: string, type: StringDef, name: string, model: Model) => string[] | undefined; } export declare type ValueDef = BooleanDef | EnumDef | NumberDef | StringDef; export declare type TypeDef = ArrayDef | ObjectDef | ValueDef; export declare type Field = TypeDef & { name: string; }; export interface TypeSet { [name: string]: TypeDef; } export interface ModelDef { [name: string]: string | TypeDef; } export interface Model { [name: string]: unknown; }