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"}