/** * @gz/schema-manager * * @author Zongmin Lei * @author Yourtion Guo */ import { ValueTypeManager } from "@tuzhanai/value-type-manager"; export * from "@tuzhanai/value-type-manager"; export interface ISchemaTypeFields { [name: string]: ISchemaTypeFieldInfo; } export interface ISchemaTypeFieldInfo { /** 数据类型 */ type: string | SchemaType; /** 备注 */ comment?: string; /** 是否格式化 */ format?: boolean; /** 默认值 */ default?: any; /** 是否必须 */ required?: boolean; /** 类型参数 */ params?: any; } export interface ISchemaCheckResult { /** 是否成功 */ ok: boolean; /** 如果失败,此项为出错信息 */ message: string; /** 缺少的参数列表 */ missingParamaters?: string[]; /** 错误的参数列表 */ invalidParamaters?: string[]; /** 错误的参数类型列表 */ invalidParamaterTypes?: string[]; /** 结果 */ value: any; } export interface SchemaManagerOptions { type?: ValueTypeManager; /** 如果为true则解析时遇到第一个错误即停止接续解析 */ abortEarly?: boolean; } export declare class SchemaManager { protected readonly options: SchemaManagerOptions; protected readonly map: Map; readonly type: ValueTypeManager; constructor(options?: SchemaManagerOptions); /** * 获取 abortEarly 选项 */ get isAbortEarly(): boolean; /** * 注册Schema * @param name 名称 * @param fields 字段具体信息 */ register(name: string, fields: ISchemaTypeFields): this; /** * 是否已注册指定Schema * @param type 名称 */ has(type: string): boolean; /** * 获取指定Schema * @param type 名称 */ get(type: string): SchemaType; /** * 遍历类型 * @param iter 迭代函数 */ forEach(iter: (value: SchemaType, key: string, map: Map) => void): void; /** * 创建Schema但不自动注册 * @param fields 字段信息 * @param name Schema名称 */ create(fields: ISchemaTypeFields, name?: string): SchemaType; /** * 检查指定Schema并返回值 * @param type 名称 * @param input 输入值 */ value(type: string, input: any): ISchemaCheckResult; /** * 检查指定基本类型并返回值 * @param type 名称 * @param isArray 是否为数组 * @param input 输入值 * @param params 类型参数 * @param format 是否格式化 */ baseTypeValue(type: string, isArray: boolean, input: any, params: any, format?: boolean): ISchemaCheckResult; } export declare class SchemaType { protected manager: SchemaManager; protected readonly fields: ISchemaTypeFields; readonly name: string; constructor(manager: SchemaManager, fields: ISchemaTypeFields, name?: string); /** * 从当前Schema获取仅包含指定字段的新Schema * @param fieldNames */ pick(...fieldNames: string[]): SchemaType; /** * 从当前Schema获取所有字段为可选的新Schema */ partial(): SchemaType; /** * 从当前Schema获取所有字段为必填的新Schema */ required(): SchemaType; /** * 检查Schema并返回值 * @param input */ value(input: any, isArray?: boolean): ISchemaCheckResult; /** * 获取 schema swagger 的展开信息 * @param {boolean} [isArray=false] * @returns {Record} ISchemaTypeFieldInfo * @memberof SchemaType */ swaggerValue(): { required: Array; properties: Record; }; } /** * 解析类型名称 判断在书写类型的时候 是否是 "type[]" 这种格式,是否是数组类型 * @param type 类型 */ export declare function parseTypeName(type: string): { name: string; isArray: boolean; }; export default SchemaManager;