/node-super-error

Custom error for Node.js with additional properties

Primary LanguageTypeScriptMIT LicenseMIT

node-super-error npm CI CD

A serializable and extendable Node.js Error with optional code, info and cause properties.

import { SuperError } from "@andrewscwei/super-error";

const cause = new Error("I am the cause");
const error = new SuperError(
  "I am the error",
  "error-code",
  { some: "info" },
  cause
);

console.log(error.name); // 'SuperError'
console.log(error.code); // 'error-code'
console.log(error.info); // { some: 'info' }
console.log(error.cause); // cause

const serialized = SuperError.serialize(error); // { 'name': 'SuperError', 'code': 'error-code', 'info': { 'some': 'info' }, 'cause': { 'name': 'Error', 'message': 'I am the cause' }, 'stack': <error_stack> }
const deserialized = SuperError.deserialize(serialized); // A `SuperError` instance equivalent to the initially created `error`.

API

Class: SuperError

A serializable and extendable Error with optional code, info and cause properties.

Property: {unknown} cause

An arbitrary cause of this error.

Property: {string} code

An arbitrary error code.

Property: {object} info

A plain object containing arbitrary info.

Method: SuperError.serialize(error)

Serializes any error into a plain object representing a SuperError.

  • @param value: unknown — Any error.
  • @returns SuperErrorObject — A plain object representing a SuperError.

Method: SuperError.deserialize(value)

Deserializes any value to a SuperError instance. SuperErrors are passed through, and Errors are converted to SuperErrors. Plain objects are deserialized to match their keys to respective SuperError properties. Strings are wrapped as the message of a SuperError and numbers are wrapped as the code of a SuperError. Everything else are wrapped as the cause of a SuperError.

  • @param value: unknown — Any value.
  • @returns SuperError — The deserialized SuperError.

Method: SuperError.from(value)

This method is an alias of SuperError.deserialize(value).

Usage

# Install dependencies
$ npm install

# Build module
$ npm run build

# Run tests against src
$ npm run unit

# Run tests against src for specific file patterns (relative to /src)
$ npm run unit --files="foo.ts"

# Run tests again built files
$ npm test

# Run tests again built files for specific file patterns (relative to /build)
$ npm test --files="foo.js"