Skip to content

Serialize/deserialize an error into a plain object

License

Notifications You must be signed in to change notification settings

fatihaziz/ts-serialize-error

This branch is 27 commits behind sindresorhus/serialize-error:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

adc780d Β· Apr 3, 2022

History

57 Commits
Nov 17, 2021
May 23, 2017
Oct 9, 2018
Oct 9, 2018
Oct 9, 2018
Apr 3, 2022
Apr 1, 2022
Nov 17, 2021
Mar 11, 2020
Apr 1, 2022
Apr 3, 2022
Apr 1, 2022

Repository files navigation

serialize-error

Serialize/deserialize an error into a plain object

Useful if you for example need to JSON.stringify() or process.send() the error.

Install

npm install serialize-error

Usage

import {serializeError, deserializeError} from 'serialize-error';

const error = new Error('πŸ¦„');

console.log(error);
//=> [Error: πŸ¦„]

const serialized = serializeError(error)

console.log(serialized);
//=> {name: 'Error', message: 'πŸ¦„', stack: 'Error: πŸ¦„\n    at Object.<anonymous> …'}

const deserialized = deserializeError(serialized);

console.log(deserialized);
//=> [Error: πŸ¦„]

API

serializeError(value, options?)

Type: Error | unknown

Serialize an Error object into a plain object.

  • Non-error values are passed through.
  • Custom properties are preserved.
  • Non-enumerable properties are kept non-enumerable (name, message, stack).
  • Enumerable properties are kept enumerable (all properties besides the non-enumerable ones).
  • Buffer properties are replaced with [object Buffer].
  • Circular references are handled.
  • If the input object has a .toJSON() method, then it's called instead of serializing the object's properties.
  • It's up to .toJSON() implementation to handle circular references and enumerability of the properties.

.toJSON examples:

import {serializeError} from 'serialize-error';

class ErrorWithDate extends Error {
	constructor() {
		super();
		this.date = new Date();
	}
}

const error = new ErrorWithDate();

serializeError(error);
// => {date: '1970-01-01T00:00:00.000Z', name, message, stack}
import {serializeError} from 'serialize-error';

const error = new Error('Unicorn');

error.horn = {
	toJSON() {
		return 'x';
	}
};

serializeError(error);
// => {horn: 'x', name, message, stack}

deserializeError(value, options?)

Type: {[key: string]: unknown} | unknown

Deserialize a plain object or any value into an Error object.

  • Error objects are passed through.
  • Non-error values are wrapped in a NonError error.
  • Custom properties are preserved.
  • Non-enumerable properties are kept non-enumerable (name, message, stack, cause).
  • Enumerable properties are kept enumerable (all properties besides the non-enumerable ones).
  • Circular references are handled.

options

Type: object

maxDepth

Type: number
Default: Number.POSITIVE_INFINITY

The maximum depth of properties to preserve when serializing/deserializing.

import {serializeError} from 'serialize-error';

const error = new Error('πŸ¦„');
error.one = {two: {three: {}}};

console.log(serializeError(error, {maxDepth: 1}));
//=> {name: 'Error', message: '…', one: {}}

console.log(serializeError(error, {maxDepth: 2}));
//=> {name: 'Error', message: '…', one: { two: {}}}

About

Serialize/deserialize an error into a plain object

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 96.9%
  • TypeScript 3.1%