errobj
TypeScript icon, indicating that this package has built-in type declarations

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

Package Sidebar

Install

npm i errobj

Weekly Downloads

4,934

Version

3.0.1

License

Unlicense

Unpacked Size

22.4 kB

Total Files

8

Last publish

Collaborators

  • omrilotan