@tuzhanai/schema-manager
Version:
140 lines (139 loc) • 4.03 kB
TypeScript
/**
* @gz/schema-manager
*
* @author Zongmin Lei <leizongmin@gmail.com>
* @author Yourtion Guo <yourtion@gmail.com>
*/
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<string, SchemaType>;
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<string, SchemaType>) => 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<string, any>} ISchemaTypeFieldInfo
* @memberof SchemaType
*/
swaggerValue(): {
required: Array<string>;
properties: Record<string, any>;
};
}
/**
* 解析类型名称 判断在书写类型的时候 是否是 "type[]" 这种格式,是否是数组类型
* @param type 类型
*/
export declare function parseTypeName(type: string): {
name: string;
isArray: boolean;
};
export default SchemaManager;