@ganintegrity/gan-error

an extendable ES6 Error with support for HTTP errors

Stats

stars 🌟issues ⚠️updated 🛠created 🐣size 🏋️‍♀️
Minified + gzip package size for @ganintegrity/gan-error in KB

Readme

@ganintegrity/gan-error

npm version pipeline status coverage report

an extendable ES6 Error with support for HTTP errors

Installation

npm install --save @ganintegrity/gan-error

Usage

const GanError = require('@ganintegrity/gan-error');

const error = new GanError('something bad happened');

console.log(error.message); // => 'something bad happened'
console.log(error.name); // => 'GanError'

class MyError extends GanError {}

const myError = new MyError('some other bad thing happened');

console.log(myError.message); // => 'some other bad thing happened'
console.log(myError.name); // => 'MyError''

When passed an error instance, the message is "inherited" from the error instance and the passed error stored as originalError:

class CustomError extends GanError {}

const error = new CustomError(new Error('foo'));

console.log(error.message); // => 'foo'
console.log(error.originalError); // => new Error('foo')

Also, if the passed error instance has a status property, it will also be copied over from the error:

class CustomError extends GanError {}

const error = new CustomError(new GanError.InternalServerError('foo'));

console.log(error.message); // => 'foo'
console.log(error.status); // => 500
console.log(error.originalError); // => new GanError.InternalServerError('foo')

Objects can also be passed to the constructor. They will be stored as data on the error:

class CustomError extends GanError {}

const error = new CustomError({ foo: 'bar' } });

console.log(error.message); // => ''
console.log(error.data); // => { message: 'foo', foo: 'bar' }

If the object contains a message property whose value is a string, then that is also used as the error's message:

class CustomError extends GanError {}

const error = new CustomError({ message: 'oops!', foo: 'bar' } });

console.log(error.message); // => 'oops!'
console.log(error.data); // => { message: 'oops!', foo: 'bar' }

HTTP errors

HTTP errors are exposed as static properties on GanError by name and by status code:

// base http error, without `status`
class MyError extends GanError.HttpError {}
// http error with `status` 500
class MySecondError extends GanError.InternalServerError {}
// same, http error with `status` 500
class MyOtherError extends GanError['500'] {}

Disabling HTTP errors

If you're using this module for the browser and you don't need support for http errors, you can disable them altogether by setting the DISABLE_GAN_HTTP_ERRORS environment variable to true when bundling your frontend code (e.g. with webpack's DefinePlugin). This reduces the size of the frontend bundle.

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.