@lytjs/common-validate 6.5.0 → 6.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\r\n * @lytjs/common-validate\r\n * 轻量级验证工具\r\n */\r\n\r\ndeclare const __DEV__: boolean;\r\n\r\nexport interface ValidationResult {\r\n valid: boolean;\r\n errors: string[];\r\n}\r\n\r\nexport type ValidationRule = {\r\n name: string;\r\n validate: (value: unknown) => boolean | string;\r\n message?: string;\r\n};\r\n\r\n/**\r\n * 验证值是否符合所有规则\r\n *\r\n * @param value - 待验证的值\r\n * @param rules - 验证规则列表\r\n * @returns 验证结果\r\n */\r\nexport function validate(value: unknown, rules: ValidationRule[]): ValidationResult {\r\n const errors: string[] = [];\r\n\r\n for (const rule of rules) {\r\n const result = rule.validate(value);\r\n if (result === false) {\r\n errors.push(rule.message || `Validation failed: ${rule.name}`);\r\n } else if (typeof result === 'string') {\r\n errors.push(result);\r\n }\r\n }\r\n\r\n return {\r\n valid: errors.length === 0,\r\n errors,\r\n };\r\n}\r\n\r\n/**\r\n * 创建一个可复用的验证器函数\r\n *\r\n * @param rules - 验证规则列表\r\n * @returns 验证函数\r\n */\r\nexport function createValidator(\r\n rules: ValidationRule[],\r\n): (value: unknown) => ValidationResult {\r\n return (value: unknown) => validate(value, rules);\r\n}\r\n\r\n// --- 内置规则 ---\r\n\r\n/**\r\n * 必填规则\r\n */\r\nexport const required: ValidationRule = {\r\n name: 'required',\r\n validate: (value: unknown) => {\r\n if (value === null || value === undefined) return false;\r\n if (typeof value === 'string' && value.trim() === '') return false;\r\n return true;\r\n },\r\n message: 'This field is required',\r\n};\r\n\r\n/**\r\n * 最小长度规则\r\n */\r\nexport function minLength(n: number): ValidationRule {\r\n return {\r\n name: 'minLength',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'string') return true; // Skip non-strings\r\n return value.length >= n;\r\n },\r\n message: `Must be at least ${n} characters`,\r\n };\r\n}\r\n\r\n/**\r\n * 最大长度规则\r\n */\r\nexport function maxLength(n: number): ValidationRule {\r\n return {\r\n name: 'maxLength',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'string') return true;\r\n return value.length <= n;\r\n },\r\n message: `Must be at most ${n} characters`,\r\n };\r\n}\r\n\r\n/**\r\n * 正则匹配规则\r\n */\r\nexport function pattern(regex: RegExp, message?: string): ValidationRule {\r\n return {\r\n name: 'pattern',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'string') return true;\r\n return regex.test(value);\r\n },\r\n message: message || 'Value does not match the required pattern',\r\n };\r\n}\r\n\r\n/**\r\n * 邮箱格式规则\r\n */\r\nexport const email: ValidationRule = {\r\n name: 'email',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'string') return true;\r\n if (value === '') return true; // Empty strings are handled by required\r\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\r\n },\r\n message: 'Must be a valid email address',\r\n};\r\n\r\n/**\r\n * URL 格式规则\r\n */\r\nexport const url: ValidationRule = {\r\n name: 'url',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'string') return true;\r\n if (value === '') return true;\r\n try {\r\n new URL(value);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n },\r\n message: 'Must be a valid URL',\r\n};\r\n\r\n/**\r\n * 数字规则\r\n */\r\nexport const number: ValidationRule = {\r\n name: 'number',\r\n validate: (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return true;\r\n return typeof value === 'number' || !isNaN(Number(value));\r\n },\r\n message: 'Must be a number',\r\n};\r\n\r\n/**\r\n * 最小值规则\r\n */\r\nexport function min(n: number): ValidationRule {\r\n return {\r\n name: 'min',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'number') return true;\r\n return value >= n;\r\n },\r\n message: `Must be at least ${n}`,\r\n };\r\n}\r\n\r\n/**\r\n * 最大值规则\r\n */\r\nexport function max(n: number): ValidationRule {\r\n return {\r\n name: 'max',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'number') return true;\r\n return value <= n;\r\n },\r\n message: `Must be at most ${n}`,\r\n };\r\n}\r\n\r\n/**\r\n * 枚举值规则\r\n */\r\nexport function oneOf(values: unknown[]): ValidationRule {\r\n return {\r\n name: 'oneOf',\r\n validate: (value: unknown) => {\r\n return values.includes(value);\r\n },\r\n message: `Must be one of: ${values.join(', ')}`,\r\n };\r\n}\r\n\r\n/**\r\n * 自定义验证规则\r\n */\r\nexport function custom(\r\n fn: (value: unknown) => boolean,\r\n message: string,\r\n): ValidationRule {\r\n return {\r\n name: 'custom',\r\n validate: fn,\r\n message,\r\n };\r\n}\r\n\r\n/** 所有内置规则的集合 */\r\nexport const builtInRules = {\r\n required,\r\n minLength,\r\n maxLength,\r\n pattern,\r\n email,\r\n url,\r\n number,\r\n min,\r\n max,\r\n oneOf,\r\n custom,\r\n};\r\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;AAyBO,SAAS,QAAA,CAAS,OAAgB,KAAA,EAA2C;AAClF,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA;AAClC,IAAA,IAAI,WAAW,KAAA,EAAO;AACpB,MAAA,MAAA,CAAO,KAAK,IAAA,CAAK,OAAA,IAAW,CAAA,mBAAA,EAAsB,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA,IAC/D,CAAA,MAAA,IAAW,OAAO,MAAA,KAAW,QAAA,EAAU;AACrC,MAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,OAAO,MAAA,KAAW,CAAA;AAAA,IACzB;AAAA,GACF;AACF;AAQO,SAAS,gBAAgB,KAAA,EAA+D;AAC7F,EAAA,OAAO,CAAC,KAAA,KAAmB,QAAA,CAAS,KAAA,EAAO,KAAK,CAAA;AAClD;AAOO,IAAM,QAAA,GAA2B;AAAA,EACtC,IAAA,EAAM,UAAA;AAAA,EACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,KAAA;AAClD,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AAC7D,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA,EACA,OAAA,EAAS;AACX;AAKO,SAAS,UAAU,CAAA,EAA2B;AACnD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,MAAA,OAAO,MAAM,MAAA,IAAU,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,OAAA,EAAS,oBAAoB,CAAC,CAAA,WAAA;AAAA,GAChC;AACF;AAKO,SAAS,UAAU,CAAA,EAA2B;AACnD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,MAAA,OAAO,MAAM,MAAA,IAAU,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,OAAA,EAAS,mBAAmB,CAAC,CAAA,WAAA;AAAA,GAC/B;AACF;AAKO,SAAS,OAAA,CAAQ,OAAe,OAAA,EAAkC;AACvE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,MAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,SAAS,OAAA,IAAW;AAAA,GACtB;AACF;AAKO,IAAM,KAAA,GAAwB;AAAA,EACnC,IAAA,EAAM,OAAA;AAAA,EACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,IAAA,IAAI,KAAA,KAAU,IAAI,OAAO,IAAA;AACzB,IAAA,OAAO,4BAAA,CAA6B,KAAK,KAAK,CAAA;AAAA,EAChD,CAAA;AAAA,EACA,OAAA,EAAS;AACX;AAKO,IAAM,GAAA,GAAsB;AAAA,EACjC,IAAA,EAAM,KAAA;AAAA,EACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,IAAA,IAAI,KAAA,KAAU,IAAI,OAAO,IAAA;AACzB,IAAA,IAAI;AACF,MAAA,IAAI,IAAI,KAAK,CAAA;AACb,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA;AAAA,EACA,OAAA,EAAS;AACX;AAKO,IAAM,MAAA,GAAyB;AAAA,EACpC,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,IAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAI,OAAO,IAAA;AAClE,IAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC1D,CAAA;AAAA,EACA,OAAA,EAAS;AACX;AAKO,SAAS,IAAI,CAAA,EAA2B;AAC7C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,MAAA,OAAO,KAAA,IAAS,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,OAAA,EAAS,oBAAoB,CAAC,CAAA;AAAA,GAChC;AACF;AAKO,SAAS,IAAI,CAAA,EAA2B;AAC7C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,MAAA,OAAO,KAAA,IAAS,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,OAAA,EAAS,mBAAmB,CAAC,CAAA;AAAA,GAC/B;AACF;AAKO,SAAS,MAAM,MAAA,EAAmC;AACvD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,OAAO,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,OAAA,EAAS,CAAA,gBAAA,EAAmB,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,GAC/C;AACF;AAKO,SAAS,MAAA,CAAO,IAAiC,OAAA,EAAiC;AACvF,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV;AAAA,GACF;AACF;AAGO,IAAM,YAAA,GAAe;AAAA,EAC1B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF","file":"index.cjs","sourcesContent":["/**\n * @lytjs/common-validate\n * 轻量级验证工具\n */\n\ndeclare const __DEV__: boolean;\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport type ValidationRule = {\n name: string;\n validate: (value: unknown) => boolean | string;\n message?: string;\n};\n\n/**\n * 验证值是否符合所有规则\n *\n * @param value - 待验证的值\n * @param rules - 验证规则列表\n * @returns 验证结果\n */\nexport function validate(value: unknown, rules: ValidationRule[]): ValidationResult {\n const errors: string[] = [];\n\n for (const rule of rules) {\n const result = rule.validate(value);\n if (result === false) {\n errors.push(rule.message || `Validation failed: ${rule.name}`);\n } else if (typeof result === 'string') {\n errors.push(result);\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * 创建一个可复用的验证器函数\n *\n * @param rules - 验证规则列表\n * @returns 验证函数\n */\nexport function createValidator(rules: ValidationRule[]): (value: unknown) => ValidationResult {\n return (value: unknown) => validate(value, rules);\n}\n\n// --- 内置规则 ---\n\n/**\n * 必填规则\n */\nexport const required: ValidationRule = {\n name: 'required',\n validate: (value: unknown) => {\n if (value === null || value === undefined) return false;\n if (typeof value === 'string' && value.trim() === '') return false;\n return true;\n },\n message: 'This field is required',\n};\n\n/**\n * 最小长度规则\n */\nexport function minLength(n: number): ValidationRule {\n return {\n name: 'minLength',\n validate: (value: unknown) => {\n if (typeof value !== 'string') return true; // Skip non-strings\n return value.length >= n;\n },\n message: `Must be at least ${n} characters`,\n };\n}\n\n/**\n * 最大长度规则\n */\nexport function maxLength(n: number): ValidationRule {\n return {\n name: 'maxLength',\n validate: (value: unknown) => {\n if (typeof value !== 'string') return true;\n return value.length <= n;\n },\n message: `Must be at most ${n} characters`,\n };\n}\n\n/**\n * 正则匹配规则\n */\nexport function pattern(regex: RegExp, message?: string): ValidationRule {\n return {\n name: 'pattern',\n validate: (value: unknown) => {\n if (typeof value !== 'string') return true;\n return regex.test(value);\n },\n message: message || 'Value does not match the required pattern',\n };\n}\n\n/**\n * 邮箱格式规则\n */\nexport const email: ValidationRule = {\n name: 'email',\n validate: (value: unknown) => {\n if (typeof value !== 'string') return true;\n if (value === '') return true; // Empty strings are handled by required\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\n },\n message: 'Must be a valid email address',\n};\n\n/**\n * URL 格式规则\n */\nexport const url: ValidationRule = {\n name: 'url',\n validate: (value: unknown) => {\n if (typeof value !== 'string') return true;\n if (value === '') return true;\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n },\n message: 'Must be a valid URL',\n};\n\n/**\n * 数字规则\n */\nexport const number: ValidationRule = {\n name: 'number',\n validate: (value: unknown) => {\n if (value === null || value === undefined || value === '') return true;\n return typeof value === 'number' || !isNaN(Number(value));\n },\n message: 'Must be a number',\n};\n\n/**\n * 最小值规则\n */\nexport function min(n: number): ValidationRule {\n return {\n name: 'min',\n validate: (value: unknown) => {\n if (typeof value !== 'number') return true;\n return value >= n;\n },\n message: `Must be at least ${n}`,\n };\n}\n\n/**\n * 最大值规则\n */\nexport function max(n: number): ValidationRule {\n return {\n name: 'max',\n validate: (value: unknown) => {\n if (typeof value !== 'number') return true;\n return value <= n;\n },\n message: `Must be at most ${n}`,\n };\n}\n\n/**\n * 枚举值规则\n */\nexport function oneOf(values: unknown[]): ValidationRule {\n return {\n name: 'oneOf',\n validate: (value: unknown) => {\n return values.includes(value);\n },\n message: `Must be one of: ${values.join(', ')}`,\n };\n}\n\n/**\n * 自定义验证规则\n */\nexport function custom(fn: (value: unknown) => boolean, message: string): ValidationRule {\n return {\n name: 'custom',\n validate: fn,\n message,\n };\n}\n\n/** 所有内置规则的集合 */\nexport const builtInRules = {\n required,\n minLength,\n maxLength,\n pattern,\n email,\n url,\n number,\n min,\n max,\n oneOf,\n custom,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";AAyBO,SAAS,QAAA,CAAS,OAAgB,KAAA,EAA2C;AAClF,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA;AAClC,IAAA,IAAI,WAAW,KAAA,EAAO;AACpB,MAAA,MAAA,CAAO,KAAK,IAAA,CAAK,OAAA,IAAW,CAAA,mBAAA,EAAsB,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA,IAC/D,CAAA,MAAA,IAAW,OAAO,MAAA,KAAW,QAAA,EAAU;AACrC,MAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,OAAO,MAAA,KAAW,CAAA;AAAA,IACzB;AAAA,GACF;AACF;AAQO,SAAS,gBACd,KAAA,EACsC;AACtC,EAAA,OAAO,CAAC,KAAA,KAAmB,QAAA,CAAS,KAAA,EAAO,KAAK,CAAA;AAClD;AAOO,IAAM,QAAA,GAA2B;AAAA,EACtC,IAAA,EAAM,UAAA;AAAA,EACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,KAAA;AAClD,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AAC7D,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA,EACA,OAAA,EAAS;AACX;AAKO,SAAS,UAAU,CAAA,EAA2B;AACnD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,MAAA,OAAO,MAAM,MAAA,IAAU,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,OAAA,EAAS,oBAAoB,CAAC,CAAA,WAAA;AAAA,GAChC;AACF;AAKO,SAAS,UAAU,CAAA,EAA2B;AACnD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,MAAA,OAAO,MAAM,MAAA,IAAU,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,OAAA,EAAS,mBAAmB,CAAC,CAAA,WAAA;AAAA,GAC/B;AACF;AAKO,SAAS,OAAA,CAAQ,OAAe,OAAA,EAAkC;AACvE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,MAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,SAAS,OAAA,IAAW;AAAA,GACtB;AACF;AAKO,IAAM,KAAA,GAAwB;AAAA,EACnC,IAAA,EAAM,OAAA;AAAA,EACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,IAAA,IAAI,KAAA,KAAU,IAAI,OAAO,IAAA;AACzB,IAAA,OAAO,4BAAA,CAA6B,KAAK,KAAK,CAAA;AAAA,EAChD,CAAA;AAAA,EACA,OAAA,EAAS;AACX;AAKO,IAAM,GAAA,GAAsB;AAAA,EACjC,IAAA,EAAM,KAAA;AAAA,EACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,IAAA,IAAI,KAAA,KAAU,IAAI,OAAO,IAAA;AACzB,IAAA,IAAI;AACF,MAAA,IAAI,IAAI,KAAK,CAAA;AACb,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA;AAAA,EACA,OAAA,EAAS;AACX;AAKO,IAAM,MAAA,GAAyB;AAAA,EACpC,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,IAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAI,OAAO,IAAA;AAClE,IAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC1D,CAAA;AAAA,EACA,OAAA,EAAS;AACX;AAKO,SAAS,IAAI,CAAA,EAA2B;AAC7C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,MAAA,OAAO,KAAA,IAAS,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,OAAA,EAAS,oBAAoB,CAAC,CAAA;AAAA,GAChC;AACF;AAKO,SAAS,IAAI,CAAA,EAA2B;AAC7C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,MAAA,OAAO,KAAA,IAAS,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,OAAA,EAAS,mBAAmB,CAAC,CAAA;AAAA,GAC/B;AACF;AAKO,SAAS,MAAM,MAAA,EAAmC;AACvD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,MAAA,OAAO,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,OAAA,EAAS,CAAA,gBAAA,EAAmB,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,GAC/C;AACF;AAKO,SAAS,MAAA,CACd,IACA,OAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU,EAAA;AAAA,IACV;AAAA,GACF;AACF;AAGO,IAAM,YAAA,GAAe;AAAA,EAC1B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF","file":"index.mjs","sourcesContent":["/**\r\n * @lytjs/common-validate\r\n * 轻量级验证工具\r\n */\r\n\r\ndeclare const __DEV__: boolean;\r\n\r\nexport interface ValidationResult {\r\n valid: boolean;\r\n errors: string[];\r\n}\r\n\r\nexport type ValidationRule = {\r\n name: string;\r\n validate: (value: unknown) => boolean | string;\r\n message?: string;\r\n};\r\n\r\n/**\r\n * 验证值是否符合所有规则\r\n *\r\n * @param value - 待验证的值\r\n * @param rules - 验证规则列表\r\n * @returns 验证结果\r\n */\r\nexport function validate(value: unknown, rules: ValidationRule[]): ValidationResult {\r\n const errors: string[] = [];\r\n\r\n for (const rule of rules) {\r\n const result = rule.validate(value);\r\n if (result === false) {\r\n errors.push(rule.message || `Validation failed: ${rule.name}`);\r\n } else if (typeof result === 'string') {\r\n errors.push(result);\r\n }\r\n }\r\n\r\n return {\r\n valid: errors.length === 0,\r\n errors,\r\n };\r\n}\r\n\r\n/**\r\n * 创建一个可复用的验证器函数\r\n *\r\n * @param rules - 验证规则列表\r\n * @returns 验证函数\r\n */\r\nexport function createValidator(\r\n rules: ValidationRule[],\r\n): (value: unknown) => ValidationResult {\r\n return (value: unknown) => validate(value, rules);\r\n}\r\n\r\n// --- 内置规则 ---\r\n\r\n/**\r\n * 必填规则\r\n */\r\nexport const required: ValidationRule = {\r\n name: 'required',\r\n validate: (value: unknown) => {\r\n if (value === null || value === undefined) return false;\r\n if (typeof value === 'string' && value.trim() === '') return false;\r\n return true;\r\n },\r\n message: 'This field is required',\r\n};\r\n\r\n/**\r\n * 最小长度规则\r\n */\r\nexport function minLength(n: number): ValidationRule {\r\n return {\r\n name: 'minLength',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'string') return true; // Skip non-strings\r\n return value.length >= n;\r\n },\r\n message: `Must be at least ${n} characters`,\r\n };\r\n}\r\n\r\n/**\r\n * 最大长度规则\r\n */\r\nexport function maxLength(n: number): ValidationRule {\r\n return {\r\n name: 'maxLength',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'string') return true;\r\n return value.length <= n;\r\n },\r\n message: `Must be at most ${n} characters`,\r\n };\r\n}\r\n\r\n/**\r\n * 正则匹配规则\r\n */\r\nexport function pattern(regex: RegExp, message?: string): ValidationRule {\r\n return {\r\n name: 'pattern',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'string') return true;\r\n return regex.test(value);\r\n },\r\n message: message || 'Value does not match the required pattern',\r\n };\r\n}\r\n\r\n/**\r\n * 邮箱格式规则\r\n */\r\nexport const email: ValidationRule = {\r\n name: 'email',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'string') return true;\r\n if (value === '') return true; // Empty strings are handled by required\r\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\r\n },\r\n message: 'Must be a valid email address',\r\n};\r\n\r\n/**\r\n * URL 格式规则\r\n */\r\nexport const url: ValidationRule = {\r\n name: 'url',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'string') return true;\r\n if (value === '') return true;\r\n try {\r\n new URL(value);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n },\r\n message: 'Must be a valid URL',\r\n};\r\n\r\n/**\r\n * 数字规则\r\n */\r\nexport const number: ValidationRule = {\r\n name: 'number',\r\n validate: (value: unknown) => {\r\n if (value === null || value === undefined || value === '') return true;\r\n return typeof value === 'number' || !isNaN(Number(value));\r\n },\r\n message: 'Must be a number',\r\n};\r\n\r\n/**\r\n * 最小值规则\r\n */\r\nexport function min(n: number): ValidationRule {\r\n return {\r\n name: 'min',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'number') return true;\r\n return value >= n;\r\n },\r\n message: `Must be at least ${n}`,\r\n };\r\n}\r\n\r\n/**\r\n * 最大值规则\r\n */\r\nexport function max(n: number): ValidationRule {\r\n return {\r\n name: 'max',\r\n validate: (value: unknown) => {\r\n if (typeof value !== 'number') return true;\r\n return value <= n;\r\n },\r\n message: `Must be at most ${n}`,\r\n };\r\n}\r\n\r\n/**\r\n * 枚举值规则\r\n */\r\nexport function oneOf(values: unknown[]): ValidationRule {\r\n return {\r\n name: 'oneOf',\r\n validate: (value: unknown) => {\r\n return values.includes(value);\r\n },\r\n message: `Must be one of: ${values.join(', ')}`,\r\n };\r\n}\r\n\r\n/**\r\n * 自定义验证规则\r\n */\r\nexport function custom(\r\n fn: (value: unknown) => boolean,\r\n message: string,\r\n): ValidationRule {\r\n return {\r\n name: 'custom',\r\n validate: fn,\r\n message,\r\n };\r\n}\r\n\r\n/** 所有内置规则的集合 */\r\nexport const builtInRules = {\r\n required,\r\n minLength,\r\n maxLength,\r\n pattern,\r\n email,\r\n url,\r\n number,\r\n min,\r\n max,\r\n oneOf,\r\n custom,\r\n};\r\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @lytjs/common-validate\n * 轻量级验证工具\n */\n\ndeclare const __DEV__: boolean;\n\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport type ValidationRule = {\n name: string;\n validate: (value: unknown) => boolean | string;\n message?: string;\n};\n\n/**\n * 验证值是否符合所有规则\n *\n * @param value - 待验证的值\n * @param rules - 验证规则列表\n * @returns 验证结果\n */\nexport function validate(value: unknown, rules: ValidationRule[]): ValidationResult {\n const errors: string[] = [];\n\n for (const rule of rules) {\n const result = rule.validate(value);\n if (result === false) {\n errors.push(rule.message || `Validation failed: ${rule.name}`);\n } else if (typeof result === 'string') {\n errors.push(result);\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * 创建一个可复用的验证器函数\n *\n * @param rules - 验证规则列表\n * @returns 验证函数\n */\nexport function createValidator(rules: ValidationRule[]): (value: unknown) => ValidationResult {\n return (value: unknown) => validate(value, rules);\n}\n\n// --- 内置规则 ---\n\n/**\n * 必填规则\n */\nexport const required: ValidationRule = {\n name: 'required',\n validate: (value: unknown) => {\n if (value === null || value === undefined) return false;\n if (typeof value === 'string' && value.trim() === '') return false;\n return true;\n },\n message: 'This field is required',\n};\n\n/**\n * 最小长度规则\n */\nexport function minLength(n: number): ValidationRule {\n return {\n name: 'minLength',\n validate: (value: unknown) => {\n if (typeof value !== 'string') return true; // Skip non-strings\n return value.length >= n;\n },\n message: `Must be at least ${n} characters`,\n };\n}\n\n/**\n * 最大长度规则\n */\nexport function maxLength(n: number): ValidationRule {\n return {\n name: 'maxLength',\n validate: (value: unknown) => {\n if (typeof value !== 'string') return true;\n return value.length <= n;\n },\n message: `Must be at most ${n} characters`,\n };\n}\n\n/**\n * 正则匹配规则\n */\nexport function pattern(regex: RegExp, message?: string): ValidationRule {\n return {\n name: 'pattern',\n validate: (value: unknown) => {\n if (typeof value !== 'string') return true;\n return regex.test(value);\n },\n message: message || 'Value does not match the required pattern',\n };\n}\n\n/**\n * 邮箱格式规则\n */\nexport const email: ValidationRule = {\n name: 'email',\n validate: (value: unknown) => {\n if (typeof value !== 'string') return true;\n if (value === '') return true; // Empty strings are handled by required\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\n },\n message: 'Must be a valid email address',\n};\n\n/**\n * URL 格式规则\n */\nexport const url: ValidationRule = {\n name: 'url',\n validate: (value: unknown) => {\n if (typeof value !== 'string') return true;\n if (value === '') return true;\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n },\n message: 'Must be a valid URL',\n};\n\n/**\n * 数字规则\n */\nexport const number: ValidationRule = {\n name: 'number',\n validate: (value: unknown) => {\n if (value === null || value === undefined || value === '') return true;\n return typeof value === 'number' || !isNaN(Number(value));\n },\n message: 'Must be a number',\n};\n\n/**\n * 最小值规则\n */\nexport function min(n: number): ValidationRule {\n return {\n name: 'min',\n validate: (value: unknown) => {\n if (typeof value !== 'number') return true;\n return value >= n;\n },\n message: `Must be at least ${n}`,\n };\n}\n\n/**\n * 最大值规则\n */\nexport function max(n: number): ValidationRule {\n return {\n name: 'max',\n validate: (value: unknown) => {\n if (typeof value !== 'number') return true;\n return value <= n;\n },\n message: `Must be at most ${n}`,\n };\n}\n\n/**\n * 枚举值规则\n */\nexport function oneOf(values: unknown[]): ValidationRule {\n return {\n name: 'oneOf',\n validate: (value: unknown) => {\n return values.includes(value);\n },\n message: `Must be one of: ${values.join(', ')}`,\n };\n}\n\n/**\n * 自定义验证规则\n */\nexport function custom(fn: (value: unknown) => boolean, message: string): ValidationRule {\n return {\n name: 'custom',\n validate: fn,\n message,\n };\n}\n\n/** 所有内置规则的集合 */\nexport const builtInRules = {\n required,\n minLength,\n maxLength,\n pattern,\n email,\n url,\n number,\n min,\n max,\n oneOf,\n custom,\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lytjs/common-validate",
3
- "version": "6.5.0",
3
+ "version": "6.6.0",
4
4
  "description": "Lightweight validation utilities for LytJS",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
