# create-boom-error [![npm version](https://badge.fury.io/js/create-boom-error.svg)](http://badge.fury.io/js/create-boom-error) [![Build Status](https://travis-ci.org/lob/create-boom-error.svg)](https://travis-ci.org/lob/create-boom-error)

A simple Node.js library for easily creating classed Boom errors in Hapi applications.

# Installation

`npm install create-boom-error`

# Usage

### `createBoomError(name, statusCode, [message], [code])`

Creates a Boom error.

- `name` - The name of the error.
- `statusCode` - the integer status code of the Boom error
- `message` - an optional string or function which returns a string
- `code` - an optional machine-keyable error status string

### Create a simple error

```js
const { createBoomError } = require('create-boom-error');

const MyError = createBoomError('MyError', 404, 'simple message', 'not_found');

const err = new MyError();

// err is an instance of MyError making it easy to check in tests
err instanceof MyError // => true

// err.code will match the code argument passed in
err.code // => 'not_found'
```

Note that if the optional `code` argument is *NOT* passed in then the `.code` field attached to the error will default to a decamelized, snake case version of the `name`. For example:

```js
const MyError = createBoomError('MyError', 404, 'simple message');

const err = new MyError();

// err is an instance of MyError making it easy to check in tests
err instanceof MyError // => true

// err.code will return the name argument decamelized and in snake case
err.code // => 'my_error'
```


### Create an error with a dynamic message

```js
const MyError = createBoomError('MyError', 404, (num) => `You must have more than ${num} coins.`);

const err = new MyError(4);

// err now has the dynamic message
err.message // => 'You must have more than 4 coins.'
```

# Development

## Run tests

`npm run test`
