/** * vae 数据验证。 * * @packageDocumentation */ declare function array = unknown[]>(element: VaeArraySchemaElementOf, message?: VaeLocaleMessage): VaeArraySchema; declare function array = unknown[]>(schema: (schema: VaeArraySchema) => VaeArraySchema, message?: VaeLocaleMessage): VaeArraySchema; declare function array = unknown[]>(message?: VaeLocaleMessage): VaeArraySchema; declare function boolean = boolean>(schema: (schema: VaeBooleanSchema) => VaeBooleanSchema, message?: VaeLocaleMessage): VaeBooleanSchema; declare function boolean = boolean>(message?: VaeLocaleMessage): VaeBooleanSchema; declare type Builtin = Primitive_2 | Function | Date | Error | RegExp; declare function date = Date>(schema: (schema: VaeDateSchema) => VaeDateSchema, message?: VaeLocaleMessage): VaeDateSchema; declare function date = Date>(message?: VaeLocaleMessage): VaeDateSchema; declare type DotPath = object extends T ? string : T extends any[] ? '0' | SubKeys : T extends readonly any[] ? Extract | SubKeys> : T extends object ? Extract | SubKeys> : never; declare type DotPathValue = Path extends '0' ? T[0] : Path extends keyof T ? T[Path] : Path extends `${infer K}.${infer R}` ? K extends '0' ? DotPathValue : K extends keyof T ? DotPathValue : unknown : unknown; declare type DotPathWithRoot = DotPath | '.'; declare type DotPathWithRootValue = Path extends '.' ? T : DotPathValue; /** * 判断 `T` 是否是 `any` 类型。 * * @public * @see https://stackoverflow.com/a/49928360 * @example * ```typescript * type X = IsAny * // => true * ``` */ declare type IsAny = 0 extends 1 & T ? true : false; declare type Nullable = T | null | undefined; declare function number = number>(schema: (schema: VaeNumberSchema) => VaeNumberSchema, message?: VaeLocaleMessage): VaeNumberSchema; declare function number = number>(message?: VaeLocaleMessage): VaeNumberSchema; declare function object> = Record, T extends NonNullable = NonNullable>(shape: VaeObjectSchemaShapeOf, message?: VaeLocaleMessage): VaeObjectSchema extends true ? T : T0>; declare function object> = Record>(schema: (schema: VaeObjectSchema) => VaeObjectSchema, message?: VaeLocaleMessage): VaeObjectSchema; declare function object> = Record>(message?: VaeLocaleMessage): VaeObjectSchema; /** Essentials */ declare type Primitive_2 = string | number | boolean | bigint | symbol | undefined | null; /** Mark some properties as required, leaving others unchanged */ declare type RequiredBy = Exclude & Required>; /** Like Required but recursive */ declare type RequiredDeep = T extends Builtin ? NonNullable : T extends Map ? Map, RequiredDeep> : T extends ReadonlyMap ? ReadonlyMap, RequiredDeep> : T extends WeakMap ? WeakMap, RequiredDeep> : T extends Set ? Set> : T extends ReadonlySet ? ReadonlySet> : T extends WeakSet ? WeakSet> : T extends Promise ? Promise> : T extends {} ? { [K in keyof T]-?: RequiredDeep; } : NonNullable; declare const schemaBuilders: { string: typeof string; number: typeof number; date: typeof date; boolean: typeof boolean; object: typeof object; array: typeof array; }; declare function string = string>(schema: (schema: VaeStringSchema) => VaeStringSchema, message?: VaeLocaleMessage): VaeStringSchema; declare function string = string>(message?: VaeLocaleMessage): VaeStringSchema; declare type SubKeys = K extends keyof T ? `${K}.${DotPath}` : never; export declare const v: { create: R = (_: typeof schemaBuilders) => R>(cb: F) => R; localeBuilder: typeof VaeLocaleBuilder; setLocale: (locale: VaeLocaleShape) => void; string: typeof string; number: typeof number; date: typeof date; boolean: typeof boolean; object: typeof object; array: typeof array; }; export declare interface VaeArrayOfSchemaBuilder> { , T extends DotPathWithRootValue & unknown[]>(key: K, element: VaeArraySchemaElementOf, message?: VaeLocaleMessage): VaeArraySchema; , T extends DotPathWithRootValue & unknown[]>(key: K, schema: (schema: VaeArraySchema) => VaeArraySchema, message?: VaeLocaleMessage): VaeArraySchema; , T extends DotPathWithRootValue & unknown[]>(key: K, message?: VaeLocaleMessage): VaeArraySchema; } export declare class VaeArraySchema = any[], T extends NonNullable = NonNullable> extends VaeSchema { constructor(element?: VaeArraySchemaElementOf, message?: VaeLocaleMessage); /** * 数组元素定义 */ element(element: VaeArraySchemaElementOf): this; /** * 数组非空,即长度应大于 0 */ nonempty(message?: VaeLocaleMessage): this; /** * 数组最小长度 */ min(value: number, message?: VaeLocaleMessage): this; /** * 数组最大长度 */ max(value: number, message?: VaeLocaleMessage): this; /** * 数组固定长度 */ length(value: number, message?: VaeLocaleMessage): this; /** * 当设置了必填时,将空数组视为已填 */ emptyable(): this; } export declare interface VaeArraySchemaBuilder { = unknown[]>(element: VaeArraySchemaElementOf, message?: VaeLocaleMessage): VaeArraySchema; = unknown[]>(schema: (schema: VaeArraySchema) => VaeArraySchema, message?: VaeLocaleMessage): VaeArraySchema; = unknown[]>(message?: VaeLocaleMessage): VaeArraySchema; } export declare type VaeArraySchemaElementOf = T extends Array ? VaeSchemaOf : never; export declare interface VaeBooleanOfSchemaBuilder> { , T extends DotPathWithRootValue & boolean>(key: K, schema: (schema: VaeBooleanSchema) => VaeBooleanSchema, message?: VaeLocaleMessage): VaeBooleanSchema; , T extends DotPathWithRootValue & boolean>(key: K, message?: VaeLocaleMessage): VaeBooleanSchema; } export declare class VaeBooleanSchema = boolean> extends VaeSchema { constructor(message?: VaeLocaleMessage); /** * 应为 true */ true(message?: VaeLocaleMessage): this; /** * 应为 false */ false(message?: VaeLocaleMessage): this; } export declare interface VaeBooleanSchemaBuilder { = boolean>(schema: (schema: VaeBooleanSchema) => VaeBooleanSchema, message?: VaeLocaleMessage): VaeBooleanSchema; = boolean>(message?: VaeLocaleMessage): VaeBooleanSchema; } export declare interface VaeDateOfSchemaBuilder> { , T extends DotPathWithRootValue & Date>(key: K, schema: (schema: VaeDateSchema) => VaeDateSchema, message?: VaeLocaleMessage): VaeDateSchema; , T extends DotPathWithRootValue & Date>(key: K, message?: VaeLocaleMessage): VaeDateSchema; } export declare class VaeDateSchema = Date> extends VaeSchema { constructor(message?: VaeLocaleMessage); /** * 最小日期 */ min(value: Date | string | number, message?: VaeLocaleMessage): this; /** * 最大日期 */ max(value: Date | string | number, message?: VaeLocaleMessage): this; } export declare interface VaeDateSchemaBuilder { = Date>(schema: (schema: VaeDateSchema) => VaeDateSchema, message?: VaeLocaleMessage): VaeDateSchema; = Date>(message?: VaeLocaleMessage): VaeDateSchema; } export declare class VaeError extends Error { issues: VaeIssue[]; name: string; constructor(issues: VaeIssue[]); /** * 从问题里导出信息 */ static messageFromIssues(issues: VaeIssue[]): string; } export declare interface VaeErrorIssue { path: Array; message: string; } export declare type VaeIssue = { /** * issue 产生的路径 */ path: VaeSchemaPath; /** * issue 信息 */ message: string; }; export declare const VaeLocale: { $set: (locale: VaeLocaleShape) => void; base: Record<'required' | 'enum' | 'custom', VaeLocaleMessage>; string: Record<'type' | 'min' | 'max' | 'length' | 'email' | 'url' | 'regex' | 'includes' | 'startsWith' | 'endsWith' | 'phoneNumber' | 'idCardNumber' | 'cuid' | 'cuid2', VaeLocaleMessage>; object: Record<'type' | 'requiredFieldsAtLeastOne', VaeLocaleMessage>; number: Record<'type' | 'min' | 'max' | 'lessThan' | 'moreThan' | 'integer' | 'positive' | 'nonpositive' | 'negative' | 'nonnegative' | 'positiveInteger', VaeLocaleMessage>; boolean: Record<'type' | 'true' | 'false', VaeLocaleMessage>; array: Record<'type' | 'nonempty' | 'min' | 'max' | 'length', VaeLocaleMessage>; date: Record<'type' | 'min' | 'max', VaeLocaleMessage>; }; export declare class VaeLocaleBuilder { static zhCN(options: { getLabel: (payload: VaeLocaleMessagePayload) => string; }): VaeLocaleShape; } export declare type VaeLocaleMessage = string | ((payload: VaeLocaleMessagePayload) => string); export declare type VaeLocaleMessagePayload = { /** * 标签 */ label?: string | (() => string); /** * 路径 */ path: VaeSchemaPath; /** * 值 */ value: any; /** * 参数 */ params: Record; }; export declare type VaeLocaleShape = { base: Record<'required' | 'enum' | 'custom', VaeLocaleMessage>; string: Record<'type' | 'min' | 'max' | 'length' | 'email' | 'url' | 'regex' | 'includes' | 'startsWith' | 'endsWith' | 'phoneNumber' | 'idCardNumber' | 'cuid' | 'cuid2', VaeLocaleMessage>; object: Record<'type' | 'requiredFieldsAtLeastOne', VaeLocaleMessage>; number: Record<'type' | 'min' | 'max' | 'lessThan' | 'moreThan' | 'integer' | 'positive' | 'nonpositive' | 'negative' | 'nonnegative' | 'positiveInteger', VaeLocaleMessage>; boolean: Record<'type' | 'true' | 'false', VaeLocaleMessage>; array: Record<'type' | 'nonempty' | 'min' | 'max' | 'length', VaeLocaleMessage>; date: Record<'type' | 'min' | 'max', VaeLocaleMessage>; }; export declare interface VaeNumberOfSchemaBuilder> { , T extends DotPathWithRootValue & number>(key: K, schema: (schema: VaeNumberSchema) => VaeNumberSchema, message?: VaeLocaleMessage): VaeNumberSchema; , T extends DotPathWithRootValue & number>(key: K, message?: VaeLocaleMessage): VaeNumberSchema; } export declare class VaeNumberSchema = number> extends VaeSchema { constructor(message?: VaeLocaleMessage); /** * 最小值 */ min(value: number, message?: VaeLocaleMessage): this; /** * 最大值 */ max(value: number, message?: VaeLocaleMessage): this; /** * 小于 */ lessThan(value: number, message?: VaeLocaleMessage): this; /** * 大于 */ moreThan(value: number, message?: VaeLocaleMessage): this; /** * 整数,即 -100, -1, 0, 1, 2, 100, ... */ integer(message?: VaeLocaleMessage): this; /** * 正数,即 0.01, 0.1, 1, 2, 3, ... */ positive(message?: VaeLocaleMessage): this; /** * 非正数,即 0, -0.01, -1, -100, ... */ nonpositive(message?: VaeLocaleMessage): this; /** * 负数,即 -0.01, -1, -100, ... */ negative(message?: VaeLocaleMessage): this; /** * 非负数,即 0, 0.01, 0.1, 1, 2.1, 100, ... */ nonnegative(message?: VaeLocaleMessage): this; /** * 正整数,即 1, 2, 3, 4, 5, ... */ positiveInteger(message?: VaeLocaleMessage): this; /** * ID,即正整数,即 1, 2, 3, 4, 5, ... */ id(message?: VaeLocaleMessage): this; } export declare interface VaeNumberSchemaBuilder { = number>(schema: (schema: VaeNumberSchema) => VaeNumberSchema, message?: VaeLocaleMessage): VaeNumberSchema; = number>(message?: VaeLocaleMessage): VaeNumberSchema; } export declare interface VaeObjectOfSchemaBuilder> { , T extends DotPathWithRootValue & {}>(key: K, shape: VaeObjectSchemaShapeOf, message?: VaeLocaleMessage): VaeObjectSchema; , T extends DotPathWithRootValue & {}>(key: K, schema: (schema: VaeObjectSchema) => VaeObjectSchema, message?: VaeLocaleMessage): VaeObjectSchema; , T extends DotPathWithRootValue & {}>(key: K, message?: VaeLocaleMessage): VaeObjectSchema; } export declare class VaeObjectSchema> = Record, T extends NonNullable = NonNullable> extends VaeSchema { constructor(shape?: VaeObjectSchemaShapeOf, message?: VaeLocaleMessage); /** * 对象定义 */ shape(shape: VaeObjectSchemaShapeOf): this; /** * 原地挑选给定字段 */ pickFields(keys: K[]): VaeObjectSchema>; /** * 原地剔除给定字段 */ omitFields(keys: K[]): VaeObjectSchema>; /** * 原地将给定字段设为可选 */ optionalFields(keys: K[]): this; /** * 原地将所有字段设为可选 */ optionalFields(): this; /** * 原地将给定字段设为必填 */ requiredFields(keys: K[]): this; /** * 原地将所有字段设为必填 */ requiredFields(): this; /** * 返回给定字段的定义 */ shapeOfFields(keys: K[]): VaeObjectSchemaShapeOf>; /** * 返回全部字段的定义 */ shapeOfFields(): VaeObjectSchemaShapeOf; /** * 给定字段中至少有一个必填 */ requiredFieldsAtLeastOne(keys: K[], message?: VaeLocaleMessage): this; } export declare interface VaeObjectSchemaBuilder { > = Record, T extends NonNullable = NonNullable>(shape: VaeObjectSchemaShapeOf, message?: VaeLocaleMessage): VaeObjectSchema extends true ? T : T0>; > = Record>(schema: (schema: VaeObjectSchema) => VaeObjectSchema, message?: VaeLocaleMessage): VaeObjectSchema; > = Record>(message?: VaeLocaleMessage): VaeObjectSchema; } export declare type VaeObjectSchemaShapeOf = { [K in keyof T]-?: VaeSchemaOf; }; export declare abstract class VaeSchema = NonNullable> { protected _options: RequiredBy, 'processors'>; constructor(options: VaeSchemaOptions); /** * 选项 */ get options(): RequiredBy, "processors">; /** * 设置元信息 */ meta(metadata: VaeSchemaMetadata): this; /** * 新增检测 */ check(payload: VaeSchemaCheckPayload): this; /** * 新增转换 */ transform(payload: VaeSchemaTransformPayload): this; /** * 设置标签,可以同时设置元信息 */ label(label: string | (() => string), metadata?: VaeSchemaMetadata): this; /** * 设置默认值 */ default(value: T | (() => T)): this; /** * 设为必填 */ required(message?: VaeLocaleMessage): this; /** * 设为必填 */ required(isRequired: boolean, message?: VaeLocaleMessage): this; /** * 设为可选 */ optional(): this; /** * 设置枚举 */ enum(value: T[] | Record, message?: VaeLocaleMessage): this; /** * 自定义检测 */ custom(fn: (value: T) => boolean | void, messageOrOptions?: VaeLocaleMessage | { message?: VaeLocaleMessage; path?: DotPath; tag?: string; }): this; /** * 在运行时动态修改模式 */ runtime(fn: VaeSchemaRuntimeFn): this; /** * 克隆 */ clone(): this; /** * 获取给定多个路径的模式 */ reach

>(paths: P[], ctx?: VaeSchemaReachContext, curPath?: VaeSchemaPath): { [K in P]: VaeSchemaOf>; }; /** * 获取给定路径的模式 */ reach

>(path: P, ctx?: VaeSchemaReachContext, curPath?: VaeSchemaPath): VaeSchemaOf>; /** * 解析数据并返回解析结果 */ parse(data: T0, options?: VaeSchemaParseOptions): VaeSchemaParseResult; /** * 解析数据,当解析失败时抛出错误,当解析成功时返回结果 */ parseOrThrow(data: T0, options?: VaeSchemaParseOptions): T0; /** * 根据当前模式强制转换给定数据 */ cast(data: any, options?: VaeSchemaCastOptions): any; } export declare class VaeSchemaBuilder> = Nullable>, O extends RequiredDeep = RequiredDeep> { string: VaeStringSchemaBuilder; stringOf: VaeStringOfSchemaBuilder; number: VaeNumberSchemaBuilder; numberOf: VaeNumberOfSchemaBuilder; date: VaeDateSchemaBuilder; dateOf: VaeDateOfSchemaBuilder; boolean: VaeBooleanSchemaBuilder; booleanOf: VaeBooleanOfSchemaBuilder; object: VaeObjectSchemaBuilder; objectOf: VaeObjectOfSchemaBuilder; array: VaeArraySchemaBuilder; arrayOf: VaeArrayOfSchemaBuilder; } export declare type VaeSchemaCastOptions = { /** * 是否保留未知属性 * * @default false */ preserveUnknownKeys?: boolean; }; export declare type VaeSchemaCheckPayload = { fn: ((value: T) => boolean | void) | VaeSchema; message: VaeLocaleMessage; messageParams?: Record; path?: VaeSchemaPath; tag?: string; }; export declare interface VaeSchemaCustomMetadata { } export declare type VaeSchemaMetadata = keyof VaeSchemaCustomMetadata extends never ? Record : VaeSchemaCustomMetadata; export declare type VaeSchemaOf = NonNullable> = [ T ] extends [string] ? VaeStringSchema : [T] extends [number] ? VaeNumberSchema : [T] extends [boolean] ? VaeBooleanSchema : [T] extends [Date] ? VaeDateSchema : T extends any[] ? VaeArraySchema : VaeObjectSchema; export declare type VaeSchemaOptions = { type: VaeSchemaType; label?: string | (() => string); default?: T | (() => T); required?: boolean; requiredMessage?: VaeLocaleMessage; objectKeys?: string[]; stringTrim?: boolean; stringEmptyable?: boolean; arrayEmptyable?: boolean; processors?: Array | VaeSchemaTransformPayload>; runtime?: VaeSchemaRuntimeFn; metadata?: VaeSchemaMetadata; }; export declare class VaeSchemaParseContext { /** * 问题列表 */ issues: VaeIssue[]; /** * 新增问题 */ addIssue(issue: VaeIssue): void; } export declare type VaeSchemaParseOptions = { /** * 上下文,内部使用 * * @inner */ ctx?: VaeSchemaParseContext; /** * 当前路径,内部使用 * * @inner */ curPath?: VaeSchemaPath; /** * 是否提前终止 * * @default false */ abortEarly?: boolean; /** * 是否保留未知属性 * * @default false */ preserveUnknownKeys?: boolean; /** * 是否 cast 模式 * * @default false */ cast?: boolean; }; export declare type VaeSchemaParseResult = { success: true; data: T; } | { success: false; issues: VaeIssue[]; message: string; }; export declare type VaeSchemaPath = Array; export declare class VaeSchemaReachContext { /** * 模式列表 */ schemas: Array<{ path: string; schema: VaeSchema; }>; /** * 新增模式 */ addSchema(path: string, schema: VaeSchema): void; } export declare type VaeSchemaRuntimeFn = (payload: { value: T; schema: S; }) => any; export declare type VaeSchemaTransformPayload = (value: T) => T; export declare type VaeSchemaType = 'string' | 'number' | 'object' | 'date' | 'boolean' | 'array'; export declare interface VaeStringOfSchemaBuilder> { , T extends DotPathWithRootValue & string>(key: K, schema: (schema: VaeStringSchema) => VaeStringSchema, message?: VaeLocaleMessage): VaeStringSchema; , T extends DotPathWithRootValue & string>(key: K, message?: VaeLocaleMessage): VaeStringSchema; } export declare class VaeStringSchema = string> extends VaeSchema { constructor(message?: VaeLocaleMessage); /** * 最小长度 */ min(value: number, message?: VaeLocaleMessage): this; /** * 最大长度 */ max(value: number, message?: VaeLocaleMessage): this; /** * 固定长度 */ length(value: number, message?: VaeLocaleMessage): this; /** * 邮箱地址 */ email(message?: VaeLocaleMessage): this; /** * 链接 */ url(message?: VaeLocaleMessage): this; /** * 正则 */ regex(value: RegExp, message?: VaeLocaleMessage): this; /** * 包含 */ includes(value: string, message?: VaeLocaleMessage): this; /** * 前缀 */ startsWith(value: string, message?: VaeLocaleMessage): this; /** * 后缀 */ endsWith(value: string, message?: VaeLocaleMessage): this; /** * 手机号码 */ phoneNumber(message?: VaeLocaleMessage): this; /** * 身份证号码 */ idCardNumber(message?: VaeLocaleMessage): this; /** * cuid */ cuid(message?: VaeLocaleMessage): this; /** * cuid2 */ cuid2(message?: VaeLocaleMessage): this; /** * 去除两侧空字符串 */ trim(): this; /** * 当设置了必填时,将空字符串视为已填 */ emptyable(): this; } export declare interface VaeStringSchemaBuilder { = string>(schema: (schema: VaeStringSchema) => VaeStringSchema, message?: VaeLocaleMessage): VaeStringSchema; = string>(message?: VaeLocaleMessage): VaeStringSchema; } export { }