# define-error

> Define errors without frills, but with stack traces and instanceof support.

Latest version **1.1.0** (published 2015-10-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install define-error
pnpm add define-error
yarn add define-error
bun add define-error
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.0 |
| Published | 2015-10-26 |
| First published | 2015-08-13 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | Jason Pincin |
| Maintainers | jasonpincin |
| Keywords | create, error, stack, stacktrace, instanceof |

## Links

- npm: https://www.npmjs.com/package/define-error
- Repository: https://github.com/jasonpincin/define-error
- Issues: https://github.com/jasonpincin/define-error/issues
- npm.io page: https://npm.io/package/define-error

## Alternatives

- [@sentry/react-native](https://npm.io/package/@sentry/react-native.md) — 2.6M weekly downloads
- [@ardatan/aggregate-error](https://npm.io/package/@ardatan/aggregate-error.md) — 708.1K weekly downloads
- [custom-error-generator](https://npm.io/package/custom-error-generator.md) — 2.0K weekly downloads
- [@technik-sde/prosemirror-recreate-transform](https://npm.io/package/@technik-sde/prosemirror-recreate-transform.md) — 1.5K weekly downloads
- [@suchipi/error-utils](https://npm.io/package/@suchipi/error-utils.md) — 78 weekly downloads

## Recent versions

- 1.1.0 (latest) — 2015-10-26
- 1.0.0 — 2015-08-13

## README

# define-error

[![NPM version](https://badge.fury.io/js/define-error.png)](http://badge.fury.io/js/define-error)
[![Build Status](https://travis-ci.org/jasonpincin/define-error.svg?branch=master)](https://travis-ci.org/jasonpincin/define-error)
[![Coverage Status](https://coveralls.io/repos/jasonpincin/define-error/badge.png?branch=master)](https://coveralls.io/r/jasonpincin/define-error?branch=master)
[![Sauce Test Status](https://saucelabs.com/browser-matrix/jp-define-error.svg)](https://saucelabs.com/u/jp-define-error)

Define errors without frills, but with stack traces and instanceof support. 

## example

First, create and expose a singleton that defines your errors such as `errors.js`:

```javascript
var defineError = require('define-error')

module.exports.DatabaseError = defineError('DatabaseError')

module.exports.HttpResponseError = defineError('HttpResponseError', function (message, code) {
    this.code = code
})
```

Then use them:

```javascript
var assert            = require('assert'),
    DatabaseError     = require('./errors').DatabaseError,
    HttpResponseError = require('./errors').HttpResponseError

function query () {
    throw new DatabaseError('No database to query silly')
}

function request () {
    throw new HttpResponseError('Nobody out there', 404)
}

try {
    query()
}
catch (err) {
    assert(err instanceof DatabaseError)
    assert(err instanceof Error)
    console.error(err)
}

try {
    request()
}
catch (err) {
    assert(err instanceof HttpResponseError)
    assert(!(err instanceof DatabaseError))
    assert(err instanceof Error)
    assert(err.code)
    console.error(err)
}
```

## api

```javascript
var defineError = require('define-error')
```

### var CustomError = defineError('CustomError' [, initFunc])

Create an error constructor, `CustomError(message)`. `Error` will be in the prototype chain. If an `initFunc` function is provided, it will be called in the context of the error being created with all arguments that were passed to the error constructor. This will happen after the `message` and `stack` properties are set on the error object.

## install

With [npm](https://npmjs.org) do:

```
npm install --save define-error
```

## testing

`npm test`

Or to run tests in phantom: `npm run phantom`

### coverage

`npm run view-cover`

This will output a textual coverage report.

`npm run open-cover`

This will open an HTML coverage report in the default browser.

---
_Source: https://npm.io/package/define-error · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
