forked from enviPath/enviPy
48 lines
1011 B
JavaScript
48 lines
1011 B
JavaScript
var stack = require('./stack.js')
|
|
|
|
module.exports = function (er, extra, options) {
|
|
extra = Object.keys(options || {}).reduce(function (set, k) {
|
|
if (!(k in set) && !/^tapChild/.test(k))
|
|
set[k] = options[k]
|
|
return set
|
|
}, extra || {})
|
|
|
|
if (!er || typeof er !== 'object') {
|
|
extra.error = er
|
|
return extra
|
|
}
|
|
|
|
var message = er.message
|
|
var addName = true
|
|
|
|
if (!message && er.stack) {
|
|
message = er.stack.split('\n')[0]
|
|
addName = false
|
|
}
|
|
|
|
er.message = ''
|
|
var st = er.stack
|
|
if (st) {
|
|
st = st.split('\n')
|
|
// parse out the 'at' bit from the first line.
|
|
extra.at = stack.parseLine(st[1])
|
|
extra.stack = stack.clean(st)
|
|
}
|
|
er.message = message
|
|
|
|
if (er.name && er.name !== 'Error')
|
|
extra.type = er.name
|
|
|
|
Object.keys(er).forEach(function (k) {
|
|
if (k === 'message' ||
|
|
k === 'domainEmitter' ||
|
|
k === 'domainThrown' ||
|
|
k === 'domain' ||
|
|
k === 'domainBound')
|
|
return
|
|
extra[k] = er[k]
|
|
})
|
|
|
|
return extra
|
|
}
|