package/src/index.ts CHANGED
@@ -1,224 +1,219 @@
1
- /**
2
- * @lytjs/common-validate
3
- * 轻量级验证工具
4
- */
5
-
6
- declare const __DEV__: boolean;
7
-
8
- export interface ValidationResult {
9
- valid: boolean;
10
- errors: string[];
11
- }
12
-
13
- export type ValidationRule = {
14
- name: string;
15
- validate: (value: unknown) => boolean | string;
16
- message?: string;
17
- };
18
-
19
- /**
20
- * 验证值是否符合所有规则
21
- *
22
- * @param value - 待验证的值
23
- * @param rules - 验证规则列表
24
- * @returns 验证结果
25
- */
26
- export function validate(value: unknown, rules: ValidationRule[]): ValidationResult {
27
- const errors: string[] = [];
28
-
29
- for (const rule of rules) {
30
- const result = rule.validate(value);
31
- if (result === false) {
32
- errors.push(rule.message || `Validation failed: ${rule.name}`);
33
- } else if (typeof result === 'string') {
34
- errors.push(result);
35
- }
36
- }
37
-
38
- return {
39
- valid: errors.length === 0,
40
- errors,
41
- };
42
- }
43
-
44
- /**
45
- * 创建一个可复用的验证器函数
46
- *
47
- * @param rules - 验证规则列表
48
- * @returns 验证函数
49
- */
50
- export function createValidator(
51
- rules: ValidationRule[],
52
- ): (value: unknown) => ValidationResult {
53
- return (value: unknown) => validate(value, rules);
54
- }
55
-
56
- // --- 内置规则 ---
57
-
58
- /**
59
- * 必填规则
60
- */
61
- export const required: ValidationRule = {
62
- name: 'required',
63
- validate: (value: unknown) => {
64
- if (value === null || value === undefined) return false;
65
- if (typeof value === 'string' && value.trim() === '') return false;
66
- return true;
67
- },
68
- message: 'This field is required',
69
- };
70
-
71
- /**
72
- * 最小长度规则
73
- */
74
- export function minLength(n: number): ValidationRule {
75
- return {
76
- name: 'minLength',
77
- validate: (value: unknown) => {
78
- if (typeof value !== 'string') return true; // Skip non-strings
79
- return value.length >= n;
80
- },
81
- message: `Must be at least ${n} characters`,
82
- };
83
- }
84
-
85
- /**
86
- * 最大长度规则
87
- */
88
- export function maxLength(n: number): ValidationRule {
89
- return {
90
- name: 'maxLength',
91
- validate: (value: unknown) => {
92
- if (typeof value !== 'string') return true;
93
- return value.length <= n;
94
- },
95
- message: `Must be at most ${n} characters`,
96
- };
97
- }
98
-
99
- /**
100
- * 正则匹配规则
101
- */
102
- export function pattern(regex: RegExp, message?: string): ValidationRule {
103
- return {
104
- name: 'pattern',
105
- validate: (value: unknown) => {
106
- if (typeof value !== 'string') return true;
107
- return regex.test(value);
108
- },
109
- message: message || 'Value does not match the required pattern',
110
- };
111
- }
112
-
113
- /**
114
- * 邮箱格式规则
115
- */
116
- export const email: ValidationRule = {
117
- name: 'email',
118
- validate: (value: unknown) => {
119
- if (typeof value !== 'string') return true;
120
- if (value === '') return true; // Empty strings are handled by required
121
- return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
122
- },
123
- message: 'Must be a valid email address',
124
- };
125
-
126
- /**
127
- * URL 格式规则
128
- */
129
- export const url: ValidationRule = {
130
- name: 'url',
131
- validate: (value: unknown) => {
132
- if (typeof value !== 'string') return true;
133
- if (value === '') return true;
134
- try {
135
- new URL(value);
136
- return true;
137
- } catch {
138
- return false;
139
- }
140
- },
141
- message: 'Must be a valid URL',
142
- };
143
-
144
- /**
145
- * 数字规则
146
- */
147
- export const number: ValidationRule = {
148
- name: 'number',
149
- validate: (value: unknown) => {
150
- if (value === null || value === undefined || value === '') return true;
151
- return typeof value === 'number' || !isNaN(Number(value));
152
- },
153
- message: 'Must be a number',
154
- };
155
-
156
- /**
157
- * 最小值规则
158
- */
159
- export function min(n: number): ValidationRule {
160
- return {
161
- name: 'min',
162
- validate: (value: unknown) => {
163
- if (typeof value !== 'number') return true;
164
- return value >= n;
165
- },
166
- message: `Must be at least ${n}`,
167
- };
168
- }
169
-
170
- /**
171
- * 最大值规则
172
- */
173
- export function max(n: number): ValidationRule {
174
- return {
175
- name: 'max',
176
- validate: (value: unknown) => {
177
- if (typeof value !== 'number') return true;
178
- return value <= n;
179
- },
180
- message: `Must be at most ${n}`,
181
- };
182
- }
183
-
184
- /**
185
- * 枚举值规则
186
- */
187
- export function oneOf(values: unknown[]): ValidationRule {
188
- return {
189
- name: 'oneOf',
190
- validate: (value: unknown) => {
191
- return values.includes(value);
192
- },
193
- message: `Must be one of: ${values.join(', ')}`,
194
- };
195
- }
196
-
197
- /**
198
- * 自定义验证规则
199
- */
200
- export function custom(
201
- fn: (value: unknown) => boolean,
202
- message: string,
203
- ): ValidationRule {
204
- return {
205
- name: 'custom',
206
- validate: fn,
207
- message,
208
- };
209
- }
210
-
211
- /** 所有内置规则的集合 */
212
- export const builtInRules = {
213
- required,
214
- minLength,
215
- maxLength,
216
- pattern,
217
- email,
218
- url,
219
- number,
220
- min,
221
- max,
222
- oneOf,
223
- custom,
224
- };
1
+ /**
2
+ * @lytjs/common-validate
3
+ * 轻量级验证工具
4
+ */
5
+
6
+ declare const __DEV__: boolean;
7
+
8
+ export interface ValidationResult {
9
+ valid: boolean;
10
+ errors: string[];
11
+ }
12
+
13
+ export type ValidationRule = {
14
+ name: string;
15
+ validate: (value: unknown) => boolean | string;
16
+ message?: string;
17
+ };
18
+
19
+ /**
20
+ * 验证值是否符合所有规则
21
+ *
22
+ * @param value - 待验证的值
23
+ * @param rules - 验证规则列表
24
+ * @returns 验证结果
25
+ */
26
+ export function validate(value: unknown, rules: ValidationRule[]): ValidationResult {
27
+ const errors: string[] = [];
28
+
29
+ for (const rule of rules) {
30
+ const result = rule.validate(value);
31
+ if (result === false) {
32
+ errors.push(rule.message || `Validation failed: ${rule.name}`);
33
+ } else if (typeof result === 'string') {
34
+ errors.push(result);
35
+ }
36
+ }
37
+
38
+ return {
39
+ valid: errors.length === 0,
40
+ errors,
41
+ };
42
+ }
43
+
44
+ /**
45
+ * 创建一个可复用的验证器函数
46
+ *
47
+ * @param rules - 验证规则列表
48
+ * @returns 验证函数
49
+ */
50
+ export function createValidator(rules: ValidationRule[]): (value: unknown) => ValidationResult {
51
+ return (value: unknown) => validate(value, rules);
52
+ }
53
+
54
+ // --- 内置规则 ---
55
+
56
+ /**
57
+ * 必填规则
58
+ */
59
+ export const required: ValidationRule = {
60
+ name: 'required',
61
+ validate: (value: unknown) => {
62
+ if (value === null || value === undefined) return false;
63
+ if (typeof value === 'string' && value.trim() === '') return false;
64
+ return true;
65
+ },
66
+ message: 'This field is required',
67
+ };
68
+
69
+ /**
70
+ * 最小长度规则
71
+ */
72
+ export function minLength(n: number): ValidationRule {
73
+ return {
74
+ name: 'minLength',
75
+ validate: (value: unknown) => {
76
+ if (typeof value !== 'string') return true; // Skip non-strings
77
+ return value.length >= n;
78
+ },
79
+ message: `Must be at least ${n} characters`,
80
+ };
81
+ }
82
+
83
+ /**
84
+ * 最大长度规则
85
+ */
86
+ export function maxLength(n: number): ValidationRule {
87
+ return {
88
+ name: 'maxLength',
89
+ validate: (value: unknown) => {
90
+ if (typeof value !== 'string') return true;
91
+ return value.length <= n;
92
+ },
93
+ message: `Must be at most ${n} characters`,
94
+ };
95
+ }
96
+
97
+ /**
98
+ * 正则匹配规则
99
+ */
100
+ export function pattern(regex: RegExp, message?: string): ValidationRule {
101
+ return {
102
+ name: 'pattern',
103
+ validate: (value: unknown) => {
104
+ if (typeof value !== 'string') return true;
105
+ return regex.test(value);
106
+ },
107
+ message: message || 'Value does not match the required pattern',
108
+ };
109
+ }
110
+
111
+ /**
112
+ * 邮箱格式规则
113
+ */
114
+ export const email: ValidationRule = {
115
+ name: 'email',
116
+ validate: (value: unknown) => {
117
+ if (typeof value !== 'string') return true;
118
+ if (value === '') return true; // Empty strings are handled by required
119
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
120
+ },
121
+ message: 'Must be a valid email address',
122
+ };
123
+
124
+ /**
125
+ * URL 格式规则
126
+ */
127
+ export const url: ValidationRule = {
128
+ name: 'url',
129
+ validate: (value: unknown) => {
130
+ if (typeof value !== 'string') return true;
131
+ if (value === '') return true;
132
+ try {
133
+ new URL(value);
134
+ return true;
135
+ } catch {
136
+ return false;
137
+ }
138
+ },
139
+ message: 'Must be a valid URL',
140
+ };
141
+
142
+ /**
143
+ * 数字规则
144
+ */
145
+ export const number: ValidationRule = {
146
+ name: 'number',
147
+ validate: (value: unknown) => {
148
+ if (value === null || value === undefined || value === '') return true;
149
+ return typeof value === 'number' || !isNaN(Number(value));
150
+ },
151
+ message: 'Must be a number',
152
+ };
153
+
154
+ /**
155
+ * 最小值规则
156
+ */
157
+ export function min(n: number): ValidationRule {
158
+ return {
159
+ name: 'min',
160
+ validate: (value: unknown) => {
161
+ if (typeof value !== 'number') return true;
162
+ return value >= n;
163
+ },
164
+ message: `Must be at least ${n}`,
165
+ };
166
+ }
167
+
168
+ /**
169
+ * 最大值规则
170
+ */
171
+ export function max(n: number): ValidationRule {
172
+ return {
173
+ name: 'max',
174
+ validate: (value: unknown) => {
175
+ if (typeof value !== 'number') return true;
176
+ return value <= n;
177
+ },
178
+ message: `Must be at most ${n}`,
179
+ };
180
+ }
181
+
182
+ /**
183
+ * 枚举值规则
184
+ */
185
+ export function oneOf(values: unknown[]): ValidationRule {
186
+ return {
187
+ name: 'oneOf',
188
+ validate: (value: unknown) => {
189
+ return values.includes(value);
190
+ },
191
+ message: `Must be one of: ${values.join(', ')}`,
192
+ };
193
+ }
194
+
195
+ /**
196
+ * 自定义验证规则
197
+ */
198
+ export function custom(fn: (value: unknown) => boolean, message: string): ValidationRule {
199
+ return {
200
+ name: 'custom',
201
+ validate: fn,
202
+ message,
203
+ };
204
+ }
205
+
206
+ /** 所有内置规则的集合 */
207
+ export const builtInRules = {
208
+ required,
209
+ minLength,
210
+ maxLength,
211
+ pattern,
212
+ email,
213
+ url,
214
+ number,
215
+ min,
216
+ max,
217
+ oneOf,
218
+ custom,
219
+ };