UNPKG

vtils

Version:

一个面向业务的 JavaScript/TypeScript 实用程序库。

676 lines (602 loc) 24.1 kB
/** * vae 数据验证。 * * @packageDocumentation */ declare function array<T extends Nullable<unknown[]> = unknown[]>(element: VaeArraySchemaElementOf<T>, message?: VaeLocaleMessage): VaeArraySchema<T>; declare function array<T extends Nullable<unknown[]> = unknown[]>(schema: (schema: VaeArraySchema<T>) => VaeArraySchema<T>, message?: VaeLocaleMessage): VaeArraySchema<T>; declare function array<T extends Nullable<unknown[]> = unknown[]>(message?: VaeLocaleMessage): VaeArraySchema<T>; declare function boolean<T extends Nullable<boolean> = boolean>(schema: (schema: VaeBooleanSchema<T>) => VaeBooleanSchema<T>, message?: VaeLocaleMessage): VaeBooleanSchema<T>; declare function boolean<T extends Nullable<boolean> = boolean>(message?: VaeLocaleMessage): VaeBooleanSchema<T>; declare type Builtin = Primitive_2 | Function | Date | Error | RegExp; declare function date<T extends Nullable<Date> = Date>(schema: (schema: VaeDateSchema<T>) => VaeDateSchema<T>, message?: VaeLocaleMessage): VaeDateSchema<T>; declare function date<T extends Nullable<Date> = Date>(message?: VaeLocaleMessage): VaeDateSchema<T>; declare type DotPath<T> = object extends T ? string : T extends any[] ? '0' | SubKeys<T, 0> : T extends readonly any[] ? Extract<keyof T, `${number}`> | SubKeys<T, Extract<keyof T, `${number}`>> : T extends object ? Extract<keyof T, string> | SubKeys<T, Extract<keyof T, string>> : never; declare type DotPathValue<T, Path extends string> = Path extends '0' ? T[0] : Path extends keyof T ? T[Path] : Path extends `${infer K}.${infer R}` ? K extends '0' ? DotPathValue<T[0], R> : K extends keyof T ? DotPathValue<T[K], R> : unknown : unknown; declare type DotPathWithRoot<T> = DotPath<T> | '.'; declare type DotPathWithRootValue<T, Path extends string> = Path extends '.' ? T : DotPathValue<T, Path>; /** * 判断 `T` 是否是 `any` 类型。 * * @public * @see https://stackoverflow.com/a/49928360 * @example * ```typescript * type X = IsAny<any> * // => true * ``` */ declare type IsAny<T> = 0 extends 1 & T ? true : false; declare type Nullable<T> = T | null | undefined; declare function number<T extends Nullable<number> = number>(schema: (schema: VaeNumberSchema<T>) => VaeNumberSchema<T>, message?: VaeLocaleMessage): VaeNumberSchema<T>; declare function number<T extends Nullable<number> = number>(message?: VaeLocaleMessage): VaeNumberSchema<T>; declare function object<T0 extends Record<any, Nullable<any>> = Record<any, any>, T extends NonNullable<T0> = NonNullable<T0>>(shape: VaeObjectSchemaShapeOf<T>, message?: VaeLocaleMessage): VaeObjectSchema<IsAny<keyof T0> extends true ? T : T0>; declare function object<T extends Nullable<Record<any, any>> = Record<any, any>>(schema: (schema: VaeObjectSchema<T>) => VaeObjectSchema<T>, message?: VaeLocaleMessage): VaeObjectSchema<T>; declare function object<T extends Nullable<Record<any, any>> = Record<any, any>>(message?: VaeLocaleMessage): VaeObjectSchema<T>; /** Mark some properties as optional, leaving others unchanged */ declare type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>; /** Essentials */ declare type Primitive_2 = string | number | boolean | bigint | symbol | undefined | null; /** Mark some properties as required, leaving others unchanged */ declare type RequiredBy<T, RK extends keyof T> = Exclude<T, RK> & Required<Pick<T, RK>>; /** Like Required but recursive */ declare type RequiredDeep<T> = T extends Builtin ? NonNullable<T> : T extends Map<infer K, infer V> ? Map<RequiredDeep<K>, RequiredDeep<V>> : T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<RequiredDeep<K>, RequiredDeep<V>> : T extends WeakMap<infer K, infer V> ? WeakMap<RequiredDeep<K>, RequiredDeep<V>> : T extends Set<infer U> ? Set<RequiredDeep<U>> : T extends ReadonlySet<infer U> ? ReadonlySet<RequiredDeep<U>> : T extends WeakSet<infer U> ? WeakSet<RequiredDeep<U>> : T extends Promise<infer U> ? Promise<RequiredDeep<U>> : T extends {} ? { [K in keyof T]-?: RequiredDeep<T[K]>; } : NonNullable<T>; declare const schemaBuilders: { string: typeof string; number: typeof number; date: typeof date; boolean: typeof boolean; object: typeof object; array: typeof array; }; declare function string<T extends Nullable<string> = string>(schema: (schema: VaeStringSchema<T>) => VaeStringSchema<T>, message?: VaeLocaleMessage): VaeStringSchema<T>; declare function string<T extends Nullable<string> = string>(message?: VaeLocaleMessage): VaeStringSchema<T>; declare type SubKeys<T, K extends string | number> = K extends keyof T ? `${K}.${DotPath<T[K]>}` : never; export declare const v: { create: <R, F extends (_: typeof schemaBuilders) => 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<O extends Record<any, any>> { <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & unknown[]>(key: K, element: VaeArraySchemaElementOf<T>, message?: VaeLocaleMessage): VaeArraySchema<T>; <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & unknown[]>(key: K, schema: (schema: VaeArraySchema<T>) => VaeArraySchema<T>, message?: VaeLocaleMessage): VaeArraySchema<T>; <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & unknown[]>(key: K, message?: VaeLocaleMessage): VaeArraySchema<T>; } export declare class VaeArraySchema<T0 extends Nullable<any[]> = any[], T extends NonNullable<T0> = NonNullable<T0>> extends VaeSchema<T0> { constructor(element?: VaeArraySchemaElementOf<T>, message?: VaeLocaleMessage); /** * 数组元素定义 */ element(element: VaeArraySchemaElementOf<T>): this; /** * 数组非空,即长度应大于 0 */ nonempty(message?: VaeLocaleMessage): this; /** * 数组最小长度 */ min(value: number, message?: VaeLocaleMessage): this; /** * 数组最大长度 */ max(value: number, message?: VaeLocaleMessage): this; /** * 数组固定长度 */ length(value: number, message?: VaeLocaleMessage): this; } export declare interface VaeArraySchemaBuilder { <T extends Nullable<unknown[]> = unknown[]>(element: VaeArraySchemaElementOf<T>, message?: VaeLocaleMessage): VaeArraySchema<T>; <T extends Nullable<unknown[]> = unknown[]>(schema: (schema: VaeArraySchema<T>) => VaeArraySchema<T>, message?: VaeLocaleMessage): VaeArraySchema<T>; <T extends Nullable<unknown[]> = unknown[]>(message?: VaeLocaleMessage): VaeArraySchema<T>; } export declare type VaeArraySchemaElementOf<T> = T extends Array<infer X> ? VaeSchemaOf<X> : never; export declare interface VaeBooleanOfSchemaBuilder<O extends Record<any, any>> { <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & boolean>(key: K, schema: (schema: VaeBooleanSchema<T>) => VaeBooleanSchema<T>, message?: VaeLocaleMessage): VaeBooleanSchema<T>; <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & boolean>(key: K, message?: VaeLocaleMessage): VaeBooleanSchema<T>; } export declare class VaeBooleanSchema<T0 extends Nullable<boolean> = boolean> extends VaeSchema<T0> { constructor(message?: VaeLocaleMessage); /** * 应为 true */ true(message?: VaeLocaleMessage): this; /** * 应为 false */ false(message?: VaeLocaleMessage): this; } export declare interface VaeBooleanSchemaBuilder { <T extends Nullable<boolean> = boolean>(schema: (schema: VaeBooleanSchema<T>) => VaeBooleanSchema<T>, message?: VaeLocaleMessage): VaeBooleanSchema<T>; <T extends Nullable<boolean> = boolean>(message?: VaeLocaleMessage): VaeBooleanSchema<T>; } export declare interface VaeDateOfSchemaBuilder<O extends Record<any, any>> { <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & Date>(key: K, schema: (schema: VaeDateSchema<T>) => VaeDateSchema<T>, message?: VaeLocaleMessage): VaeDateSchema<T>; <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & Date>(key: K, message?: VaeLocaleMessage): VaeDateSchema<T>; } export declare class VaeDateSchema<T0 extends Nullable<Date> = Date> extends VaeSchema<T0> { constructor(message?: VaeLocaleMessage); /** * 最小日期 */ min(value: Date | string | number, message?: VaeLocaleMessage): this; /** * 最大日期 */ max(value: Date | string | number, message?: VaeLocaleMessage): this; } export declare interface VaeDateSchemaBuilder { <T extends Nullable<Date> = Date>(schema: (schema: VaeDateSchema<T>) => VaeDateSchema<T>, message?: VaeLocaleMessage): VaeDateSchema<T>; <T extends Nullable<Date> = Date>(message?: VaeLocaleMessage): VaeDateSchema<T>; } export declare class VaeError extends Error { issues: VaeIssue[]; name: string; constructor(issues: VaeIssue[]); /** * 从问题里导出信息 */ static messageFromIssues(issues: VaeIssue[]): string; } export declare interface VaeErrorIssue { path: Array<string | number>; 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; /** * 路径 */ path: VaeSchemaPath; /** * 值 */ value: any; /** * 参数 */ params: Record<string, any>; }; 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<O extends Record<any, any>> { <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & number>(key: K, schema: (schema: VaeNumberSchema<T>) => VaeNumberSchema<T>, message?: VaeLocaleMessage): VaeNumberSchema<T>; <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & number>(key: K, message?: VaeLocaleMessage): VaeNumberSchema<T>; } export declare class VaeNumberSchema<T0 extends Nullable<number> = number> extends VaeSchema<T0> { 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 { <T extends Nullable<number> = number>(schema: (schema: VaeNumberSchema<T>) => VaeNumberSchema<T>, message?: VaeLocaleMessage): VaeNumberSchema<T>; <T extends Nullable<number> = number>(message?: VaeLocaleMessage): VaeNumberSchema<T>; } export declare interface VaeObjectOfSchemaBuilder<O extends Record<any, any>> { <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & {}>(key: K, shape: VaeObjectSchemaShapeOf<T>, message?: VaeLocaleMessage): VaeObjectSchema<T>; <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & {}>(key: K, schema: (schema: VaeObjectSchema<T>) => VaeObjectSchema<T>, message?: VaeLocaleMessage): VaeObjectSchema<T>; <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & {}>(key: K, message?: VaeLocaleMessage): VaeObjectSchema<T>; } export declare class VaeObjectSchema<T0 extends Nullable<Record<any, any>> = Record<any, any>, T extends NonNullable<T0> = NonNullable<T0>> extends VaeSchema<T0> { constructor(shape?: VaeObjectSchemaShapeOf<T>, message?: VaeLocaleMessage); /** * 对象定义 */ shape(shape: VaeObjectSchemaShapeOf<T>): this; /** * 原地挑选给定字段 */ pickFields<K extends keyof T>(keys: K[]): VaeObjectSchema<Pick<T, K>>; /** * 原地剔除给定字段 */ omitFields<K extends keyof T>(keys: K[]): VaeObjectSchema<Omit<T, K>>; /** * 原地将给定字段设为可选 */ optionalFields<K extends keyof T>(keys: K[]): VaeObjectSchema<PartialBy<T, K>>; /** * 原地将所有字段设为可选 */ optionalFields(): VaeObjectSchema<Partial<T>>; /** * 原地将给定字段设为必填 */ requiredFields<K extends keyof T>(keys: K[]): VaeObjectSchema<RequiredBy<T, K>>; /** * 原地将所有字段设为必填 */ requiredFields(): VaeObjectSchema<Required<T>>; /** * 返回给定字段的定义 */ shapeOfFields<K extends keyof T>(keys: K[]): VaeObjectSchemaShapeOf<Pick<T, K>>; /** * 返回全部字段的定义 */ shapeOfFields(): VaeObjectSchemaShapeOf<T>; /** * 给定字段中至少有一个必填 */ requiredFieldsAtLeastOne<K extends keyof T>(keys: K[], message?: VaeLocaleMessage): this; } export declare interface VaeObjectSchemaBuilder { <T0 extends Record<any, Nullable<any>> = Record<any, any>, T extends NonNullable<T0> = NonNullable<T0>>(shape: VaeObjectSchemaShapeOf<T>, message?: VaeLocaleMessage): VaeObjectSchema<IsAny<keyof T0> extends true ? T : T0>; <T extends Nullable<Record<any, any>> = Record<any, any>>(schema: (schema: VaeObjectSchema<T>) => VaeObjectSchema<T>, message?: VaeLocaleMessage): VaeObjectSchema<T>; <T extends Nullable<Record<any, any>> = Record<any, any>>(message?: VaeLocaleMessage): VaeObjectSchema<T>; } export declare type VaeObjectSchemaShapeOf<T> = { [K in keyof T]: VaeSchemaOf<T[K]>; }; export declare abstract class VaeSchema<T0 extends any = any, T extends NonNullable<T0> = NonNullable<T0>> { protected _options: RequiredBy<VaeSchemaOptions<T, any>, 'processors'>; constructor(options: VaeSchemaOptions<T, any>); /** * 选项 */ get options(): RequiredBy<VaeSchemaOptions<T, any>, "processors">; /** * 设置元信息 */ meta(metadata: VaeSchemaMetadata): this; /** * 新增检测 */ check(payload: VaeSchemaCheckPayload<T>): this; /** * 新增转换 */ transform(payload: VaeSchemaTransformPayload<T>): this; /** * 设置标签 */ label(label: string): this; /** * 设置默认值 */ default(value: T | (() => T)): this; /** * 设为必填 */ required(message?: VaeLocaleMessage): this; /** * 设为可选 */ optional(): this; /** * 设置枚举 */ enum(value: T[] | Record<any, T>, message?: VaeLocaleMessage): this; /** * 自定义检测 */ custom(fn: (value: T) => boolean | void, messageOrOptions?: VaeLocaleMessage | { message?: VaeLocaleMessage; path?: DotPath<T>; tag?: string; }): this; /** * 在运行时动态修改模式 */ runtime(fn: VaeSchemaRuntimeFn<T, this>): this; /** * 克隆 */ clone(): this; /** * 获取给定多个路径的模式 */ reach<P extends DotPath<T>>(paths: P[], ctx?: VaeSchemaReachContext, curPath?: VaeSchemaPath): { [K in P]: VaeSchemaOf<DotPathValue<T, K>>; }; /** * 获取给定路径的模式 */ reach<P extends DotPath<T>>(path: P, ctx?: VaeSchemaReachContext, curPath?: VaeSchemaPath): VaeSchemaOf<DotPathValue<T, P>>; /** * 解析数据并返回解析结果 */ parse(data: T0, options?: VaeSchemaParseOptions): VaeSchemaParseResult<T0>; /** * 解析数据,当解析失败时抛出错误,当解析成功时返回结果 */ parseOrThrow(data: T0, options?: VaeSchemaParseOptions): T0; /** * 根据当前模式强制转换给定数据 */ cast(data: any, options?: VaeSchemaCastOptions): any; } export declare class VaeSchemaBuilder<X extends Nullable<Record<any, any>> = Nullable<Record<any, any>>, O extends RequiredDeep<X> = RequiredDeep<X>> { string: VaeStringSchemaBuilder; stringOf: VaeStringOfSchemaBuilder<O>; number: VaeNumberSchemaBuilder; numberOf: VaeNumberOfSchemaBuilder<O>; date: VaeDateSchemaBuilder; dateOf: VaeDateOfSchemaBuilder<O>; boolean: VaeBooleanSchemaBuilder; booleanOf: VaeBooleanOfSchemaBuilder<O>; object: VaeObjectSchemaBuilder; objectOf: VaeObjectOfSchemaBuilder<O>; array: VaeArraySchemaBuilder; arrayOf: VaeArrayOfSchemaBuilder<O>; } export declare type VaeSchemaCastOptions = { /** * 是否保留未知属性 * * @default false */ preserveUnknownKeys?: boolean; }; export declare type VaeSchemaCheckPayload<T> = { fn: ((value: T) => boolean | void) | VaeSchema; message: VaeLocaleMessage; messageParams?: Record<string, any>; path?: VaeSchemaPath; tag?: string; }; export declare interface VaeSchemaCustomMetadata { } export declare type VaeSchemaMetadata = keyof VaeSchemaCustomMetadata extends never ? Record<any, any> : VaeSchemaCustomMetadata; export declare type VaeSchemaOf<T0, T extends NonNullable<T0> = NonNullable<T0>> = [ T ] extends [string] ? VaeStringSchema<T0> : [T] extends [number] ? VaeNumberSchema<T0> : [T] extends [boolean] ? VaeBooleanSchema<T0> : [T] extends [Date] ? VaeDateSchema<T0> : T extends any[] ? VaeArraySchema<T0> : VaeObjectSchema<T0>; export declare type VaeSchemaOptions<T, S> = { type: VaeSchemaType; label?: string; default?: T | (() => T); required?: boolean; requiredMessage?: VaeLocaleMessage; objectKeys?: string[]; stringTrim?: boolean; stringEmptyable?: boolean; processors?: Array<VaeSchemaCheckPayload<T> | VaeSchemaTransformPayload<T>>; runtime?: VaeSchemaRuntimeFn<T, S>; 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<T> = { success: true; data: T; } | { success: false; issues: VaeIssue[]; message: string; }; export declare type VaeSchemaPath = Array<string | number>; export declare class VaeSchemaReachContext { /** * 模式列表 */ schemas: Array<{ path: string; schema: VaeSchema; }>; /** * 新增模式 */ addSchema(path: string, schema: VaeSchema): void; } export declare type VaeSchemaRuntimeFn<T, S> = (payload: { value: T; schema: S; }) => any; export declare type VaeSchemaTransformPayload<T> = (value: T) => T; export declare type VaeSchemaType = 'string' | 'number' | 'object' | 'date' | 'boolean' | 'array'; export declare interface VaeStringOfSchemaBuilder<O extends Record<any, any>> { <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & string>(key: K, schema: (schema: VaeStringSchema<T>) => VaeStringSchema<T>, message?: VaeLocaleMessage): VaeStringSchema<T>; <K extends DotPathWithRoot<O>, T extends DotPathWithRootValue<O, K> & string>(key: K, message?: VaeLocaleMessage): VaeStringSchema<T>; } export declare class VaeStringSchema<T0 extends Nullable<string> = string> extends VaeSchema<T0> { 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 { <T extends Nullable<string> = string>(schema: (schema: VaeStringSchema<T>) => VaeStringSchema<T>, message?: VaeLocaleMessage): VaeStringSchema<T>; <T extends Nullable<string> = string>(message?: VaeLocaleMessage): VaeStringSchema<T>; } export { }