import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; import _typeof from "@babel/runtime/helpers/esm/typeof"; import _createClass from "@babel/runtime/helpers/esm/createClass"; import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck"; import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized"; import _inherits from "@babel/runtime/helpers/esm/inherits"; import _createSuper from "@babel/runtime/helpers/esm/createSuper"; import _wrapNativeSuper from "@babel/runtime/helpers/esm/wrapNativeSuper"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; /* eslint no-console:0 */ var formatRegExp = /%[sdj%]/g; export var warning = function warning() {}; // don't print warning message when in production env or node runtime if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') { warning = function warning(type, errors) { if (typeof console !== 'undefined' && console.warn && typeof ASYNC_VALIDATOR_NO_WARNING === 'undefined') { if (errors.every(function (e) { return typeof e === 'string'; })) { console.warn(type, errors); } } }; } export function convertFieldsError(errors) { if (!errors || !errors.length) return null; var fields = {}; errors.forEach(function (error) { var field = error.field; fields[field] = fields[field] || []; fields[field].push(error); }); return fields; } export function format(template) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } var i = 0; var len = args.length; if (typeof template === 'function') { // eslint-disable-next-line prefer-spread return template.apply(null, args); } if (typeof template === 'string') { var str = template.replace(formatRegExp, function (x) { if (x === '%%') { return '%'; } if (i >= len) { return x; } switch (x) { case '%s': return String(args[i++]); case '%d': return Number(args[i++]); case '%j': try { return JSON.stringify(args[i++]); } catch (_) { return '[Circular]'; } break; default: return x; } }); return str; } return template; } function isNativeStringType(type) { return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'date' || type === 'pattern'; } export function isEmptyValue(value, type) { if (value === undefined || value === null) { return true; } if (type === 'array' && Array.isArray(value) && !value.length) { return true; } if (isNativeStringType(type) && typeof value === 'string' && !value) { return true; } return false; } export function isEmptyObject(obj) { return Object.keys(obj).length === 0; } function asyncParallelArray(arr, func, callback) { var results = []; var total = 0; var arrLength = arr.length; function count(errors) { results.push.apply(results, _toConsumableArray(errors || [])); total++; if (total === arrLength) { callback(results); } } arr.forEach(function (a) { func(a, count); }); } function asyncSerialArray(arr, func, callback) { var index = 0; var arrLength = arr.length; function next(errors) { if (errors && errors.length) { callback(errors); return; } var original = index; index = index + 1; if (original < arrLength) { func(arr[original], next); } else { callback([]); } } next([]); } function flattenObjArr(objArr) { var ret = []; Object.keys(objArr).forEach(function (k) { ret.push.apply(ret, _toConsumableArray(objArr[k] || [])); }); return ret; } export var AsyncValidationError = /*#__PURE__*/function (_Error) { _inherits(AsyncValidationError, _Error); var _super = _createSuper(AsyncValidationError); function AsyncValidationError(errors, fields) { var _this; _classCallCheck(this, AsyncValidationError); _this = _super.call(this, 'Async Validation Error'); _defineProperty(_assertThisInitialized(_this), "errors", void 0); _defineProperty(_assertThisInitialized(_this), "fields", void 0); _this.errors = errors; _this.fields = fields; return _this; } return _createClass(AsyncValidationError); }( /*#__PURE__*/_wrapNativeSuper(Error)); export function asyncMap(objArr, option, func, callback, source) { if (option.first) { var _pending = new Promise(function (resolve, reject) { var next = function next(errors) { callback(errors); return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(source); }; var flattenArr = flattenObjArr(objArr); asyncSerialArray(flattenArr, func, next); }); _pending.catch(function (e) { return e; }); return _pending; } var firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || []; var objArrKeys = Object.keys(objArr); var objArrLength = objArrKeys.length; var total = 0; var results = []; var pending = new Promise(function (resolve, reject) { var next = function next(errors) { // eslint-disable-next-line prefer-spread results.push.apply(results, errors); total++; if (total === objArrLength) { callback(results); return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(source); } }; if (!objArrKeys.length) { callback(results); resolve(source); } objArrKeys.forEach(function (key) { var arr = objArr[key]; if (firstFields.indexOf(key) !== -1) { asyncSerialArray(arr, func, next); } else { asyncParallelArray(arr, func, next); } }); }); pending.catch(function (e) { return e; }); return pending; } function isErrorObj(obj) { return !!(obj && obj.message !== undefined); } function getValue(value, path) { var v = value; for (var i = 0; i < path.length; i++) { if (v == undefined) { return v; } v = v[path[i]]; } return v; } export function complementError(rule, source) { return function (oe) { var fieldValue; if (rule.fullFields) { fieldValue = getValue(source, rule.fullFields); } else { fieldValue = source[oe.field || rule.fullField]; } if (isErrorObj(oe)) { oe.field = oe.field || rule.fullField; oe.fieldValue = fieldValue; return oe; } return { message: typeof oe === 'function' ? oe() : oe, fieldValue: fieldValue, field: oe.field || rule.fullField }; }; } export function deepMerge(target, source) { if (source) { for (var s in source) { if (source.hasOwnProperty(s)) { var value = source[s]; if (_typeof(value) === 'object' && _typeof(target[s]) === 'object') { target[s] = _objectSpread(_objectSpread({}, target[s]), value); } else { target[s] = value; } } } } return target; }