errobj
v3.0.1
Published
☠️ Serialise errors to literal (JSONable) object
Downloads
15,032
Maintainers
Readme
errobj
☠️ Serialise errors to literal (JSONable) object
- ✔︎ Designed for error loggers
- ✔︎ Serialises errors to literal objects
- ✔︎ Supports any properties attached to the error
- ✔︎ Expands the error details with lineNumber, columnName, fileName, functionName, ...
- ✔︎ Parses error cause
- ✔︎ Accepts an enrichment object
- ✔︎ Parses the stack trace (error-stack-parser)
- ✔︎ Isomorphic
TL;DR
import errobj from 'errobj';
try {
some broken code
} catch (error) {
send(JSON.stringify(errobj(error)));
}
Arguments
{Error}
(error) An error to be serialised{Object}
(enrichment) [optional] - This object's field values will be assigned to the serialised error{Object}
(options) [optional, nullable] - See details below{Number}
offset [optional] - Offset the parsed stack, and error position details. Good for middleware created error objects.{Number}
parsedStack [optional] - Add a parsed stack of the error with a certain depth
Example: Sending uncaught error to an HTTP error logger
const errobj = require('errobj');
const original_onerror = window.onerror; // play nicely
window.onerror = function (message, url, lineNumber, columnNumber, error) {
fetch(
'/error-logger',
{
method: 'POST',
body: JSON.stringify(
errobj(error, {message, url, lineNumber, columnNumber, level: 'error'})
)
}
);
return original_onerror(message, url, lineNumber, columnNumber, error);
}
Examples
The serialised error
{
name: 'RangeError',
message: 'Nothing',
stack: 'ReferenceError: something is not defined\nat change (index.html:46)\nat index.html:53\nat index.html:56',
lineNumber: '46',
columnNumber: '12',
fileName: 'index.html',
functionName: 'change',
source: 'at change (index.html:46)',
level: 'error'
}
Add fields to the parsed object
errobj(error, {flow: 'registration'});
option: offset (stack)
function verboseLog(message) {
const error = new Error(message);
send(errobj(error, null, {offset: 1}));
}
option: parsedStack
errobj(error, null, {parsedStack: Infinity});
{
...
parsedStack: [
{
lineNumber: 46,
fileName: 'index.html',
functionName: 'change',
source: 'at change (index.html:46)'
},
{
lineNumber: 53,
fileName: 'index.html',
source: 'at index.html:53'
},
{
lineNumber: 56,
fileName: 'index.html',
source: 'at index.html:56'
}
],
...
}