async-validator.js 18 KB

1
  1. "use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _extends(){return(_extends=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t,n=arguments[r];for(t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e}).apply(this,arguments)}function _inheritsLoose(e,r){e.prototype=Object.create(r.prototype),_setPrototypeOf(e.prototype.constructor=e,r)}function _getPrototypeOf(e){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _setPrototypeOf(e,r){return(_setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,r){return e.__proto__=r,e})(e,r)}function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function _construct(e,r,t){return(_construct=_isNativeReflectConstruct()?Reflect.construct.bind():function(e,r,t){var n=[null];n.push.apply(n,r);r=new(Function.bind.apply(e,n));return t&&_setPrototypeOf(r,t.prototype),r}).apply(null,arguments)}function _isNativeFunction(e){return-1!==Function.toString.call(e).indexOf("[native code]")}function _wrapNativeSuper(e){var t="function"==typeof Map?new Map:void 0;return(_wrapNativeSuper=function(e){if(null===e||!_isNativeFunction(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return _construct(e,arguments,_getPrototypeOf(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),_setPrototypeOf(r,e)})(e)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var formatRegExp=/%[sdj%]/g,warning=function(){};function convertFieldsError(e){var t;return e&&e.length?(t={},e.forEach(function(e){var r=e.field;t[r]=t[r]||[],t[r].push(e)}),t):null}function format(e){for(var r=arguments.length,t=new Array(1<r?r-1:0),n=1;n<r;n++)t[n-1]=arguments[n];var i=0,a=t.length;return"function"==typeof e?e.apply(null,t):"string"==typeof e?e.replace(formatRegExp,function(e){if("%%"===e)return"%";if(a<=i)return e;switch(e){case"%s":return String(t[i++]);case"%d":return Number(t[i++]);case"%j":try{return JSON.stringify(t[i++])}catch(e){return"[Circular]"}break;default:return e}}):e}function isNativeStringType(e){return"string"===e||"url"===e||"hex"===e||"email"===e||"date"===e||"pattern"===e}function isEmptyValue(e,r){return null==e||!("array"!==r||!Array.isArray(e)||e.length)||!(!isNativeStringType(r)||"string"!=typeof e||e)}function asyncParallelArray(e,r,t){var n=[],i=0,a=e.length;function s(e){n.push.apply(n,e||[]),++i===a&&t(n)}e.forEach(function(e){r(e,s)})}function asyncSerialArray(t,n,i){var a=0,s=t.length;!function e(r){r&&r.length?i(r):(r=a,a+=1,r<s?n(t[r],e):i([]))}([])}function flattenObjArr(r){var t=[];return Object.keys(r).forEach(function(e){t.push.apply(t,r[e]||[])}),t}"undefined"!=typeof process&&process.env&&"production"!==process.env.NODE_ENV&&"undefined"!=typeof window&&"undefined"!=typeof document&&(warning=function(e,r){"undefined"!=typeof console&&console.warn&&"undefined"==typeof ASYNC_VALIDATOR_NO_WARNING&&r.every(function(e){return"string"==typeof e})&&console.warn(e,r)});var AsyncValidationError=function(n){function e(e,r){var t=n.call(this,"Async Validation Error")||this;return t.errors=e,t.fields=r,t}return _inheritsLoose(e,n),e}(_wrapNativeSuper(Error));function asyncMap(i,e,a,s,u){var o,l,f,c,p,r;return e.first?(r=new Promise(function(r,t){asyncSerialArray(flattenObjArr(i),a,function(e){return s(e),e.length?t(new AsyncValidationError(e,convertFieldsError(e))):r(u)})})).catch(function(e){return e}):(o=!0===e.firstFields?Object.keys(i):e.firstFields||[],l=Object.keys(i),f=l.length,c=0,p=[],(r=new Promise(function(r,t){function n(e){if(p.push.apply(p,e),++c===f)return s(p),p.length?t(new AsyncValidationError(p,convertFieldsError(p))):r(u)}l.length||(s(p),r(u)),l.forEach(function(e){var r=i[e];(-1!==o.indexOf(e)?asyncSerialArray:asyncParallelArray)(r,a,n)})})).catch(function(e){return e})),r}function isErrorObj(e){return!(!e||void 0===e.message)}function getValue(e,r){for(var t=e,n=0;n<r.length;n++){if(null==t)return t;t=t[r[n]]}return t}function complementError(t,n){return function(e){var r=t.fullFields?getValue(n,t.fullFields):n[e.field||t.fullField];return isErrorObj(e)?(e.field=e.field||t.fullField,e.fieldValue=r,e):{message:"function"==typeof e?e():e,fieldValue:r,field:e.field||t.fullField}}}function deepMerge(e,r){if(r)for(var t in r){var n;r.hasOwnProperty(t)&&("object"===_typeof(n=r[t])&&"object"===_typeof(e[t])?e[t]=_extends({},e[t],n):e[t]=n)}return e}var urlReg,required$1=function(e,r,t,n,i,a){!e.required||t.hasOwnProperty(e.field)&&!isEmptyValue(r,a||e.type)||n.push(format(i.messages.required,e.fullField))},whitespace=function(e,r,t,n,i){!/^\s+$/.test(r)&&""!==r||n.push(format(i.messages.whitespace,e.fullField))},getUrlRegex=function(){var r,t,n,i,a,s,u,e,o;return urlReg||(r="[a-fA-F\\d:]",t=function(e){return e&&e.includeBoundaries?"(?:(?<=\\s|^)(?="+r+")|(?<="+r+")(?=\\s|$))":""},i=("\n(?:\n(?:"+(o="[a-fA-F\\d]{1,4}")+":){7}(?:"+o+"|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\n(?:"+o+":){6}(?:"+(n="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}")+"|:"+o+"|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\n(?:"+o+":){5}(?::"+n+"|(?::"+o+"){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\n(?:"+o+":){4}(?:(?::"+o+"){0,1}:"+n+"|(?::"+o+"){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\n(?:"+o+":){3}(?:(?::"+o+"){0,2}:"+n+"|(?::"+o+"){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\n(?:"+o+":){2}(?:(?::"+o+"){0,3}:"+n+"|(?::"+o+"){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\n(?:"+o+":){1}(?:(?::"+o+"){0,4}:"+n+"|(?::"+o+"){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\n(?::(?:(?::"+o+"){0,5}:"+n+"|(?::"+o+"){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\n)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1\n").replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),a=new RegExp("(?:^"+n+"$)|(?:^"+i+"$)"),s=new RegExp("^"+n+"$"),u=new RegExp("^"+i+"$"),(o=function(e){return e&&e.exact?a:new RegExp("(?:"+t(e)+n+t(e)+")|(?:"+t(e)+i+t(e)+")","g")}).v4=function(e){return e&&e.exact?s:new RegExp(t(e)+n+t(e),"g")},o.v6=function(e){return e&&e.exact?u:new RegExp(""+t(e)+i+t(e),"g")},e=o.v4().source,o=o.v6().source,urlReg=new RegExp("(?:^"+("(?:(?:(?:[a-z]+:)?//)|www\\.)(?:\\S+(?::\\S*)?@)?(?:localhost|"+e+"|"+o+'|(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:[/?#][^\\s"]*)?')+"$)","i")),urlReg},pattern$2={email:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},types={integer:function(e){return types.number(e)&&parseInt(e,10)===e},float:function(e){return types.number(e)&&!types.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(e){return!1}},date:function(e){return"function"==typeof e.getTime&&"function"==typeof e.getMonth&&"function"==typeof e.getYear&&!isNaN(e.getTime())},number:function(e){return!isNaN(e)&&"number"==typeof e},object:function(e){return"object"===_typeof(e)&&!types.array(e)},method:function(e){return"function"==typeof e},email:function(e){return"string"==typeof e&&e.length<=320&&!!e.match(pattern$2.email)},url:function(e){return"string"==typeof e&&e.length<=2048&&!!e.match(getUrlRegex())},hex:function(e){return"string"==typeof e&&!!e.match(pattern$2.hex)}},type$1=function(e,r,t,n,i){e.required&&void 0===r?required$1(e,r,t,n,i):(t=e.type,-1<["integer","float","array","regexp","object","method","email","number","date","url","hex"].indexOf(t)?types[t](r)||n.push(format(i.messages.types[t],e.fullField,e.type)):t&&_typeof(r)!==e.type&&n.push(format(i.messages.types[t],e.fullField,e.type)))},range=function(e,r,t,n,i){var a="number"==typeof e.len,s="number"==typeof e.min,u="number"==typeof e.max,o=r,l=null,f="number"==typeof r,c="string"==typeof r,p=Array.isArray(r);if(f?l="number":c?l="string":p&&(l="array"),!l)return!1;p&&(o=r.length),c&&(o=r.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"_").length),a?o!==e.len&&n.push(format(i.messages[l].len,e.fullField,e.len)):s&&!u&&o<e.min?n.push(format(i.messages[l].min,e.fullField,e.min)):u&&!s&&o>e.max?n.push(format(i.messages[l].max,e.fullField,e.max)):s&&u&&(o<e.min||o>e.max)&&n.push(format(i.messages[l].range,e.fullField,e.min,e.max))},ENUM$1="enum",enumerable$1=function(e,r,t,n,i){e[ENUM$1]=Array.isArray(e[ENUM$1])?e[ENUM$1]:[],-1===e[ENUM$1].indexOf(r)&&n.push(format(i.messages[ENUM$1],e.fullField,e[ENUM$1].join(", ")))},pattern$1=function(e,r,t,n,i){e.pattern&&(e.pattern instanceof RegExp?(e.pattern.lastIndex=0,e.pattern.test(r)||n.push(format(i.messages.pattern.mismatch,e.fullField,r,e.pattern))):"string"!=typeof e.pattern||new RegExp(e.pattern).test(r)||n.push(format(i.messages.pattern.mismatch,e.fullField,r,e.pattern)))},rules={required:required$1,whitespace:whitespace,type:type$1,range:range,enum:enumerable$1,pattern:pattern$1},string=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r,"string")&&!e.required)return t();rules.required(e,r,n,a,i,"string"),isEmptyValue(r,"string")||(rules.type(e,r,n,a,i),rules.range(e,r,n,a,i),rules.pattern(e,r,n,a,i),!0===e.whitespace&&rules.whitespace(e,r,n,a,i))}t(a)},method=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r)&&!e.required)return t();rules.required(e,r,n,a,i),void 0!==r&&rules.type(e,r,n,a,i)}t(a)},number=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r=""===r?void 0:r)&&!e.required)return t();rules.required(e,r,n,a,i),void 0!==r&&(rules.type(e,r,n,a,i),rules.range(e,r,n,a,i))}t(a)},_boolean=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r)&&!e.required)return t();rules.required(e,r,n,a,i),void 0!==r&&rules.type(e,r,n,a,i)}t(a)},regexp=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r)&&!e.required)return t();rules.required(e,r,n,a,i),isEmptyValue(r)||rules.type(e,r,n,a,i)}t(a)},integer=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r)&&!e.required)return t();rules.required(e,r,n,a,i),void 0!==r&&(rules.type(e,r,n,a,i),rules.range(e,r,n,a,i))}t(a)},floatFn=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r)&&!e.required)return t();rules.required(e,r,n,a,i),void 0!==r&&(rules.type(e,r,n,a,i),rules.range(e,r,n,a,i))}t(a)},array=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(null==r&&!e.required)return t();rules.required(e,r,n,a,i,"array"),null!=r&&(rules.type(e,r,n,a,i),rules.range(e,r,n,a,i))}t(a)},object=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r)&&!e.required)return t();rules.required(e,r,n,a,i),void 0!==r&&rules.type(e,r,n,a,i)}t(a)},ENUM="enum",enumerable=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r)&&!e.required)return t();rules.required(e,r,n,a,i),void 0!==r&&rules[ENUM](e,r,n,a,i)}t(a)},pattern=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r,"string")&&!e.required)return t();rules.required(e,r,n,a,i),isEmptyValue(r,"string")||rules.pattern(e,r,n,a,i)}t(a)},date=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r,"date")&&!e.required)return t();rules.required(e,r,n,a,i),isEmptyValue(r,"date")||(r=r instanceof Date?r:new Date(r),rules.type(e,r,n,a,i),r&&rules.range(e,r.getTime(),n,a,i))}t(a)},required=function(e,r,t,n,i){var a=[],s=Array.isArray(r)?"array":_typeof(r);rules.required(e,r,n,a,i,s),t(a)},type=function(e,r,t,n,i){var a=e.type,s=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r,a)&&!e.required)return t();rules.required(e,r,n,s,i,a),isEmptyValue(r,a)||rules.type(e,r,n,s,i)}t(s)},any=function(e,r,t,n,i){var a=[];if(e.required||!e.required&&n.hasOwnProperty(e.field)){if(isEmptyValue(r)&&!e.required)return t();rules.required(e,r,n,a,i)}t(a)},validators={string:string,method:method,number:number,boolean:_boolean,regexp:regexp,integer:integer,float:floatFn,array:array,object:object,enum:enumerable,pattern:pattern,date:date,url:type,hex:type,email:type,required:required,any:any};function newMessages(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var messages=newMessages(),Schema=exports.default=function(){function f(e){this.rules=null,this._messages=messages,this.define(e)}var e=f.prototype;return e.define=function(t){var n=this;if(!t)throw new Error("Cannot configure a schema with no rules");if("object"!==_typeof(t)||Array.isArray(t))throw new Error("Rules must be an object");this.rules={},Object.keys(t).forEach(function(e){var r=t[e];n.rules[e]=Array.isArray(r)?r:[r]})},e.messages=function(e){return e&&(this._messages=deepMerge(newMessages(),e)),this._messages},e.validate=function(n,e,r){var i=this,o=n,l=e=void 0===e?{}:e,a=r=void 0===r?function(){}:r;if("function"==typeof l&&(a=l,l={}),!this.rules||0===Object.keys(this.rules).length)return a&&a(null,o),Promise.resolve(o);function t(e){var r,t=[];for(var n,i=0;i<e.length;i++)n=e[i],Array.isArray(n)?t=t.concat.apply(t,n):t.push(n);t.length?(r=convertFieldsError(t),a(t,r)):a(null,o)}l.messages?(deepMerge(e=(e=this.messages())===messages?newMessages():e,l.messages),l.messages=e):l.messages=this.messages();var s={};(l.keys||Object.keys(this.rules)).forEach(function(r){var e=i.rules[r],t=o[r];e.forEach(function(e){"function"==typeof e.transform&&(o===n&&(o=_extends({},o)),t=o[r]=e.transform(t)),(e="function"==typeof e?{validator:e}:_extends({},e)).validator=i.getValidationMethod(e),e.validator&&(e.field=r,e.fullField=e.fullField||r,e.type=i.getType(e),s[r]=s[r]||[],s[r].push({rule:e,value:t,source:o,field:r}))})});return asyncMap(s,l,function(r,a){var s,e,u=r.rule;function t(e){void 0===e&&(e=[]);var e=Array.isArray(e)?e:[e],t=(!l.suppressWarning&&e.length&&f.warning("async-validator:",e),(e=e.length&&void 0!==u.message?[].concat(u.message):e).map(complementError(u,o)));if(l.first&&t.length)return u.field,a(t);if(s){if(u.required&&!r.value)return void 0!==u.message?t=[].concat(u.message).map(complementError(u,o)):l.error&&(t=[l.error(u,format(l.messages.required,u.field))]),a(t);var n={},i=(u.defaultField&&Object.keys(r.value).map(function(e){n[e]=u.defaultField}),n=_extends({},n,r.rule.fields),{}),e=(Object.keys(n).forEach(function(e){var r=n[e],r=Array.isArray(r)?r:[r];i[e]=r.map(function(e,r){return _extends({},r,{fullField:u.fullField+"."+e,fullFields:u.fullFields?[].concat(u.fullFields,[e]):[e]})}.bind(null,e))}),new f(i));e.messages(l.messages),r.rule.options&&(r.rule.options.messages=l.messages,r.rule.options.error=l.error),e.validate(r.value,r.rule.options||l,function(e){var r=[];t&&t.length&&r.push.apply(r,t),e&&e.length&&r.push.apply(r,e),a(r.length?r:null)})}else a(t)}if(s=!("object"!==u.type&&"array"!==u.type||"object"!==_typeof(u.fields)&&"object"!==_typeof(u.defaultField))&&(u.required||!u.required&&r.value),u.field=r.field,u.asyncValidator)e=u.asyncValidator(u,r.value,t,r.source,l);else if(u.validator){try{e=u.validator(u,r.value,t,r.source,l)}catch(e){null!=console.error&&console.error(e),l.suppressValidatorError||setTimeout(function(){throw e},0),t(e.message)}!0===e?t():!1===e?t("function"==typeof u.message?u.message(u.fullField||u.field):u.message||(u.fullField||u.field)+" fails"):e instanceof Array?t(e):e instanceof Error&&t(e.message)}e&&e.then&&e.then(function(){return t()},t)},function(e){t(e)},o)},e.getType=function(e){if(void 0===e.type&&e.pattern instanceof RegExp&&(e.type="pattern"),"function"!=typeof e.validator&&e.type&&!validators.hasOwnProperty(e.type))throw new Error(format("Unknown rule type %s",e.type));return e.type||"string"},e.getValidationMethod=function(e){var r,t;return"function"==typeof e.validator?e.validator:(-1!==(t=(r=Object.keys(e)).indexOf("message"))&&r.splice(t,1),1===r.length&&"required"===r[0]?validators.required:validators[this.getType(e)]||void 0)},f}();Schema.register=function(e,r){if("function"!=typeof r)throw new Error("Cannot register a validator by type, validator is not a function");validators[e]=r},Schema.warning=warning,Schema.messages=messages,Schema.validators=validators;