| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | /** * Module dependencies */var util = require('util');var _ = require('@sailshq/lodash');/** * Combine an array of errors into a single Error object. * * @param  {Array} errors * @param  {String} msgSuffix * @return {Error} */module.exports = function consolidateErrors (errors, msgSuffix) {  // If there are errors, coallesce them into a single Error object we can throw.  if (errors.length === 0) {    return;  }  // Remove duplicate E_NOT_EVEN_CLOSE / E_NOT_STRICTLY_VALID errors.  var uniqueErrors = _.uniq(errors, function disregardValidationErrCode(err){    var hash = '';    if (!err.code) {      hash += '?';    }    else if (err.code !== 'E_NOT_EVEN_CLOSE' && err.code !== 'E_NOT_STRICTLY_VALID') {      hash += err.code;    }    hash += err.expected;    if (err.hops) {      hash += err.hops.join('.');    }    return hash;  });  var errMsg = util.format(    '%d error%s%s:',    uniqueErrors.length, (uniqueErrors.length!==1?'s':''), (msgSuffix?(' '+msgSuffix):''),    (      '\n • '+ _.pluck(uniqueErrors, 'message').join('\n • ')    )  );  var err = new Error(errMsg);  // Determine the appropriate top-level error code.  if (_.any(uniqueErrors, { code: 'E_UNKNOWN_TYPE' })) {    err.code = 'E_UNKNOWN_TYPE';  }  else {    err.code = 'E_INVALID';  }  // If any of the original errors are not "minor", then this is not a "minor" error.  err.minor = _.reduce(errors, function(memo, subError) {    if (!memo || !subError.minor) {      return false;    }    return true;  }, true);  // Don't include `minor` property if it's falsy.  if (!err.minor) {    delete err.minor;  }  // Expose duplicate-free list of errors as `err.errors`  err.errors = uniqueErrors;  return err;};
 |