import { z } from 'zod'; import { ULID_PATTERN } from '../ulid.js'; /** 26 位 ULID 主键 */ export const ulidSchema = z.string().regex(ULID_PATTERN, '必须是 26 位大写 ULID'); export const idSchema = ulidSchema; /** ISO 8601 时间(必须带时区,A0 统一用 UTC Z) */ export const isoDateTimeSchema = z.string().datetime({ offset: true }); export const sortOrderSchema = z.enum(['asc', 'desc']); /** 请求追踪 ID(与 Pino requestId 同源) */ export const traceIdSchema = z.string().min(8).max(64); /** 任务提交幂等键:8–128 位可见 ASCII */ export const idempotencyKeySchema = z .string() .min(8) .max(128) .regex(/^[\x21-\x7e]+$/, '幂等键必须是可见 ASCII 字符'); /** 客户 ID:ULID */ export const customerIdSchema = ulidSchema;