2.0.1 • Published 6 years ago

user-error v2.0.1

Weekly downloads
3
License
MIT
Repository
github
Last release
6 years ago

user-error

npm Version npm Downloads Test Status Test Coverage MIT Licensed

npm package that simplifies inheriting from Error.

const UserError = require('user-error');

throw new UserError('Hello, World!', {additional: 'information'});

Installation

npm install user-error

Features

  • Subclasses Error without breaking standard behavior.
  • Like Error, UserError takes a message as first argument.
  • Add properties by simply passing in an object as second or first argument
  • Properties are enumerable. That means serialization using JSON.stringify works as expected.

Usage

Just require the package to get UserError and either build your own error class on top of it or use it directly.

Direct Usage

const UserError = require('user-error');

throw new UserError('oops', {additional: 'information'});

Inheriting

const UserError = require('user-error');

// Custom error class that takes an additional "error id" as first argument.
function MyError(id, message, properties) {
  UserError.call(this, message, properties);
  this.id = id;
}

MyError.prototype = Object.create(UserError.prototype, {
  constructor: {value: MyError, configurable: true, writable: true}
});

throw new MyError('foo_error', 'oops');

When nesting exceptions, the inner exception should be called inner by convention:

try {
  throw new UserError('oops');
} catch (err) {
  // "MyError" from the inheritance example above.
  throw new MyError('internal_error', 'something failed', {inner: err});
}

API

new UserError(message, properties)

Create a new error with the specified message and properties.

The resulting object has the following properties:

  • name
  • message
  • stack
  • additional properties (copied from the properties argument)

name is taken from (in that order):

  • properties.name (useful for overriding the name without inheriting)
  • this.constructor.prototype.name (useful for minified code)
  • this.constructor.name

message is taken from (in that order):

  • properties.message
  • message

stack is taken from (in that order):

  • properties.stack
  • generated using Error.captureStackTrace (if available)

message

anything (default = '')

The message property of the error. The value is always converted to a string.

new UserError(); // default

new UserError('test');

properties

object (default = {})

Additional properties to be assigned to the error.

new UserError(); // default

new UserError({foo: 'bar'}); // without message

new UserError('test', {baz: 'qux'}); // with message

Tests

To run the test suite, install dependencies, then run npm test:

npm install
npm test

Coverage reports are generated by running npm run coverage. Linting is done with npm run lint.