Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 1,000,000+ packages pre-installed, including errobj with all npm packages installed. Try it out:

var errobj = require("errobj")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

errobj v2.2.1

☠️ Serialise errors to literal (JSONable) object

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

    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: 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'
        }
    ],
    ...
}

Bundled version

Environments which exclude node_modules from the transpiling pipeline should include the "browser" entry instead of "main".

Also available for explicit import:

const errobj = require('errobj/dist');
RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free