- 新增 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%)
50 lines
1.7 KiB
TypeScript
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;
|
|
}
|