error: function error()

in lib/util.js [583:634]


  error: function error(err, options) {
    var originalError = null;
    if (typeof err.message === 'string' && err.message !== '') {
      if (typeof options === 'string' || (options && options.message)) {
        originalError = util.copy(err);
        originalError.message = err.message;
      }
    }
    err.message = err.message || null;

    if (typeof options === 'string') {
      err.message = options;
    } else if (typeof options === 'object' && options !== null) {
      util.update(err, options);
      if (options.message)
        err.message = options.message;
      if (options.code || options.name)
        err.code = options.code || options.name;
      if (options.stack)
        err.stack = options.stack;
    }

    if (typeof Object.defineProperty === 'function') {
      Object.defineProperty(err, 'name', {writable: true, enumerable: false});
      Object.defineProperty(err, 'message', {enumerable: true});
    }

    err.name = String(options && options.name || err.name || err.code || 'Error');
    err.time = new Date();

    if (originalError) {
      err.originalError = originalError;
    }


    for (var key in options || {}) {
      if (key[0] === '[' && key[key.length - 1] === ']') {
        key = key.slice(1, -1);
        if (key === 'code' || key === 'message') {
          continue;
        }
        err['[' + key + ']'] = 'See error.' + key + ' for details.';
        Object.defineProperty(err, key, {
          value: err[key] || (options && options[key]) || (originalError && originalError[key]),
          enumerable: false,
          writable: true
        });
      }
    }

    return err;
  },