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;
},