| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329 | function _extends() {  _extends = Object.assign ? Object.assign.bind() : function (target) {    for (var i = 1; i < arguments.length; i++) {      var source = arguments[i];      for (var key in source) {        if (Object.prototype.hasOwnProperty.call(source, key)) {          target[key] = source[key];        }      }    }    return target;  };  return _extends.apply(this, arguments);}function _inheritsLoose(subClass, superClass) {  subClass.prototype = Object.create(superClass.prototype);  subClass.prototype.constructor = subClass;  _setPrototypeOf(subClass, superClass);}function _getPrototypeOf(o) {  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {    return o.__proto__ || Object.getPrototypeOf(o);  };  return _getPrototypeOf(o);}function _setPrototypeOf(o, p) {  _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {    o.__proto__ = p;    return o;  };  return _setPrototypeOf(o, p);}function _isNativeReflectConstruct() {  if (typeof Reflect === "undefined" || !Reflect.construct) return false;  if (Reflect.construct.sham) return false;  if (typeof Proxy === "function") return true;  try {    Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));    return true;  } catch (e) {    return false;  }}function _construct(Parent, args, Class) {  if (_isNativeReflectConstruct()) {    _construct = Reflect.construct.bind();  } else {    _construct = function _construct(Parent, args, Class) {      var a = [null];      a.push.apply(a, args);      var Constructor = Function.bind.apply(Parent, a);      var instance = new Constructor();      if (Class) _setPrototypeOf(instance, Class.prototype);      return instance;    };  }  return _construct.apply(null, arguments);}function _isNativeFunction(fn) {  return Function.toString.call(fn).indexOf("[native code]") !== -1;}function _wrapNativeSuper(Class) {  var _cache = typeof Map === "function" ? new Map() : undefined;  _wrapNativeSuper = function _wrapNativeSuper(Class) {    if (Class === null || !_isNativeFunction(Class)) return Class;    if (typeof Class !== "function") {      throw new TypeError("Super expression must either be null or a function");    }    if (typeof _cache !== "undefined") {      if (_cache.has(Class)) return _cache.get(Class);      _cache.set(Class, Wrapper);    }    function Wrapper() {      return _construct(Class, arguments, _getPrototypeOf(this).constructor);    }    Wrapper.prototype = Object.create(Class.prototype, {      constructor: {        value: Wrapper,        enumerable: false,        writable: true,        configurable: true      }    });    return _setPrototypeOf(Wrapper, Class);  };  return _wrapNativeSuper(Class);}/* eslint no-console:0 */var formatRegExp = /%[sdj%]/g;var warning = function warning() {}; // don't print warning message when in production env or node runtimeif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {  warning = function warning(type, errors) {    if (typeof console !== 'undefined' && console.warn && typeof ASYNC_VALIDATOR_NO_WARNING === 'undefined') {      if (errors.every(function (e) {        return typeof e === 'string';      })) {        console.warn(type, errors);      }    }  };}function convertFieldsError(errors) {  if (!errors || !errors.length) return null;  var fields = {};  errors.forEach(function (error) {    var field = error.field;    fields[field] = fields[field] || [];    fields[field].push(error);  });  return fields;}function format(template) {  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {    args[_key - 1] = arguments[_key];  }  var i = 0;  var len = args.length;  if (typeof template === 'function') {    return template.apply(null, args);  }  if (typeof template === 'string') {    var str = template.replace(formatRegExp, function (x) {      if (x === '%%') {        return '%';      }      if (i >= len) {        return x;      }      switch (x) {        case '%s':          return String(args[i++]);        case '%d':          return Number(args[i++]);        case '%j':          try {            return JSON.stringify(args[i++]);          } catch (_) {            return '[Circular]';          }          break;        default:          return x;      }    });    return str;  }  return template;}function isNativeStringType(type) {  return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'date' || type === 'pattern';}function isEmptyValue(value, type) {  if (value === undefined || value === null) {    return true;  }  if (type === 'array' && Array.isArray(value) && !value.length) {    return true;  }  if (isNativeStringType(type) && typeof value === 'string' && !value) {    return true;  }  return false;}function asyncParallelArray(arr, func, callback) {  var results = [];  var total = 0;  var arrLength = arr.length;  function count(errors) {    results.push.apply(results, errors || []);    total++;    if (total === arrLength) {      callback(results);    }  }  arr.forEach(function (a) {    func(a, count);  });}function asyncSerialArray(arr, func, callback) {  var index = 0;  var arrLength = arr.length;  function next(errors) {    if (errors && errors.length) {      callback(errors);      return;    }    var original = index;    index = index + 1;    if (original < arrLength) {      func(arr[original], next);    } else {      callback([]);    }  }  next([]);}function flattenObjArr(objArr) {  var ret = [];  Object.keys(objArr).forEach(function (k) {    ret.push.apply(ret, objArr[k] || []);  });  return ret;}var AsyncValidationError = /*#__PURE__*/function (_Error) {  _inheritsLoose(AsyncValidationError, _Error);  function AsyncValidationError(errors, fields) {    var _this;    _this = _Error.call(this, 'Async Validation Error') || this;    _this.errors = errors;    _this.fields = fields;    return _this;  }  return AsyncValidationError;}( /*#__PURE__*/_wrapNativeSuper(Error));function asyncMap(objArr, option, func, callback, source) {  if (option.first) {    var _pending = new Promise(function (resolve, reject) {      var next = function next(errors) {        callback(errors);        return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(source);      };      var flattenArr = flattenObjArr(objArr);      asyncSerialArray(flattenArr, func, next);    });    _pending["catch"](function (e) {      return e;    });    return _pending;  }  var firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || [];  var objArrKeys = Object.keys(objArr);  var objArrLength = objArrKeys.length;  var total = 0;  var results = [];  var pending = new Promise(function (resolve, reject) {    var next = function next(errors) {      results.push.apply(results, errors);      total++;      if (total === objArrLength) {        callback(results);        return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(source);      }    };    if (!objArrKeys.length) {      callback(results);      resolve(source);    }    objArrKeys.forEach(function (key) {      var arr = objArr[key];      if (firstFields.indexOf(key) !== -1) {        asyncSerialArray(arr, func, next);      } else {        asyncParallelArray(arr, func, next);      }    });  });  pending["catch"](function (e) {    return e;  });  return pending;}function isErrorObj(obj) {  return !!(obj && obj.message !== undefined);}function getValue(value, path) {  var v = value;  for (var i = 0; i < path.length; i++) {    if (v == undefined) {      return v;    }    v = v[path[i]];  }  return v;}function complementError(rule, source) {  return function (oe) {    var fieldValue;    if (rule.fullFields) {      fieldValue = getValue(source, rule.fullFields);    } else {      fieldValue = source[oe.field || rule.fullField];    }    if (isErrorObj(oe)) {      oe.field = oe.field || rule.fullField;      oe.fieldValue = fieldValue;      return oe;    }    return {      message: typeof oe === 'function' ? oe() : oe,      fieldValue: fieldValue,      field: oe.field || rule.fullField    };  };}function deepMerge(target, source) {  if (source) {    for (var s in source) {      if (source.hasOwnProperty(s)) {        var value = source[s];        if (typeof value === 'object' && typeof target[s] === 'object') {          target[s] = _extends({}, target[s], value);        } else {          target[s] = value;        }      }    }  }  return target;}var required$1 = function required(rule, value, source, errors, options, type) {  if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {    errors.push(format(options.messages.required, rule.fullField));  }};/** *  Rule for validating whitespace. * *  @param rule The validation rule. *  @param value The value of the field on the source object. *  @param source The source object being validated. *  @param errors An array of errors that this rule may add *  validation errors to. *  @param options The validation options. *  @param options.messages The validation messages. */var whitespace = function whitespace(rule, value, source, errors, options) {  if (/^\s+$/.test(value) || value === '') {    errors.push(format(options.messages.whitespace, rule.fullField));  }};// https://github.com/kevva/url-regex/blob/master/index.jsvar urlReg;var getUrlRegex = (function () {  if (urlReg) {    return urlReg;  }  var word = '[a-fA-F\\d:]';  var b = function b(options) {    return options && options.includeBoundaries ? "(?:(?<=\\s|^)(?=" + word + ")|(?<=" + word + ")(?=\\s|$))" : '';  };  var v4 = '(?: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}';  var v6seg = '[a-fA-F\\d]{1,4}';  var v6 = ("\n(?:\n(?:" + v6seg + ":){7}(?:" + v6seg + "|:)|                                    // 1:2:3:4:5:6:7::  1:2:3:4:5:6:7:8\n(?:" + v6seg + ":){6}(?:" + v4 + "|:" + v6seg + "|:)|                             // 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(?:" + v6seg + ":){5}(?::" + v4 + "|(?::" + v6seg + "){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(?:" + v6seg + ":){4}(?:(?::" + v6seg + "){0,1}:" + v4 + "|(?::" + v6seg + "){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(?:" + v6seg + ":){3}(?:(?::" + v6seg + "){0,2}:" + v4 + "|(?::" + v6seg + "){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(?:" + v6seg + ":){2}(?:(?::" + v6seg + "){0,3}:" + v4 + "|(?::" + v6seg + "){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(?:" + v6seg + ":){1}(?:(?::" + v6seg + "){0,4}:" + v4 + "|(?::" + v6seg + "){1,6}|:)| // 1::              1::3:4:5:6:7:8   1::8            1::3:4:5:6:7:1.2.3.4\n(?::(?:(?::" + v6seg + "){0,5}:" + v4 + "|(?::" + v6seg + "){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(); // Pre-compile only the exact regexes because adding a global flag make regexes stateful  var v46Exact = new RegExp("(?:^" + v4 + "$)|(?:^" + v6 + "$)");  var v4exact = new RegExp("^" + v4 + "$");  var v6exact = new RegExp("^" + v6 + "$");  var ip = function ip(options) {    return options && options.exact ? v46Exact : new RegExp("(?:" + b(options) + v4 + b(options) + ")|(?:" + b(options) + v6 + b(options) + ")", 'g');  };  ip.v4 = function (options) {    return options && options.exact ? v4exact : new RegExp("" + b(options) + v4 + b(options), 'g');  };  ip.v6 = function (options) {    return options && options.exact ? v6exact : new RegExp("" + b(options) + v6 + b(options), 'g');  };  var protocol = "(?:(?:[a-z]+:)?//)";  var auth = '(?:\\S+(?::\\S*)?@)?';  var ipv4 = ip.v4().source;  var ipv6 = ip.v6().source;  var host = "(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)";  var domain = "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*";  var tld = "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))";  var port = '(?::\\d{2,5})?';  var path = '(?:[/?#][^\\s"]*)?';  var regex = "(?:" + protocol + "|www\\.)" + auth + "(?:localhost|" + ipv4 + "|" + ipv6 + "|" + host + domain + tld + ")" + port + path;  urlReg = new RegExp("(?:^" + regex + "$)", 'i');  return urlReg;});/* eslint max-len:0 */var pattern$2 = {  // http://emailregex.com/  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,}))$/,  // url: new RegExp(  //   '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[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,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$',  //   'i',  // ),  hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i};var types = {  integer: function integer(value) {    return types.number(value) && parseInt(value, 10) === value;  },  "float": function float(value) {    return types.number(value) && !types.integer(value);  },  array: function array(value) {    return Array.isArray(value);  },  regexp: function regexp(value) {    if (value instanceof RegExp) {      return true;    }    try {      return !!new RegExp(value);    } catch (e) {      return false;    }  },  date: function date(value) {    return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function' && !isNaN(value.getTime());  },  number: function number(value) {    if (isNaN(value)) {      return false;    }    return typeof value === 'number';  },  object: function object(value) {    return typeof value === 'object' && !types.array(value);  },  method: function method(value) {    return typeof value === 'function';  },  email: function email(value) {    return typeof value === 'string' && value.length <= 320 && !!value.match(pattern$2.email);  },  url: function url(value) {    return typeof value === 'string' && value.length <= 2048 && !!value.match(getUrlRegex());  },  hex: function hex(value) {    return typeof value === 'string' && !!value.match(pattern$2.hex);  }};var type$1 = function type(rule, value, source, errors, options) {  if (rule.required && value === undefined) {    required$1(rule, value, source, errors, options);    return;  }  var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];  var ruleType = rule.type;  if (custom.indexOf(ruleType) > -1) {    if (!types[ruleType](value)) {      errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));    } // straight typeof check  } else if (ruleType && typeof value !== rule.type) {    errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));  }};var range = function range(rule, value, source, errors, options) {  var len = typeof rule.len === 'number';  var min = typeof rule.min === 'number';  var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)  var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;  var val = value;  var key = null;  var num = typeof value === 'number';  var str = typeof value === 'string';  var arr = Array.isArray(value);  if (num) {    key = 'number';  } else if (str) {    key = 'string';  } else if (arr) {    key = 'array';  } // if the value is not of a supported type for range validation  // the validation rule rule should use the  // type property to also test for a particular type  if (!key) {    return false;  }  if (arr) {    val = value.length;  }  if (str) {    // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3    val = value.replace(spRegexp, '_').length;  }  if (len) {    if (val !== rule.len) {      errors.push(format(options.messages[key].len, rule.fullField, rule.len));    }  } else if (min && !max && val < rule.min) {    errors.push(format(options.messages[key].min, rule.fullField, rule.min));  } else if (max && !min && val > rule.max) {    errors.push(format(options.messages[key].max, rule.fullField, rule.max));  } else if (min && max && (val < rule.min || val > rule.max)) {    errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));  }};var ENUM$1 = 'enum';var enumerable$1 = function enumerable(rule, value, source, errors, options) {  rule[ENUM$1] = Array.isArray(rule[ENUM$1]) ? rule[ENUM$1] : [];  if (rule[ENUM$1].indexOf(value) === -1) {    errors.push(format(options.messages[ENUM$1], rule.fullField, rule[ENUM$1].join(', ')));  }};var pattern$1 = function pattern(rule, value, source, errors, options) {  if (rule.pattern) {    if (rule.pattern instanceof RegExp) {      // if a RegExp instance is passed, reset `lastIndex` in case its `global`      // flag is accidentally set to `true`, which in a validation scenario      // is not necessary and the result might be misleading      rule.pattern.lastIndex = 0;      if (!rule.pattern.test(value)) {        errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));      }    } else if (typeof rule.pattern === 'string') {      var _pattern = new RegExp(rule.pattern);      if (!_pattern.test(value)) {        errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));      }    }  }};var rules = {  required: required$1,  whitespace: whitespace,  type: type$1,  range: range,  "enum": enumerable$1,  pattern: pattern$1};var string = function string(rule, value, callback, source, options) {  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if (isEmptyValue(value, 'string') && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options, 'string');    if (!isEmptyValue(value, 'string')) {      rules.type(rule, value, source, errors, options);      rules.range(rule, value, source, errors, options);      rules.pattern(rule, value, source, errors, options);      if (rule.whitespace === true) {        rules.whitespace(rule, value, source, errors, options);      }    }  }  callback(errors);};var method = function method(rule, value, callback, source, options) {  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if (isEmptyValue(value) && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options);    if (value !== undefined) {      rules.type(rule, value, source, errors, options);    }  }  callback(errors);};var number = function number(rule, value, callback, source, options) {  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if (value === '') {      value = undefined;    }    if (isEmptyValue(value) && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options);    if (value !== undefined) {      rules.type(rule, value, source, errors, options);      rules.range(rule, value, source, errors, options);    }  }  callback(errors);};var _boolean = function _boolean(rule, value, callback, source, options) {  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if (isEmptyValue(value) && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options);    if (value !== undefined) {      rules.type(rule, value, source, errors, options);    }  }  callback(errors);};var regexp = function regexp(rule, value, callback, source, options) {  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if (isEmptyValue(value) && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options);    if (!isEmptyValue(value)) {      rules.type(rule, value, source, errors, options);    }  }  callback(errors);};var integer = function integer(rule, value, callback, source, options) {  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if (isEmptyValue(value) && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options);    if (value !== undefined) {      rules.type(rule, value, source, errors, options);      rules.range(rule, value, source, errors, options);    }  }  callback(errors);};var floatFn = function floatFn(rule, value, callback, source, options) {  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if (isEmptyValue(value) && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options);    if (value !== undefined) {      rules.type(rule, value, source, errors, options);      rules.range(rule, value, source, errors, options);    }  }  callback(errors);};var array = function array(rule, value, callback, source, options) {  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if ((value === undefined || value === null) && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options, 'array');    if (value !== undefined && value !== null) {      rules.type(rule, value, source, errors, options);      rules.range(rule, value, source, errors, options);    }  }  callback(errors);};var object = function object(rule, value, callback, source, options) {  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if (isEmptyValue(value) && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options);    if (value !== undefined) {      rules.type(rule, value, source, errors, options);    }  }  callback(errors);};var ENUM = 'enum';var enumerable = function enumerable(rule, value, callback, source, options) {  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if (isEmptyValue(value) && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options);    if (value !== undefined) {      rules[ENUM](rule, value, source, errors, options);    }  }  callback(errors);};var pattern = function pattern(rule, value, callback, source, options) {  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if (isEmptyValue(value, 'string') && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options);    if (!isEmptyValue(value, 'string')) {      rules.pattern(rule, value, source, errors, options);    }  }  callback(errors);};var date = function date(rule, value, callback, source, options) {  // console.log('integer rule called %j', rule);  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); // console.log('validate on %s value', value);  if (validate) {    if (isEmptyValue(value, 'date') && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options);    if (!isEmptyValue(value, 'date')) {      var dateObject;      if (value instanceof Date) {        dateObject = value;      } else {        dateObject = new Date(value);      }      rules.type(rule, dateObject, source, errors, options);      if (dateObject) {        rules.range(rule, dateObject.getTime(), source, errors, options);      }    }  }  callback(errors);};var required = function required(rule, value, callback, source, options) {  var errors = [];  var type = Array.isArray(value) ? 'array' : typeof value;  rules.required(rule, value, source, errors, options, type);  callback(errors);};var type = function type(rule, value, callback, source, options) {  var ruleType = rule.type;  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if (isEmptyValue(value, ruleType) && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options, ruleType);    if (!isEmptyValue(value, ruleType)) {      rules.type(rule, value, source, errors, options);    }  }  callback(errors);};var any = function any(rule, value, callback, source, options) {  var errors = [];  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);  if (validate) {    if (isEmptyValue(value) && !rule.required) {      return callback();    }    rules.required(rule, value, source, errors, options);  }  callback(errors);};var 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 clone() {      var cloned = JSON.parse(JSON.stringify(this));      cloned.clone = this.clone;      return cloned;    }  };}var messages = newMessages();/** *  Encapsulates a validation schema. * *  @param descriptor An object declaring validation rules *  for this schema. */var Schema = /*#__PURE__*/function () {  // ========================= Static =========================  // ======================== Instance ========================  function Schema(descriptor) {    this.rules = null;    this._messages = messages;    this.define(descriptor);  }  var _proto = Schema.prototype;  _proto.define = function define(rules) {    var _this = this;    if (!rules) {      throw new Error('Cannot configure a schema with no rules');    }    if (typeof rules !== 'object' || Array.isArray(rules)) {      throw new Error('Rules must be an object');    }    this.rules = {};    Object.keys(rules).forEach(function (name) {      var item = rules[name];      _this.rules[name] = Array.isArray(item) ? item : [item];    });  };  _proto.messages = function messages(_messages) {    if (_messages) {      this._messages = deepMerge(newMessages(), _messages);    }    return this._messages;  };  _proto.validate = function validate(source_, o, oc) {    var _this2 = this;    if (o === void 0) {      o = {};    }    if (oc === void 0) {      oc = function oc() {};    }    var source = source_;    var options = o;    var callback = oc;    if (typeof options === 'function') {      callback = options;      options = {};    }    if (!this.rules || Object.keys(this.rules).length === 0) {      if (callback) {        callback(null, source);      }      return Promise.resolve(source);    }    function complete(results) {      var errors = [];      var fields = {};      function add(e) {        if (Array.isArray(e)) {          var _errors;          errors = (_errors = errors).concat.apply(_errors, e);        } else {          errors.push(e);        }      }      for (var i = 0; i < results.length; i++) {        add(results[i]);      }      if (!errors.length) {        callback(null, source);      } else {        fields = convertFieldsError(errors);        callback(errors, fields);      }    }    if (options.messages) {      var messages$1 = this.messages();      if (messages$1 === messages) {        messages$1 = newMessages();      }      deepMerge(messages$1, options.messages);      options.messages = messages$1;    } else {      options.messages = this.messages();    }    var series = {};    var keys = options.keys || Object.keys(this.rules);    keys.forEach(function (z) {      var arr = _this2.rules[z];      var value = source[z];      arr.forEach(function (r) {        var rule = r;        if (typeof rule.transform === 'function') {          if (source === source_) {            source = _extends({}, source);          }          value = source[z] = rule.transform(value);        }        if (typeof rule === 'function') {          rule = {            validator: rule          };        } else {          rule = _extends({}, rule);        } // Fill validator. Skip if nothing need to validate        rule.validator = _this2.getValidationMethod(rule);        if (!rule.validator) {          return;        }        rule.field = z;        rule.fullField = rule.fullField || z;        rule.type = _this2.getType(rule);        series[z] = series[z] || [];        series[z].push({          rule: rule,          value: value,          source: source,          field: z        });      });    });    var errorFields = {};    return asyncMap(series, options, function (data, doIt) {      var rule = data.rule;      var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField === 'object');      deep = deep && (rule.required || !rule.required && data.value);      rule.field = data.field;      function addFullField(key, schema) {        return _extends({}, schema, {          fullField: rule.fullField + "." + key,          fullFields: rule.fullFields ? [].concat(rule.fullFields, [key]) : [key]        });      }      function cb(e) {        if (e === void 0) {          e = [];        }        var errorList = Array.isArray(e) ? e : [e];        if (!options.suppressWarning && errorList.length) {          Schema.warning('async-validator:', errorList);        }        if (errorList.length && rule.message !== undefined) {          errorList = [].concat(rule.message);        } // Fill error info        var filledErrors = errorList.map(complementError(rule, source));        if (options.first && filledErrors.length) {          errorFields[rule.field] = 1;          return doIt(filledErrors);        }        if (!deep) {          doIt(filledErrors);        } else {          // if rule is required but the target object          // does not exist fail at the rule level and don't          // go deeper          if (rule.required && !data.value) {            if (rule.message !== undefined) {              filledErrors = [].concat(rule.message).map(complementError(rule, source));            } else if (options.error) {              filledErrors = [options.error(rule, format(options.messages.required, rule.field))];            }            return doIt(filledErrors);          }          var fieldsSchema = {};          if (rule.defaultField) {            Object.keys(data.value).map(function (key) {              fieldsSchema[key] = rule.defaultField;            });          }          fieldsSchema = _extends({}, fieldsSchema, data.rule.fields);          var paredFieldsSchema = {};          Object.keys(fieldsSchema).forEach(function (field) {            var fieldSchema = fieldsSchema[field];            var fieldSchemaList = Array.isArray(fieldSchema) ? fieldSchema : [fieldSchema];            paredFieldsSchema[field] = fieldSchemaList.map(addFullField.bind(null, field));          });          var schema = new Schema(paredFieldsSchema);          schema.messages(options.messages);          if (data.rule.options) {            data.rule.options.messages = options.messages;            data.rule.options.error = options.error;          }          schema.validate(data.value, data.rule.options || options, function (errs) {            var finalErrors = [];            if (filledErrors && filledErrors.length) {              finalErrors.push.apply(finalErrors, filledErrors);            }            if (errs && errs.length) {              finalErrors.push.apply(finalErrors, errs);            }            doIt(finalErrors.length ? finalErrors : null);          });        }      }      var res;      if (rule.asyncValidator) {        res = rule.asyncValidator(rule, data.value, cb, data.source, options);      } else if (rule.validator) {        try {          res = rule.validator(rule, data.value, cb, data.source, options);        } catch (error) {          console.error == null ? void 0 : console.error(error); // rethrow to report error          if (!options.suppressValidatorError) {            setTimeout(function () {              throw error;            }, 0);          }          cb(error.message);        }        if (res === true) {          cb();        } else if (res === false) {          cb(typeof rule.message === 'function' ? rule.message(rule.fullField || rule.field) : rule.message || (rule.fullField || rule.field) + " fails");        } else if (res instanceof Array) {          cb(res);        } else if (res instanceof Error) {          cb(res.message);        }      }      if (res && res.then) {        res.then(function () {          return cb();        }, function (e) {          return cb(e);        });      }    }, function (results) {      complete(results);    }, source);  };  _proto.getType = function getType(rule) {    if (rule.type === undefined && rule.pattern instanceof RegExp) {      rule.type = 'pattern';    }    if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {      throw new Error(format('Unknown rule type %s', rule.type));    }    return rule.type || 'string';  };  _proto.getValidationMethod = function getValidationMethod(rule) {    if (typeof rule.validator === 'function') {      return rule.validator;    }    var keys = Object.keys(rule);    var messageIndex = keys.indexOf('message');    if (messageIndex !== -1) {      keys.splice(messageIndex, 1);    }    if (keys.length === 1 && keys[0] === 'required') {      return validators.required;    }    return validators[this.getType(rule)] || undefined;  };  return Schema;}();Schema.register = function register(type, validator) {  if (typeof validator !== 'function') {    throw new Error('Cannot register a validator by type, validator is not a function');  }  validators[type] = validator;};Schema.warning = warning;Schema.messages = messages;Schema.validators = validators;export { Schema as default };//# sourceMappingURL=index.js.map
 |