text: 'use strict';
  
  var _interopRequireDefault = require('@babel/runtime/helpers/builtin/interopRequireDefault');
  
  exports.__esModule = true;
  exports.default = ValidationError;
  
  var _printValue = _interopRequireDefault(require('./util/printValue'));
  
  var strReg = /\$\{\s*(\w+)\s*\}/g;
  
  var replace = function replace(str) {
    return function(params) {
      return str.replace(strReg, function(_, key) {
        return (0, _printValue.default)(params[key]);
      });
    };
  };
  
  function ValidationError(errors, value, field, type) {
    var _this = this;
  
    this.name = 'ValidationError';
    this.value = value;
    this.path = field;
    this.type = type;
    this.errors = [];
    this.inner = [];
    if (errors)
      [].concat(errors).forEach(function(err) {
        _this.errors = _this.errors.concat(err.errors || err);
        if (err.inner)
          _this.inner = _this.inner.concat(err.inner.length ? err.inner : err);
      });
    this.message =
      this.errors.length > 1
        ? this.errors.length + ' errors occurred'
        : this.errors[0];
    if (Error.captureStackTrace) Error.captureStackTrace(this, ValidationError);
  }
  
  ValidationError.prototype = Object.create(Error.prototype);
  ValidationError.prototype.constructor = ValidationError;
  
  ValidationError.isError = function(err) {
    return err && err.name === 'ValidationError';
  };
  
  ValidationError.formatError = function(message, params) {
    if (typeof message === 'string') message = replace(message);
  
    var fn = function fn(params) {
      params.path = params.label || params.path || 'this';
      return typeof message === 'function' ? message(params) : message;
    };
  
    return arguments.length === 1 ? fn : fn(params);
  };
  
  module.exports = exports['default'];
  