typescript-chained-error
TypeScript icon, indicating that this package has built-in type declarations

1.6.0 • Public • Published

Typescript chained error

npm build Code coverage License PRs Welcome

Highlights

  • Allows stacking errors with "Caused by: " keyword in stack
  • Preserves error class name in trace (uses ts-custom-error for that)
  • Automatically cleans up stack using clean-stack](https://github.com/sindresorhus/clean-stack)
  • Has a ChainedErrorFactory that can extend any already existing error with Caused by clause additional properties and
  • 100% test coverage. Used in healthcare-grade solutions

Installation

$ npm install --save typescript-chained-error

Usage

  1. Define custom error class with a constructor that has a cause as a second parameter
  2. Throw your custom error passing the causing error as a second parameter
  3. Error causes can be stacked (there may be many causes that are finally leading to the printed error)
import ChainedCustomError from "typescript-chained-error";
 
class CannotPerformCalculationsError extends ChainedCustomError {
    public constructor(msg?: string, cause?: Error) {
        super(msg, cause);
    }
}
 
// function that may throw
function buildArray(desiredLength: number) {
    try {
        return new Array(desiredLength);
    } catch (error) {
        throw new CannotPerformCalculationsError("Cannot build array", error);
    }
}
 
// call function with illegal parameter
buildArray(-5);

The output:

CannotPerformCalculationsError: Cannot build array
    at buildArray (/typescript-chained-error/src/test.ts:14:15)
    at Object.<anonymous> (/typescript-chained-error/src/test.ts:18:1)
    (...)
 Caused by: RangeError: Invalid array length
    at buildArray (/typescript-chained-error/src/test.ts:12:16)
    at Object.<anonymous> (/typescript-chained-error/src/test.ts:18:1)
    (...)

Options

interface Options {
    cleanStack: boolean; // default: true
}
 
// Pass options in constructor
public constructor(msg?: string, cause?: Error) {
    super(msg, cause, { cleanStack: false });
}

Using ChainedErrorFactory

Example with firebase-functions https error (which is the only error that is thrown at the call site).

import { ChainedErrorFactory } from "typescript-chained-error";
import * as functions from "firebase-functions";
 
throw ChainedErrorFactory.make(
    // primary error that will be extended (this error is preserved in the prototype chain):
    functions.https.HttpsError("resource-exhausted", "Message"),
    // Causing error:
    new TypeError("Cause error"),
    // (optional) Additional fields that will be assigned to the returned error object
    // e.g.: functions.https.HttpsError allow to add a details field to the error. That field will be reconstructed at the call site.
    /* optional: */ { details: { additional: "properties" } },
    // (optional) Options. Specified above.
);

Extends the brilliant ts-custom-error. Uses clean-stack by @sindresorhus for pretty output. | Made with ❤️ by Jędrzej Lewandowski.

Readme

Keywords

Package Sidebar

Install

npm i typescript-chained-error

Weekly Downloads

866

Version

1.6.0

License

MIT

Unpacked Size

15.4 kB

Total Files

12

Last publish

Collaborators

  • jblew