riku
10 小时以前 8e3f3890e93d097df4be744648b9ac404d20a558
1
import{__awaiter}from"tslib";import{isNumber,isBoolean,isObject,isEmpty,isDate,isEmail,isURL}from"../common/validator";export const ValidateStatus={TO_BE_VALIDATED:0,SUCCESS:1,FAIL:2};function getCharacterLength(t,e){const i=isNumber(e);if(!t||0===t.length)return i?{length:0,characters:t}:0;let r=0;for(let a=0;a<t.length;a+=1){let n=0;if(n=t.charCodeAt(a)>127||94===t.charCodeAt(a)?2:1,i&&r+n>e)return{length:r,characters:t.slice(0,a)};r+=n}return i?{length:r,characters:t}:r}export function isValueEmpty(t){return"[object Date]"!==Object.prototype.toString.call(t)&&(isObject(t)?isEmpty(t):["",void 0,null].includes(t))}const VALIDATE_MAP={date:isDate,url:isURL,email:isEmail,required:t=>!isValueEmpty(t),whitespace:t=>!(/^\s+$/.test(t)||""===t),boolean:t=>isBoolean(t),max:(t,e)=>isNumber(t)?t<=e:getCharacterLength(t)<=e,min:(t,e)=>isNumber(t)?t>=e:getCharacterLength(t)>=e,len:(t,e)=>getCharacterLength(t)===e,number:t=>isNumber(t),enum:(t,e)=>e.includes(t),idcard:t=>/^(\d{18,18}|\d{15,15}|\d{17,17}x)$/i.test(t),telnumber:t=>/^1[3-9]\d{9}$/.test(t),pattern:(t,e)=>("string"==typeof e?new RegExp(e):e).test(t),validator:(t,e,i)=>e(t,i)};export function validateOneRule(t,e,i){return __awaiter(this,void 0,void 0,function*(){let r={result:!0};const a=Object.keys(e);let n,s,l=!1;for(let i=0;i<a.length;i+=1){const o=a[i];if(!e.required&&isValueEmpty(t)&&!e.validator)return r;const c=VALIDATE_MAP[o],u=e[o];if(c&&(u||0===u)){n=!0===u?void 0:u,s=c,l="validator"===o;break}}if(s){if(r=l?yield s(t,n,i):yield s(t,n),isBoolean(r))return Object.assign(Object.assign({},e),{result:r});if(isObject(r))return r}return r})}export function validate(t,e,i){return __awaiter(this,void 0,void 0,function*(){const r=e.map(e=>validateOneRule(t,e,i));return yield Promise.all(r)})}export const validateRules=validate;