/**
 * @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;
