☠️ Serialise errors to literal (JSONable) object
UNLICENSE License
import { errobj } from 'errobj';
try {
some broken code
} catch (error) {
send(JSON.stringify(errobj(error)));
}
{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 depthconst { 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);
};
{
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'
}
errobj(error, { flow: "registration" });
function verboseLog(message) {
const error = new Error(message);
send(errobj(error, null, { offset: 1 }));
}
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'
}
],
...
}