npm

Need private packages and team management tools?Check out npm Orgs. »

errobj

2.0.0 • Public • Published

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, ...
  • ✔︎ 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

  1. {Error} (error) An error to be serialised
  2. {Object} (enrichment) [optional] - This object's field values will be assigned to the serialised error
  3. {Object} (options) [optional, nullable] - See details below
    • {Number} offset [optional] - Offset the parsed stack, and error position details. Good for middleware created error objects.
    • {Boolean} parsedStack [optional] - Add a parsed stack of the error

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'})
            )
        }
    );
 
    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

function verboseLog(message) {
    const error = new Error(message);
    send(errobj(error, null, {offset: 1}));
}

option: parsedStack

errobj(error, null, {parsedStack: true});
 
{
    ...
    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'
        }
    ],
    ...
}

Bundled version

Environments which exclude node_modules from the transpiling pipeline should include the "browser" entry instead of "main". This exposes a bundled ES5 commonjs module.

Also available for explicit import:

const errobj = require('errobj/dist');

install

npm i errobj

Downloadsweekly downloads

417

version

2.0.0

license

MIT

repository

Gitgithub

last publish

collaborators

  • avatar
Report a vulnerability