Files
hms/apps/miniprogram/src/utils/validate.ts
iven 9faccac9eb perf(mp): 移除 Zod 依赖,轻量验证替代 — 包体积 -300KB
- 新增 utils/validate.ts 轻量验证工具(<1KB vs Zod 360KB)
- daily-monitoring: Zod schema → validateNum() 直接验证
- input: Zod schema → num()/validateStr() 直接验证
- config/index.ts: 移除 Zod include 编译配置

效果:总体积 1.8MB→1.5MB(-17%),pkg-health 分包 432KB→84KB(-81%)
2026-05-13 23:56:12 +08:00

50 lines
1.7 KiB
TypeScript

interface NumRule {
min?: number;
max?: number;
minMsg?: string;
maxMsg?: string;
posMsg?: string;
optional?: boolean;
}
interface ValidateResult {
ok: boolean;
message: string;
}
export function num(rule: NumRule) {
return {
safeParse(value: number | undefined): ValidateResult {
if (value === undefined || value === null) {
return rule.optional ? { ok: true, message: '' } : { ok: false, message: posMsg || '请输入有效数值' };
}
if (isNaN(value)) return { ok: false, message: '请输入有效数值' };
if (rule.min !== undefined && value < rule.min) return { ok: false, message: rule.minMsg || `数值不能低于${rule.min}` };
if (rule.max !== undefined && value > rule.max) return { ok: false, message: rule.maxMsg || `数值不能高于${rule.max}` };
return { ok: true, message: '' };
},
};
}
interface FieldRule {
min?: number;
max?: number;
minMsg?: string;
maxMsg?: string;
optional?: boolean;
}
export function validateNum(value: number | undefined, label: string, rule: FieldRule): string | null {
if (value === undefined || value === null) return rule.optional ? null : `${label}: 请输入有效数值`;
if (isNaN(value)) return `${label}: 请输入有效数值`;
if (rule.min !== undefined && value < rule.min) return `${label}: ${rule.minMsg ?? `数值不能低于${rule.min}`}`;
if (rule.max !== undefined && value > rule.max) return `${label}: ${rule.maxMsg ?? `数值不能高于${rule.max}`}`;
return null;
}
export function validateStr(value: string | undefined, maxLen: number, label: string): string | null {
if (!value) return null;
if (value.length > maxLen) return `${label}不能超过${maxLen}`;
return null;
}