3.0.1 • Published 12 months ago

errobj v3.0.1

Weekly downloads
1,980
License
Unlicense
Repository
github
Last release
12 months ago

errobj npm.io npm.io

☠️ 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

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

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

12 months ago

2.4.5

12 months ago

3.0.0

1 year ago

2.4.4

2 years ago

2.4.3

2 years ago

2.4.2

2 years ago

2.4.1

3 years ago

2.4.0

3 years ago

2.3.0

3 years ago

2.2.1

4 years ago

2.2.0

4 years ago

2.1.0

4 years ago

2.0.0

5 years ago

1.0.0

5 years ago

0.0.0

5 years ago