chore: starter
This commit is contained in:
58
packages/schema/src/validators.ts
Normal file
58
packages/schema/src/validators.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
/**
|
||||
* Zod 验证器
|
||||
*/
|
||||
import { z } from 'zod'
|
||||
|
||||
/**
|
||||
* 通用验证规则
|
||||
*/
|
||||
export const requiredString = z.string().min(1, '此字段为必填项')
|
||||
export const optionalString = z.string().optional()
|
||||
export const email = z.string().email('请输入有效的邮箱地址')
|
||||
export const phone = z.string().regex(/^1[3-9]\d{9}$/, '请输入有效的手机号')
|
||||
export const url = z.string().url('请输入有效的 URL')
|
||||
export const positiveNumber = z.number().positive('请输入正数')
|
||||
export const nonNegativeNumber = z.number().nonnegative('请输入非负数')
|
||||
|
||||
/**
|
||||
* API 响应验证
|
||||
*/
|
||||
export const apiResponseSchema = z.object({
|
||||
code: z.number(),
|
||||
message: z.string(),
|
||||
data: z.unknown(),
|
||||
success: z.boolean(),
|
||||
})
|
||||
|
||||
/**
|
||||
* 分页参数验证
|
||||
*/
|
||||
export const paginationSchema = z.object({
|
||||
page: z.number().int().min(1).default(1),
|
||||
pageSize: z.number().int().min(1).max(100).default(20),
|
||||
})
|
||||
|
||||
/**
|
||||
* 用户信息验证
|
||||
*/
|
||||
export const userInfoSchema = z.object({
|
||||
id: z.string(),
|
||||
username: z.string().min(2, '用户名至少2个字符'),
|
||||
nickname: z.string().optional(),
|
||||
avatar: z.string().url().optional(),
|
||||
email: z.string().email().optional(),
|
||||
roles: z.array(z.string()).optional(),
|
||||
})
|
||||
|
||||
/**
|
||||
* 创建可选字段的 schema
|
||||
*/
|
||||
export function createPartialSchema<T extends z.ZodRawShape>(schema: z.ZodObject<T>) {
|
||||
return schema.partial()
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新导出 zod
|
||||
*/
|
||||
export { z }
|
||||
export type { ZodError, ZodSchema, ZodType } from 'zod'
|
||||
Reference in New Issue
Block a user