9d9a2bc713724ee74228a29bb1203592.json 115 KB
{"ast":null,"code":"function _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction _construct(Parent, args, Class) {\n  if (_isNativeReflectConstruct()) {\n    _construct = Reflect.construct;\n  } else {\n    _construct = function _construct(Parent, args, Class) {\n      var a = [null];\n      a.push.apply(a, args);\n      var Constructor = Function.bind.apply(Parent, a);\n      var instance = new Constructor();\n      if (Class) _setPrototypeOf(instance, Class.prototype);\n      return instance;\n    };\n  }\n\n  return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n  return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n  var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n  _wrapNativeSuper = function _wrapNativeSuper(Class) {\n    if (Class === null || !_isNativeFunction(Class)) return Class;\n\n    if (typeof Class !== \"function\") {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n\n    if (typeof _cache !== \"undefined\") {\n      if (_cache.has(Class)) return _cache.get(Class);\n\n      _cache.set(Class, Wrapper);\n    }\n\n    function Wrapper() {\n      return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n    }\n\n    Wrapper.prototype = Object.create(Class.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    return _setPrototypeOf(Wrapper, Class);\n  };\n\n  return _wrapNativeSuper(Class);\n}\n/* eslint no-console:0 */\n\n\nvar formatRegExp = /%[sdj%]/g;\n\nvar warning = function warning() {}; // don't print warning message when in production env or node runtime\n\n\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {\n  warning = function warning(type, errors) {\n    if (typeof console !== 'undefined' && console.warn) {\n      if (errors.every(function (e) {\n        return typeof e === 'string';\n      })) {\n        console.warn(type, errors);\n      }\n    }\n  };\n}\n\nfunction convertFieldsError(errors) {\n  if (!errors || !errors.length) return null;\n  var fields = {};\n  errors.forEach(function (error) {\n    var field = error.field;\n    fields[field] = fields[field] || [];\n    fields[field].push(error);\n  });\n  return fields;\n}\n\nfunction format() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  var i = 1;\n  var f = args[0];\n  var len = args.length;\n\n  if (typeof f === 'function') {\n    return f.apply(null, args.slice(1));\n  }\n\n  if (typeof f === 'string') {\n    var str = String(f).replace(formatRegExp, function (x) {\n      if (x === '%%') {\n        return '%';\n      }\n\n      if (i >= len) {\n        return x;\n      }\n\n      switch (x) {\n        case '%s':\n          return String(args[i++]);\n\n        case '%d':\n          return Number(args[i++]);\n\n        case '%j':\n          try {\n            return JSON.stringify(args[i++]);\n          } catch (_) {\n            return '[Circular]';\n          }\n\n          break;\n\n        default:\n          return x;\n      }\n    });\n    return str;\n  }\n\n  return f;\n}\n\nfunction isNativeStringType(type) {\n  return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'date' || type === 'pattern';\n}\n\nfunction isEmptyValue(value, type) {\n  if (value === undefined || value === null) {\n    return true;\n  }\n\n  if (type === 'array' && Array.isArray(value) && !value.length) {\n    return true;\n  }\n\n  if (isNativeStringType(type) && typeof value === 'string' && !value) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n  var results = [];\n  var total = 0;\n  var arrLength = arr.length;\n\n  function count(errors) {\n    results.push.apply(results, errors);\n    total++;\n\n    if (total === arrLength) {\n      callback(results);\n    }\n  }\n\n  arr.forEach(function (a) {\n    func(a, count);\n  });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n  var index = 0;\n  var arrLength = arr.length;\n\n  function next(errors) {\n    if (errors && errors.length) {\n      callback(errors);\n      return;\n    }\n\n    var original = index;\n    index = index + 1;\n\n    if (original < arrLength) {\n      func(arr[original], next);\n    } else {\n      callback([]);\n    }\n  }\n\n  next([]);\n}\n\nfunction flattenObjArr(objArr) {\n  var ret = [];\n  Object.keys(objArr).forEach(function (k) {\n    ret.push.apply(ret, objArr[k]);\n  });\n  return ret;\n}\n\nvar AsyncValidationError = /*#__PURE__*/function (_Error) {\n  _inheritsLoose(AsyncValidationError, _Error);\n\n  function AsyncValidationError(errors, fields) {\n    var _this;\n\n    _this = _Error.call(this, 'Async Validation Error') || this;\n    _this.errors = errors;\n    _this.fields = fields;\n    return _this;\n  }\n\n  return AsyncValidationError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nfunction asyncMap(objArr, option, func, callback) {\n  if (option.first) {\n    var _pending = new Promise(function (resolve, reject) {\n      var next = function next(errors) {\n        callback(errors);\n        return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve();\n      };\n\n      var flattenArr = flattenObjArr(objArr);\n      asyncSerialArray(flattenArr, func, next);\n    });\n\n    _pending[\"catch\"](function (e) {\n      return e;\n    });\n\n    return _pending;\n  }\n\n  var firstFields = option.firstFields || [];\n\n  if (firstFields === true) {\n    firstFields = Object.keys(objArr);\n  }\n\n  var objArrKeys = Object.keys(objArr);\n  var objArrLength = objArrKeys.length;\n  var total = 0;\n  var results = [];\n  var pending = new Promise(function (resolve, reject) {\n    var next = function next(errors) {\n      results.push.apply(results, errors);\n      total++;\n\n      if (total === objArrLength) {\n        callback(results);\n        return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve();\n      }\n    };\n\n    if (!objArrKeys.length) {\n      callback(results);\n      resolve();\n    }\n\n    objArrKeys.forEach(function (key) {\n      var arr = objArr[key];\n\n      if (firstFields.indexOf(key) !== -1) {\n        asyncSerialArray(arr, func, next);\n      } else {\n        asyncParallelArray(arr, func, next);\n      }\n    });\n  });\n  pending[\"catch\"](function (e) {\n    return e;\n  });\n  return pending;\n}\n\nfunction complementError(rule) {\n  return function (oe) {\n    if (oe && oe.message) {\n      oe.field = oe.field || rule.fullField;\n      return oe;\n    }\n\n    return {\n      message: typeof oe === 'function' ? oe() : oe,\n      field: oe.field || rule.fullField\n    };\n  };\n}\n\nfunction deepMerge(target, source) {\n  if (source) {\n    for (var s in source) {\n      if (source.hasOwnProperty(s)) {\n        var value = source[s];\n\n        if (typeof value === 'object' && typeof target[s] === 'object') {\n          target[s] = _extends(_extends({}, target[s]), value);\n        } else {\n          target[s] = value;\n        }\n      }\n    }\n  }\n\n  return target;\n}\n/**\n *  Rule for validating required fields.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction required(rule, value, source, errors, options, type) {\n  if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {\n    errors.push(format(options.messages.required, rule.fullField));\n  }\n}\n/**\n *  Rule for validating whitespace.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction whitespace(rule, value, source, errors, options) {\n  if (/^\\s+$/.test(value) || value === '') {\n    errors.push(format(options.messages.whitespace, rule.fullField));\n  }\n}\n/* eslint max-len:0 */\n\n\nvar pattern = {\n  // http://emailregex.com/\n  email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n  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'),\n  hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i\n};\nvar types = {\n  integer: function integer(value) {\n    return types.number(value) && parseInt(value, 10) === value;\n  },\n  \"float\": function float(value) {\n    return types.number(value) && !types.integer(value);\n  },\n  array: function array(value) {\n    return Array.isArray(value);\n  },\n  regexp: function regexp(value) {\n    if (value instanceof RegExp) {\n      return true;\n    }\n\n    try {\n      return !!new RegExp(value);\n    } catch (e) {\n      return false;\n    }\n  },\n  date: function date(value) {\n    return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function' && !isNaN(value.getTime());\n  },\n  number: function number(value) {\n    if (isNaN(value)) {\n      return false;\n    }\n\n    return typeof value === 'number';\n  },\n  object: function object(value) {\n    return typeof value === 'object' && !types.array(value);\n  },\n  method: function method(value) {\n    return typeof value === 'function';\n  },\n  email: function email(value) {\n    return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;\n  },\n  url: function url(value) {\n    return typeof value === 'string' && !!value.match(pattern.url);\n  },\n  hex: function hex(value) {\n    return typeof value === 'string' && !!value.match(pattern.hex);\n  }\n};\n/**\n *  Rule for validating the type of a value.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction type(rule, value, source, errors, options) {\n  if (rule.required && value === undefined) {\n    required(rule, value, source, errors, options);\n    return;\n  }\n\n  var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];\n  var ruleType = rule.type;\n\n  if (custom.indexOf(ruleType) > -1) {\n    if (!types[ruleType](value)) {\n      errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n    } // straight typeof check\n\n  } else if (ruleType && typeof value !== rule.type) {\n    errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n  }\n}\n/**\n *  Rule for validating minimum and maximum allowed values.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction range(rule, value, source, errors, options) {\n  var len = typeof rule.len === 'number';\n  var min = typeof rule.min === 'number';\n  var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n\n  var spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n  var val = value;\n  var key = null;\n  var num = typeof value === 'number';\n  var str = typeof value === 'string';\n  var arr = Array.isArray(value);\n\n  if (num) {\n    key = 'number';\n  } else if (str) {\n    key = 'string';\n  } else if (arr) {\n    key = 'array';\n  } // if the value is not of a supported type for range validation\n  // the validation rule rule should use the\n  // type property to also test for a particular type\n\n\n  if (!key) {\n    return false;\n  }\n\n  if (arr) {\n    val = value.length;\n  }\n\n  if (str) {\n    // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n    val = value.replace(spRegexp, '_').length;\n  }\n\n  if (len) {\n    if (val !== rule.len) {\n      errors.push(format(options.messages[key].len, rule.fullField, rule.len));\n    }\n  } else if (min && !max && val < rule.min) {\n    errors.push(format(options.messages[key].min, rule.fullField, rule.min));\n  } else if (max && !min && val > rule.max) {\n    errors.push(format(options.messages[key].max, rule.fullField, rule.max));\n  } else if (min && max && (val < rule.min || val > rule.max)) {\n    errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));\n  }\n}\n\nvar ENUM = 'enum';\n/**\n *  Rule for validating a value exists in an enumerable list.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction enumerable(rule, value, source, errors, options) {\n  rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n\n  if (rule[ENUM].indexOf(value) === -1) {\n    errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));\n  }\n}\n/**\n *  Rule for validating a regular expression pattern.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction pattern$1(rule, value, source, errors, options) {\n  if (rule.pattern) {\n    if (rule.pattern instanceof RegExp) {\n      // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n      // flag is accidentally set to `true`, which in a validation scenario\n      // is not necessary and the result might be misleading\n      rule.pattern.lastIndex = 0;\n\n      if (!rule.pattern.test(value)) {\n        errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n      }\n    } else if (typeof rule.pattern === 'string') {\n      var _pattern = new RegExp(rule.pattern);\n\n      if (!_pattern.test(value)) {\n        errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n      }\n    }\n  }\n}\n\nvar rules = {\n  required: required,\n  whitespace: whitespace,\n  type: type,\n  range: range,\n  \"enum\": enumerable,\n  pattern: pattern$1\n};\n/**\n *  Performs validation for string types.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction string(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if (isEmptyValue(value, 'string') && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options, 'string');\n\n    if (!isEmptyValue(value, 'string')) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n      rules.pattern(rule, value, source, errors, options);\n\n      if (rule.whitespace === true) {\n        rules.whitespace(rule, value, source, errors, options);\n      }\n    }\n  }\n\n  callback(errors);\n}\n/**\n *  Validates a function.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction method(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options);\n\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n\n  callback(errors);\n}\n/**\n *  Validates a number.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction number(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if (value === '') {\n      value = undefined;\n    }\n\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options);\n\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n    }\n  }\n\n  callback(errors);\n}\n/**\n *  Validates a boolean.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction _boolean(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options);\n\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n\n  callback(errors);\n}\n/**\n *  Validates the regular expression type.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction regexp(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options);\n\n    if (!isEmptyValue(value)) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n\n  callback(errors);\n}\n/**\n *  Validates a number is an integer.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction integer(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options);\n\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n    }\n  }\n\n  callback(errors);\n}\n/**\n *  Validates a number is a floating point number.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction floatFn(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options);\n\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n    }\n  }\n\n  callback(errors);\n}\n/**\n *  Validates an array.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction array(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if ((value === undefined || value === null) && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options, 'array');\n\n    if (value !== undefined && value !== null) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n    }\n  }\n\n  callback(errors);\n}\n/**\n *  Validates an object.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction object(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options);\n\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n\n  callback(errors);\n}\n\nvar ENUM$1 = 'enum';\n/**\n *  Validates an enumerable list.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\nfunction enumerable$1(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options);\n\n    if (value !== undefined) {\n      rules[ENUM$1](rule, value, source, errors, options);\n    }\n  }\n\n  callback(errors);\n}\n/**\n *  Validates a regular expression pattern.\n *\n *  Performs validation when a rule only contains\n *  a pattern property but is not declared as a string type.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction pattern$2(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if (isEmptyValue(value, 'string') && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options);\n\n    if (!isEmptyValue(value, 'string')) {\n      rules.pattern(rule, value, source, errors, options);\n    }\n  }\n\n  callback(errors);\n}\n\nfunction date(rule, value, callback, source, options) {\n  // console.log('integer rule called %j', rule);\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); // console.log('validate on %s value', value);\n\n  if (validate) {\n    if (isEmptyValue(value, 'date') && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options);\n\n    if (!isEmptyValue(value, 'date')) {\n      var dateObject;\n\n      if (value instanceof Date) {\n        dateObject = value;\n      } else {\n        dateObject = new Date(value);\n      }\n\n      rules.type(rule, dateObject, source, errors, options);\n\n      if (dateObject) {\n        rules.range(rule, dateObject.getTime(), source, errors, options);\n      }\n    }\n  }\n\n  callback(errors);\n}\n\nfunction required$1(rule, value, callback, source, options) {\n  var errors = [];\n  var type = Array.isArray(value) ? 'array' : typeof value;\n  rules.required(rule, value, source, errors, options, type);\n  callback(errors);\n}\n\nfunction type$1(rule, value, callback, source, options) {\n  var ruleType = rule.type;\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if (isEmptyValue(value, ruleType) && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options, ruleType);\n\n    if (!isEmptyValue(value, ruleType)) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n\n  callback(errors);\n}\n/**\n *  Performs validation for any type.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\n\n\nfunction any(rule, value, callback, source, options) {\n  var errors = [];\n  var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n\n    rules.required(rule, value, source, errors, options);\n  }\n\n  callback(errors);\n}\n\nvar validators = {\n  string: string,\n  method: method,\n  number: number,\n  \"boolean\": _boolean,\n  regexp: regexp,\n  integer: integer,\n  \"float\": floatFn,\n  array: array,\n  object: object,\n  \"enum\": enumerable$1,\n  pattern: pattern$2,\n  date: date,\n  url: type$1,\n  hex: type$1,\n  email: type$1,\n  required: required$1,\n  any: any\n};\n\nfunction newMessages() {\n  return {\n    \"default\": 'Validation error on field %s',\n    required: '%s is required',\n    \"enum\": '%s must be one of %s',\n    whitespace: '%s cannot be empty',\n    date: {\n      format: '%s date %s is invalid for format %s',\n      parse: '%s date could not be parsed, %s is invalid ',\n      invalid: '%s date %s is invalid'\n    },\n    types: {\n      string: '%s is not a %s',\n      method: '%s is not a %s (function)',\n      array: '%s is not an %s',\n      object: '%s is not an %s',\n      number: '%s is not a %s',\n      date: '%s is not a %s',\n      \"boolean\": '%s is not a %s',\n      integer: '%s is not an %s',\n      \"float\": '%s is not a %s',\n      regexp: '%s is not a valid %s',\n      email: '%s is not a valid %s',\n      url: '%s is not a valid %s',\n      hex: '%s is not a valid %s'\n    },\n    string: {\n      len: '%s must be exactly %s characters',\n      min: '%s must be at least %s characters',\n      max: '%s cannot be longer than %s characters',\n      range: '%s must be between %s and %s characters'\n    },\n    number: {\n      len: '%s must equal %s',\n      min: '%s cannot be less than %s',\n      max: '%s cannot be greater than %s',\n      range: '%s must be between %s and %s'\n    },\n    array: {\n      len: '%s must be exactly %s in length',\n      min: '%s cannot be less than %s in length',\n      max: '%s cannot be greater than %s in length',\n      range: '%s must be between %s and %s in length'\n    },\n    pattern: {\n      mismatch: '%s value %s does not match pattern %s'\n    },\n    clone: function clone() {\n      var cloned = JSON.parse(JSON.stringify(this));\n      cloned.clone = this.clone;\n      return cloned;\n    }\n  };\n}\n\nvar messages = newMessages();\n/**\n *  Encapsulates a validation schema.\n *\n *  @param descriptor An object declaring validation rules\n *  for this schema.\n */\n\nfunction Schema(descriptor) {\n  this.rules = null;\n  this._messages = messages;\n  this.define(descriptor);\n}\n\nSchema.prototype = {\n  messages: function messages(_messages) {\n    if (_messages) {\n      this._messages = deepMerge(newMessages(), _messages);\n    }\n\n    return this._messages;\n  },\n  define: function define(rules) {\n    if (!rules) {\n      throw new Error('Cannot configure a schema with no rules');\n    }\n\n    if (typeof rules !== 'object' || Array.isArray(rules)) {\n      throw new Error('Rules must be an object');\n    }\n\n    this.rules = {};\n    var z;\n    var item;\n\n    for (z in rules) {\n      if (rules.hasOwnProperty(z)) {\n        item = rules[z];\n        this.rules[z] = Array.isArray(item) ? item : [item];\n      }\n    }\n  },\n  validate: function validate(source_, o, oc) {\n    var _this = this;\n\n    if (o === void 0) {\n      o = {};\n    }\n\n    if (oc === void 0) {\n      oc = function oc() {};\n    }\n\n    var source = source_;\n    var options = o;\n    var callback = oc;\n\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n\n    if (!this.rules || Object.keys(this.rules).length === 0) {\n      if (callback) {\n        callback();\n      }\n\n      return Promise.resolve();\n    }\n\n    function complete(results) {\n      var i;\n      var errors = [];\n      var fields = {};\n\n      function add(e) {\n        if (Array.isArray(e)) {\n          var _errors;\n\n          errors = (_errors = errors).concat.apply(_errors, e);\n        } else {\n          errors.push(e);\n        }\n      }\n\n      for (i = 0; i < results.length; i++) {\n        add(results[i]);\n      }\n\n      if (!errors.length) {\n        errors = null;\n        fields = null;\n      } else {\n        fields = convertFieldsError(errors);\n      }\n\n      callback(errors, fields);\n    }\n\n    if (options.messages) {\n      var messages$1 = this.messages();\n\n      if (messages$1 === messages) {\n        messages$1 = newMessages();\n      }\n\n      deepMerge(messages$1, options.messages);\n      options.messages = messages$1;\n    } else {\n      options.messages = this.messages();\n    }\n\n    var arr;\n    var value;\n    var series = {};\n    var keys = options.keys || Object.keys(this.rules);\n    keys.forEach(function (z) {\n      arr = _this.rules[z];\n      value = source[z];\n      arr.forEach(function (r) {\n        var rule = r;\n\n        if (typeof rule.transform === 'function') {\n          if (source === source_) {\n            source = _extends({}, source);\n          }\n\n          value = source[z] = rule.transform(value);\n        }\n\n        if (typeof rule === 'function') {\n          rule = {\n            validator: rule\n          };\n        } else {\n          rule = _extends({}, rule);\n        }\n\n        rule.validator = _this.getValidationMethod(rule);\n        rule.field = z;\n        rule.fullField = rule.fullField || z;\n        rule.type = _this.getType(rule);\n\n        if (!rule.validator) {\n          return;\n        }\n\n        series[z] = series[z] || [];\n        series[z].push({\n          rule: rule,\n          value: value,\n          source: source,\n          field: z\n        });\n      });\n    });\n    var errorFields = {};\n    return asyncMap(series, options, function (data, doIt) {\n      var rule = data.rule;\n      var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField === 'object');\n      deep = deep && (rule.required || !rule.required && data.value);\n      rule.field = data.field;\n\n      function addFullfield(key, schema) {\n        return _extends(_extends({}, schema), {}, {\n          fullField: rule.fullField + \".\" + key\n        });\n      }\n\n      function cb(e) {\n        if (e === void 0) {\n          e = [];\n        }\n\n        var errors = e;\n\n        if (!Array.isArray(errors)) {\n          errors = [errors];\n        }\n\n        if (!options.suppressWarning && errors.length) {\n          Schema.warning('async-validator:', errors);\n        }\n\n        if (errors.length && rule.message !== undefined) {\n          errors = [].concat(rule.message);\n        }\n\n        errors = errors.map(complementError(rule));\n\n        if (options.first && errors.length) {\n          errorFields[rule.field] = 1;\n          return doIt(errors);\n        }\n\n        if (!deep) {\n          doIt(errors);\n        } else {\n          // if rule is required but the target object\n          // does not exist fail at the rule level and don't\n          // go deeper\n          if (rule.required && !data.value) {\n            if (rule.message !== undefined) {\n              errors = [].concat(rule.message).map(complementError(rule));\n            } else if (options.error) {\n              errors = [options.error(rule, format(options.messages.required, rule.field))];\n            }\n\n            return doIt(errors);\n          }\n\n          var fieldsSchema = {};\n\n          if (rule.defaultField) {\n            for (var k in data.value) {\n              if (data.value.hasOwnProperty(k)) {\n                fieldsSchema[k] = rule.defaultField;\n              }\n            }\n          }\n\n          fieldsSchema = _extends(_extends({}, fieldsSchema), data.rule.fields);\n\n          for (var f in fieldsSchema) {\n            if (fieldsSchema.hasOwnProperty(f)) {\n              var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]];\n              fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));\n            }\n          }\n\n          var schema = new Schema(fieldsSchema);\n          schema.messages(options.messages);\n\n          if (data.rule.options) {\n            data.rule.options.messages = options.messages;\n            data.rule.options.error = options.error;\n          }\n\n          schema.validate(data.value, data.rule.options || options, function (errs) {\n            var finalErrors = [];\n\n            if (errors && errors.length) {\n              finalErrors.push.apply(finalErrors, errors);\n            }\n\n            if (errs && errs.length) {\n              finalErrors.push.apply(finalErrors, errs);\n            }\n\n            doIt(finalErrors.length ? finalErrors : null);\n          });\n        }\n      }\n\n      var res;\n\n      if (rule.asyncValidator) {\n        res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n      } else if (rule.validator) {\n        res = rule.validator(rule, data.value, cb, data.source, options);\n\n        if (res === true) {\n          cb();\n        } else if (res === false) {\n          cb(rule.message || rule.field + \" fails\");\n        } else if (res instanceof Array) {\n          cb(res);\n        } else if (res instanceof Error) {\n          cb(res.message);\n        }\n      }\n\n      if (res && res.then) {\n        res.then(function () {\n          return cb();\n        }, function (e) {\n          return cb(e);\n        });\n      }\n    }, function (results) {\n      complete(results);\n    });\n  },\n  getType: function getType(rule) {\n    if (rule.type === undefined && rule.pattern instanceof RegExp) {\n      rule.type = 'pattern';\n    }\n\n    if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {\n      throw new Error(format('Unknown rule type %s', rule.type));\n    }\n\n    return rule.type || 'string';\n  },\n  getValidationMethod: function getValidationMethod(rule) {\n    if (typeof rule.validator === 'function') {\n      return rule.validator;\n    }\n\n    var keys = Object.keys(rule);\n    var messageIndex = keys.indexOf('message');\n\n    if (messageIndex !== -1) {\n      keys.splice(messageIndex, 1);\n    }\n\n    if (keys.length === 1 && keys[0] === 'required') {\n      return validators.required;\n    }\n\n    return validators[this.getType(rule)] || false;\n  }\n};\n\nSchema.register = function register(type, validator) {\n  if (typeof validator !== 'function') {\n    throw new Error('Cannot register a validator by type, validator is not a function');\n  }\n\n  validators[type] = validator;\n};\n\nSchema.warning = warning;\nSchema.messages = messages;\nSchema.validators = validators;\nexport default Schema;","map":{"version":3,"sources":["../../src/util.js","../../src/rule/required.js","../../src/rule/whitespace.js","../../src/rule/type.js","../../src/rule/range.js","../../src/rule/enum.js","../../src/rule/pattern.js","../../src/rule/index.js","../../src/validator/string.js","../../src/validator/method.js","../../src/validator/number.js","../../src/validator/boolean.js","../../src/validator/regexp.js","../../src/validator/integer.js","../../src/validator/float.js","../../src/validator/array.js","../../src/validator/object.js","../../src/validator/enum.js","../../src/validator/pattern.js","../../src/validator/date.js","../../src/validator/required.js","../../src/validator/type.js","../../src/validator/any.js","../../src/validator/index.js","../../src/messages.js","../../src/index.js"],"names":["formatRegExp","warning","process","console","errors","fields","field","error","args","i","f","len","str","x","String","Number","JSON","type","value","Array","isNativeStringType","results","total","arrLength","arr","callback","func","index","original","next","ret","Object","objArr","AsyncValidationError","option","pending","reject","convertFieldsError","resolve","flattenArr","flattenObjArr","asyncSerialArray","firstFields","objArrKeys","objArrLength","asyncParallelArray","oe","rule","message","fullField","source","target","util","options","pattern","email","url","hex","types","integer","parseInt","array","regexp","date","isNaN","number","object","method","required","custom","ruleType","min","max","spRegexp","val","key","num","ENUM","_pattern","whitespace","range","validate","isEmptyValue","rules","dateObject","string","any","format","parse","invalid","mismatch","clone","cloned","messages","newMessages","Schema","deepMerge","define","item","o","oc","Promise","add","series","keys","validator","z","errorFields","asyncMap","data","deep","e","complementError","doIt","fieldsSchema","fieldSchema","addFullfield","schema","finalErrors","errs","res","cb","complete","getType","validators","getValidationMethod","messageIndex"],"mappings":"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","sourcesContent":["/* eslint no-console:0 */\n\nconst formatRegExp = /%[sdj%]/g;\n\nexport let warning = () => {};\n\n// don't print warning message when in production env or node runtime\nif (\n  typeof process !== 'undefined' &&\n  process.env &&\n  process.env.NODE_ENV !== 'production' &&\n  typeof window !== 'undefined' &&\n  typeof document !== 'undefined'\n) {\n  warning = (type, errors) => {\n    if (typeof console !== 'undefined' && console.warn) {\n      if (errors.every(e => typeof e === 'string')) {\n        console.warn(type, errors);\n      }\n    }\n  };\n}\n\nexport function convertFieldsError(errors) {\n  if (!errors || !errors.length) return null;\n  const fields = {};\n  errors.forEach(error => {\n    const field = error.field;\n    fields[field] = fields[field] || [];\n    fields[field].push(error);\n  });\n  return fields;\n}\n\nexport function format(...args) {\n  let i = 1;\n  const f = args[0];\n  const len = args.length;\n  if (typeof f === 'function') {\n    return f.apply(null, args.slice(1));\n  }\n  if (typeof f === 'string') {\n    let str = String(f).replace(formatRegExp, x => {\n      if (x === '%%') {\n        return '%';\n      }\n      if (i >= len) {\n        return x;\n      }\n      switch (x) {\n        case '%s':\n          return String(args[i++]);\n        case '%d':\n          return Number(args[i++]);\n        case '%j':\n          try {\n            return JSON.stringify(args[i++]);\n          } catch (_) {\n            return '[Circular]';\n          }\n          break;\n        default:\n          return x;\n      }\n    });\n    return str;\n  }\n  return f;\n}\n\nfunction isNativeStringType(type) {\n  return (\n    type === 'string' ||\n    type === 'url' ||\n    type === 'hex' ||\n    type === 'email' ||\n    type === 'date' ||\n    type === 'pattern'\n  );\n}\n\nexport function isEmptyValue(value, type) {\n  if (value === undefined || value === null) {\n    return true;\n  }\n  if (type === 'array' && Array.isArray(value) && !value.length) {\n    return true;\n  }\n  if (isNativeStringType(type) && typeof value === 'string' && !value) {\n    return true;\n  }\n  return false;\n}\n\nexport function isEmptyObject(obj) {\n  return Object.keys(obj).length === 0;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n  const results = [];\n  let total = 0;\n  const arrLength = arr.length;\n\n  function count(errors) {\n    results.push.apply(results, errors);\n    total++;\n    if (total === arrLength) {\n      callback(results);\n    }\n  }\n\n  arr.forEach(a => {\n    func(a, count);\n  });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n  let index = 0;\n  const arrLength = arr.length;\n\n  function next(errors) {\n    if (errors && errors.length) {\n      callback(errors);\n      return;\n    }\n    const original = index;\n    index = index + 1;\n    if (original < arrLength) {\n      func(arr[original], next);\n    } else {\n      callback([]);\n    }\n  }\n\n  next([]);\n}\n\nfunction flattenObjArr(objArr) {\n  const ret = [];\n  Object.keys(objArr).forEach(k => {\n    ret.push.apply(ret, objArr[k]);\n  });\n  return ret;\n}\n\nexport class AsyncValidationError extends Error {\n  constructor(errors, fields) {\n    super('Async Validation Error');\n    this.errors = errors;\n    this.fields = fields;\n  }\n}\n\nexport function asyncMap(objArr, option, func, callback) {\n  if (option.first) {\n    const pending = new Promise((resolve, reject) => {\n      const next = errors => {\n        callback(errors);\n        return errors.length\n          ? reject(new AsyncValidationError(errors, convertFieldsError(errors)))\n          : resolve();\n      };\n      const flattenArr = flattenObjArr(objArr);\n      asyncSerialArray(flattenArr, func, next);\n    });\n    pending.catch(e => e);\n    return pending;\n  }\n  let firstFields = option.firstFields || [];\n  if (firstFields === true) {\n    firstFields = Object.keys(objArr);\n  }\n  const objArrKeys = Object.keys(objArr);\n  const objArrLength = objArrKeys.length;\n  let total = 0;\n  const results = [];\n  const pending = new Promise((resolve, reject) => {\n    const next = errors => {\n      results.push.apply(results, errors);\n      total++;\n      if (total === objArrLength) {\n        callback(results);\n        return results.length\n          ? reject(\n              new AsyncValidationError(results, convertFieldsError(results)),\n            )\n          : resolve();\n      }\n    };\n    if (!objArrKeys.length) {\n      callback(results);\n      resolve();\n    }\n    objArrKeys.forEach(key => {\n      const arr = objArr[key];\n      if (firstFields.indexOf(key) !== -1) {\n        asyncSerialArray(arr, func, next);\n      } else {\n        asyncParallelArray(arr, func, next);\n      }\n    });\n  });\n  pending.catch(e => e);\n  return pending;\n}\n\nexport function complementError(rule) {\n  return oe => {\n    if (oe && oe.message) {\n      oe.field = oe.field || rule.fullField;\n      return oe;\n    }\n    return {\n      message: typeof oe === 'function' ? oe() : oe,\n      field: oe.field || rule.fullField,\n    };\n  };\n}\n\nexport function deepMerge(target, source) {\n  if (source) {\n    for (const s in source) {\n      if (source.hasOwnProperty(s)) {\n        const value = source[s];\n        if (typeof value === 'object' && typeof target[s] === 'object') {\n          target[s] = {\n            ...target[s],\n            ...value,\n          };\n        } else {\n          target[s] = value;\n        }\n      }\n    }\n  }\n  return target;\n}\n","import * as util from '../util';\n\n/**\n *  Rule for validating required fields.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction required(rule, value, source, errors, options, type) {\n  if (\n    rule.required &&\n    (!source.hasOwnProperty(rule.field) ||\n      util.isEmptyValue(value, type || rule.type))\n  ) {\n    errors.push(util.format(options.messages.required, rule.fullField));\n  }\n}\n\nexport default required;\n","import * as util from '../util';\n\n/**\n *  Rule for validating whitespace.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction whitespace(rule, value, source, errors, options) {\n  if (/^\\s+$/.test(value) || value === '') {\n    errors.push(util.format(options.messages.whitespace, rule.fullField));\n  }\n}\n\nexport default whitespace;\n","import * as util from '../util';\nimport required from './required';\n\n/* eslint max-len:0 */\n\nconst pattern = {\n  // http://emailregex.com/\n  email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n  url: new RegExp(\n    '^(?!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]*)?$',\n    'i',\n  ),\n  hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i,\n};\n\nconst types = {\n  integer(value) {\n    return types.number(value) && parseInt(value, 10) === value;\n  },\n  float(value) {\n    return types.number(value) && !types.integer(value);\n  },\n  array(value) {\n    return Array.isArray(value);\n  },\n  regexp(value) {\n    if (value instanceof RegExp) {\n      return true;\n    }\n    try {\n      return !!new RegExp(value);\n    } catch (e) {\n      return false;\n    }\n  },\n  date(value) {\n    return (\n      typeof value.getTime === 'function' &&\n      typeof value.getMonth === 'function' &&\n      typeof value.getYear === 'function' &&\n      !isNaN(value.getTime())\n    );\n  },\n  number(value) {\n    if (isNaN(value)) {\n      return false;\n    }\n    return typeof value === 'number';\n  },\n  object(value) {\n    return typeof value === 'object' && !types.array(value);\n  },\n  method(value) {\n    return typeof value === 'function';\n  },\n  email(value) {\n    return (\n      typeof value === 'string' &&\n      !!value.match(pattern.email) &&\n      value.length < 255\n    );\n  },\n  url(value) {\n    return typeof value === 'string' && !!value.match(pattern.url);\n  },\n  hex(value) {\n    return typeof value === 'string' && !!value.match(pattern.hex);\n  },\n};\n\n/**\n *  Rule for validating the type of a value.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction type(rule, value, source, errors, options) {\n  if (rule.required && value === undefined) {\n    required(rule, value, source, errors, options);\n    return;\n  }\n  const custom = [\n    'integer',\n    'float',\n    'array',\n    'regexp',\n    'object',\n    'method',\n    'email',\n    'number',\n    'date',\n    'url',\n    'hex',\n  ];\n  const ruleType = rule.type;\n  if (custom.indexOf(ruleType) > -1) {\n    if (!types[ruleType](value)) {\n      errors.push(\n        util.format(\n          options.messages.types[ruleType],\n          rule.fullField,\n          rule.type,\n        ),\n      );\n    }\n    // straight typeof check\n  } else if (ruleType && typeof value !== rule.type) {\n    errors.push(\n      util.format(options.messages.types[ruleType], rule.fullField, rule.type),\n    );\n  }\n}\n\nexport default type;\n","import * as util from '../util';\n\n/**\n *  Rule for validating minimum and maximum allowed values.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction range(rule, value, source, errors, options) {\n  const len = typeof rule.len === 'number';\n  const min = typeof rule.min === 'number';\n  const max = typeof rule.max === 'number';\n  // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n  const spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n  let val = value;\n  let key = null;\n  const num = typeof value === 'number';\n  const str = typeof value === 'string';\n  const arr = Array.isArray(value);\n  if (num) {\n    key = 'number';\n  } else if (str) {\n    key = 'string';\n  } else if (arr) {\n    key = 'array';\n  }\n  // if the value is not of a supported type for range validation\n  // the validation rule rule should use the\n  // type property to also test for a particular type\n  if (!key) {\n    return false;\n  }\n  if (arr) {\n    val = value.length;\n  }\n  if (str) {\n    // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n    val = value.replace(spRegexp, '_').length;\n  }\n  if (len) {\n    if (val !== rule.len) {\n      errors.push(\n        util.format(options.messages[key].len, rule.fullField, rule.len),\n      );\n    }\n  } else if (min && !max && val < rule.min) {\n    errors.push(\n      util.format(options.messages[key].min, rule.fullField, rule.min),\n    );\n  } else if (max && !min && val > rule.max) {\n    errors.push(\n      util.format(options.messages[key].max, rule.fullField, rule.max),\n    );\n  } else if (min && max && (val < rule.min || val > rule.max)) {\n    errors.push(\n      util.format(\n        options.messages[key].range,\n        rule.fullField,\n        rule.min,\n        rule.max,\n      ),\n    );\n  }\n}\n\nexport default range;\n","import * as util from '../util';\n\nconst ENUM = 'enum';\n\n/**\n *  Rule for validating a value exists in an enumerable list.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, source, errors, options) {\n  rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n  if (rule[ENUM].indexOf(value) === -1) {\n    errors.push(\n      util.format(\n        options.messages[ENUM],\n        rule.fullField,\n        rule[ENUM].join(', '),\n      ),\n    );\n  }\n}\n\nexport default enumerable;\n","import * as util from '../util';\n\n/**\n *  Rule for validating a regular expression pattern.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param source The source object being validated.\n *  @param errors An array of errors that this rule may add\n *  validation errors to.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction pattern(rule, value, source, errors, options) {\n  if (rule.pattern) {\n    if (rule.pattern instanceof RegExp) {\n      // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n      // flag is accidentally set to `true`, which in a validation scenario\n      // is not necessary and the result might be misleading\n      rule.pattern.lastIndex = 0;\n      if (!rule.pattern.test(value)) {\n        errors.push(\n          util.format(\n            options.messages.pattern.mismatch,\n            rule.fullField,\n            value,\n            rule.pattern,\n          ),\n        );\n      }\n    } else if (typeof rule.pattern === 'string') {\n      const _pattern = new RegExp(rule.pattern);\n      if (!_pattern.test(value)) {\n        errors.push(\n          util.format(\n            options.messages.pattern.mismatch,\n            rule.fullField,\n            value,\n            rule.pattern,\n          ),\n        );\n      }\n    }\n  }\n}\n\nexport default pattern;\n","import required from './required';\nimport whitespace from './whitespace';\nimport type from './type';\nimport range from './range';\nimport enumRule from './enum';\nimport pattern from './pattern';\n\nexport default {\n  required,\n  whitespace,\n  type,\n  range,\n  enum: enumRule,\n  pattern,\n};\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n *  Performs validation for string types.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction string(rule, value, callback, source, options) {\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if (isEmptyValue(value, 'string') && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options, 'string');\n    if (!isEmptyValue(value, 'string')) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n      rules.pattern(rule, value, source, errors, options);\n      if (rule.whitespace === true) {\n        rules.whitespace(rule, value, source, errors, options);\n      }\n    }\n  }\n  callback(errors);\n}\n\nexport default string;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n *  Validates a function.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction method(rule, value, callback, source, options) {\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\nexport default method;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n *  Validates a number.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction number(rule, value, callback, source, options) {\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if (value === '') {\n      value = undefined;\n    }\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\nexport default number;\n","import { isEmptyValue } from '../util';\nimport rules from '../rule/index.js';\n\n/**\n *  Validates a boolean.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction boolean(rule, value, callback, source, options) {\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\nexport default boolean;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n *  Validates the regular expression type.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction regexp(rule, value, callback, source, options) {\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (!isEmptyValue(value)) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\nexport default regexp;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n *  Validates a number is an integer.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction integer(rule, value, callback, source, options) {\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\nexport default integer;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n *  Validates a number is a floating point number.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction floatFn(rule, value, callback, source, options) {\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\nexport default floatFn;\n","import rules from '../rule/index';\nimport { isEmptyValue } from '../util';\n/**\n *  Validates an array.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction array(rule, value, callback, source, options) {\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if ((value === undefined || value === null) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options, 'array');\n    if (value !== undefined && value !== null) {\n      rules.type(rule, value, source, errors, options);\n      rules.range(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\nexport default array;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n *  Validates an object.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction object(rule, value, callback, source, options) {\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\nexport default object;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nconst ENUM = 'enum';\n\n/**\n *  Validates an enumerable list.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, callback, source, options) {\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (value !== undefined) {\n      rules[ENUM](rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\nexport default enumerable;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n *  Validates a regular expression pattern.\n *\n *  Performs validation when a rule only contains\n *  a pattern property but is not declared as a string type.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction pattern(rule, value, callback, source, options) {\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if (isEmptyValue(value, 'string') && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (!isEmptyValue(value, 'string')) {\n      rules.pattern(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\nexport default pattern;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction date(rule, value, callback, source, options) {\n  // console.log('integer rule called %j', rule);\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  // console.log('validate on %s value', value);\n  if (validate) {\n    if (isEmptyValue(value, 'date') && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n    if (!isEmptyValue(value, 'date')) {\n      let dateObject;\n\n      if (value instanceof Date) {\n        dateObject = value;\n      } else {\n        dateObject = new Date(value);\n      }\n\n      rules.type(rule, dateObject, source, errors, options);\n      if (dateObject) {\n        rules.range(rule, dateObject.getTime(), source, errors, options);\n      }\n    }\n  }\n  callback(errors);\n}\n\nexport default date;\n","import rules from '../rule/index.js';\n\nfunction required(rule, value, callback, source, options) {\n  const errors = [];\n  const type = Array.isArray(value) ? 'array' : typeof value;\n  rules.required(rule, value, source, errors, options, type);\n  callback(errors);\n}\n\nexport default required;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction type(rule, value, callback, source, options) {\n  const ruleType = rule.type;\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if (isEmptyValue(value, ruleType) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options, ruleType);\n    if (!isEmptyValue(value, ruleType)) {\n      rules.type(rule, value, source, errors, options);\n    }\n  }\n  callback(errors);\n}\n\nexport default type;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n *  Performs validation for any type.\n *\n *  @param rule The validation rule.\n *  @param value The value of the field on the source object.\n *  @param callback The callback function.\n *  @param source The source object being validated.\n *  @param options The validation options.\n *  @param options.messages The validation messages.\n */\nfunction any(rule, value, callback, source, options) {\n  const errors = [];\n  const validate =\n    rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n  if (validate) {\n    if (isEmptyValue(value) && !rule.required) {\n      return callback();\n    }\n    rules.required(rule, value, source, errors, options);\n  }\n  callback(errors);\n}\n\nexport default any;\n","import string from './string';\nimport method from './method';\nimport number from './number';\nimport boolean from './boolean';\nimport regexp from './regexp';\nimport integer from './integer';\nimport float from './float';\nimport array from './array';\nimport object from './object';\nimport enumValidator from './enum';\nimport pattern from './pattern';\nimport date from './date';\nimport required from './required';\nimport type from './type';\nimport any from './any';\n\nexport default {\n  string,\n  method,\n  number,\n  boolean,\n  regexp,\n  integer,\n  float,\n  array,\n  object,\n  enum: enumValidator,\n  pattern,\n  date,\n  url: type,\n  hex: type,\n  email: type,\n  required,\n  any,\n};\n","export function newMessages() {\n  return {\n    default: 'Validation error on field %s',\n    required: '%s is required',\n    enum: '%s must be one of %s',\n    whitespace: '%s cannot be empty',\n    date: {\n      format: '%s date %s is invalid for format %s',\n      parse: '%s date could not be parsed, %s is invalid ',\n      invalid: '%s date %s is invalid',\n    },\n    types: {\n      string: '%s is not a %s',\n      method: '%s is not a %s (function)',\n      array: '%s is not an %s',\n      object: '%s is not an %s',\n      number: '%s is not a %s',\n      date: '%s is not a %s',\n      boolean: '%s is not a %s',\n      integer: '%s is not an %s',\n      float: '%s is not a %s',\n      regexp: '%s is not a valid %s',\n      email: '%s is not a valid %s',\n      url: '%s is not a valid %s',\n      hex: '%s is not a valid %s',\n    },\n    string: {\n      len: '%s must be exactly %s characters',\n      min: '%s must be at least %s characters',\n      max: '%s cannot be longer than %s characters',\n      range: '%s must be between %s and %s characters',\n    },\n    number: {\n      len: '%s must equal %s',\n      min: '%s cannot be less than %s',\n      max: '%s cannot be greater than %s',\n      range: '%s must be between %s and %s',\n    },\n    array: {\n      len: '%s must be exactly %s in length',\n      min: '%s cannot be less than %s in length',\n      max: '%s cannot be greater than %s in length',\n      range: '%s must be between %s and %s in length',\n    },\n    pattern: {\n      mismatch: '%s value %s does not match pattern %s',\n    },\n    clone() {\n      const cloned = JSON.parse(JSON.stringify(this));\n      cloned.clone = this.clone;\n      return cloned;\n    },\n  };\n}\n\nexport const messages = newMessages();\n","import {\n  format,\n  complementError,\n  asyncMap,\n  warning,\n  deepMerge,\n  convertFieldsError,\n} from './util';\nimport validators from './validator/index';\nimport { messages as defaultMessages, newMessages } from './messages';\n\n/**\n *  Encapsulates a validation schema.\n *\n *  @param descriptor An object declaring validation rules\n *  for this schema.\n */\nfunction Schema(descriptor) {\n  this.rules = null;\n  this._messages = defaultMessages;\n  this.define(descriptor);\n}\n\nSchema.prototype = {\n  messages(messages) {\n    if (messages) {\n      this._messages = deepMerge(newMessages(), messages);\n    }\n    return this._messages;\n  },\n  define(rules) {\n    if (!rules) {\n      throw new Error('Cannot configure a schema with no rules');\n    }\n    if (typeof rules !== 'object' || Array.isArray(rules)) {\n      throw new Error('Rules must be an object');\n    }\n    this.rules = {};\n    let z;\n    let item;\n    for (z in rules) {\n      if (rules.hasOwnProperty(z)) {\n        item = rules[z];\n        this.rules[z] = Array.isArray(item) ? item : [item];\n      }\n    }\n  },\n  validate(source_, o = {}, oc = () => {}) {\n    let source = source_;\n    let options = o;\n    let callback = oc;\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n    if (!this.rules || Object.keys(this.rules).length === 0) {\n      if (callback) {\n        callback();\n      }\n      return Promise.resolve();\n    }\n\n    function complete(results) {\n      let i;\n      let errors = [];\n      let fields = {};\n\n      function add(e) {\n        if (Array.isArray(e)) {\n          errors = errors.concat(...e);\n        } else {\n          errors.push(e);\n        }\n      }\n\n      for (i = 0; i < results.length; i++) {\n        add(results[i]);\n      }\n      if (!errors.length) {\n        errors = null;\n        fields = null;\n      } else {\n        fields = convertFieldsError(errors);\n      }\n      callback(errors, fields);\n    }\n\n    if (options.messages) {\n      let messages = this.messages();\n      if (messages === defaultMessages) {\n        messages = newMessages();\n      }\n      deepMerge(messages, options.messages);\n      options.messages = messages;\n    } else {\n      options.messages = this.messages();\n    }\n    let arr;\n    let value;\n    const series = {};\n    const keys = options.keys || Object.keys(this.rules);\n    keys.forEach(z => {\n      arr = this.rules[z];\n      value = source[z];\n      arr.forEach(r => {\n        let rule = r;\n        if (typeof rule.transform === 'function') {\n          if (source === source_) {\n            source = { ...source };\n          }\n          value = source[z] = rule.transform(value);\n        }\n        if (typeof rule === 'function') {\n          rule = {\n            validator: rule,\n          };\n        } else {\n          rule = { ...rule };\n        }\n        rule.validator = this.getValidationMethod(rule);\n        rule.field = z;\n        rule.fullField = rule.fullField || z;\n        rule.type = this.getType(rule);\n        if (!rule.validator) {\n          return;\n        }\n        series[z] = series[z] || [];\n        series[z].push({\n          rule,\n          value,\n          source,\n          field: z,\n        });\n      });\n    });\n    const errorFields = {};\n    return asyncMap(\n      series,\n      options,\n      (data, doIt) => {\n        const rule = data.rule;\n        let deep =\n          (rule.type === 'object' || rule.type === 'array') &&\n          (typeof rule.fields === 'object' ||\n            typeof rule.defaultField === 'object');\n        deep = deep && (rule.required || (!rule.required && data.value));\n        rule.field = data.field;\n\n        function addFullfield(key, schema) {\n          return {\n            ...schema,\n            fullField: `${rule.fullField}.${key}`,\n          };\n        }\n\n        function cb(e = []) {\n          let errors = e;\n          if (!Array.isArray(errors)) {\n            errors = [errors];\n          }\n          if (!options.suppressWarning && errors.length) {\n            Schema.warning('async-validator:', errors);\n          }\n          if (errors.length && rule.message !== undefined) {\n            errors = [].concat(rule.message);\n          }\n\n          errors = errors.map(complementError(rule));\n\n          if (options.first && errors.length) {\n            errorFields[rule.field] = 1;\n            return doIt(errors);\n          }\n          if (!deep) {\n            doIt(errors);\n          } else {\n            // if rule is required but the target object\n            // does not exist fail at the rule level and don't\n            // go deeper\n            if (rule.required && !data.value) {\n              if (rule.message !== undefined) {\n                errors = [].concat(rule.message).map(complementError(rule));\n              } else if (options.error) {\n                errors = [\n                  options.error(\n                    rule,\n                    format(options.messages.required, rule.field),\n                  ),\n                ];\n              }\n              return doIt(errors);\n            }\n\n            let fieldsSchema = {};\n            if (rule.defaultField) {\n              for (const k in data.value) {\n                if (data.value.hasOwnProperty(k)) {\n                  fieldsSchema[k] = rule.defaultField;\n                }\n              }\n            }\n            fieldsSchema = {\n              ...fieldsSchema,\n              ...data.rule.fields,\n            };\n            for (const f in fieldsSchema) {\n              if (fieldsSchema.hasOwnProperty(f)) {\n                const fieldSchema = Array.isArray(fieldsSchema[f])\n                  ? fieldsSchema[f]\n                  : [fieldsSchema[f]];\n                fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));\n              }\n            }\n            const schema = new Schema(fieldsSchema);\n            schema.messages(options.messages);\n            if (data.rule.options) {\n              data.rule.options.messages = options.messages;\n              data.rule.options.error = options.error;\n            }\n            schema.validate(data.value, data.rule.options || options, errs => {\n              const finalErrors = [];\n              if (errors && errors.length) {\n                finalErrors.push(...errors);\n              }\n              if (errs && errs.length) {\n                finalErrors.push(...errs);\n              }\n              doIt(finalErrors.length ? finalErrors : null);\n            });\n          }\n        }\n\n        let res;\n        if (rule.asyncValidator) {\n          res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n        } else if (rule.validator) {\n          res = rule.validator(rule, data.value, cb, data.source, options);\n          if (res === true) {\n            cb();\n          } else if (res === false) {\n            cb(rule.message || `${rule.field} fails`);\n          } else if (res instanceof Array) {\n            cb(res);\n          } else if (res instanceof Error) {\n            cb(res.message);\n          }\n        }\n        if (res && res.then) {\n          res.then(\n            () => cb(),\n            e => cb(e),\n          );\n        }\n      },\n      results => {\n        complete(results);\n      },\n    );\n  },\n  getType(rule) {\n    if (rule.type === undefined && rule.pattern instanceof RegExp) {\n      rule.type = 'pattern';\n    }\n    if (\n      typeof rule.validator !== 'function' &&\n      rule.type &&\n      !validators.hasOwnProperty(rule.type)\n    ) {\n      throw new Error(format('Unknown rule type %s', rule.type));\n    }\n    return rule.type || 'string';\n  },\n  getValidationMethod(rule) {\n    if (typeof rule.validator === 'function') {\n      return rule.validator;\n    }\n    const keys = Object.keys(rule);\n    const messageIndex = keys.indexOf('message');\n    if (messageIndex !== -1) {\n      keys.splice(messageIndex, 1);\n    }\n    if (keys.length === 1 && keys[0] === 'required') {\n      return validators.required;\n    }\n    return validators[this.getType(rule)] || false;\n  },\n};\n\nSchema.register = function register(type, validator) {\n  if (typeof validator !== 'function') {\n    throw new Error(\n      'Cannot register a validator by type, validator is not a function',\n    );\n  }\n  validators[type] = validator;\n};\n\nSchema.warning = warning;\n\nSchema.messages = defaultMessages;\n\nSchema.validators = validators;\n\nexport default Schema;\n"]},"metadata":{},"sourceType":"module"}