Add cast for the fake TaggedError

This commit is contained in:
John Lees-Miller 2020-05-05 09:06:15 +01:00
parent fc197630be
commit c44054a31b
2 changed files with 46 additions and 2 deletions

View file

@ -0,0 +1,44 @@
//
// A quick microbenchmark for OError.tag.
//
const OError = require('..')
function benchmark(fn, repeats = 100000) {
const startTime = process.hrtime()
for (let i = 0; i < repeats; ++i) {
fn()
}
const elapsed = process.hrtime(startTime)
return elapsed[0] * 1e3 + elapsed[1] * 1e-6
}
function throwError() {
throw new Error('here is a test error')
}
console.log(
'no tagging: ',
benchmark(() => {
try {
throwError()
return 1
} catch (error) {
return 0
}
}),
'ms'
)
console.log(
'tagging: ',
benchmark(() => {
try {
throwError()
return 1
} catch (error) {
OError.tag(error, 'here is a test tag')
return 0
}
}),
'ms'
)

View file

@ -56,8 +56,8 @@ class OError extends Error {
let tag
if (Error.captureStackTrace) {
// Hide this function in the stack trace.
tag = { name: 'TaggedError', message, info }
// Hide this function in the stack trace, and avoid capturing it twice.
tag = /** @type TaggedError */ ({ name: 'TaggedError', message, info })
Error.captureStackTrace(tag, OError.tag)
} else {
tag = new TaggedError(message, info)