cer

    1.0.0 • Public • Published

    view on npm downloads per month node version build status test coverage license

    cer

    Utility to generate fast and correct custom error constructors. This module exposes a factory function that creates error constructors which are identical to the built-in Error function.

    Basic usage

    const error   = require('cer'),
          MyError = error('MyError'),
          err     = new MyError('example')

    The following comparisons will always resolve to true:

    MyError.name === 'MyError'
    err.name === 'MyError'
    err.message === 'example'
    err instanceof Error
    err instanceof MyError

    Stack trace is similar to the following:

    MyError: example
        at Object.<anonymous> (example.js:3:16)
        at Module._compile (module.js:570:32)
        at Object.Module._extensions..js (module.js:579:10)
        at Module.load (module.js:487:32)
        at tryModuleLoad (module.js:446:12)
        at Function.Module._load (module.js:438:3)
        at Module.runMain (module.js:604:10)
        at run (bootstrap_node.js:394:7)
        at startup (bootstrap_node.js:149:9)
        at bootstrap_node.js:509:3
    

    As you can see, irrelevant stack frames after error instantiation aren't appear in trace.

    Custom constructor

    You can provide a custom constructor to do your own initialization when a new instance is being created.

    const error   = require('cer'),
          MyError = error('MyError', init),
          err     = new MyError('foo', 'bar')
     
    function init(message, errorCode) {
        this.code = errorCode
    }

    And then:

    err.message === 'foo' // assigned automatically
    err.code === 'bar'

    Multiple inheritance

    const error = require('cer'),
          DatabaseError = error('DatabaseError'),
          EntityDoesNotExistError = error('EntityDoesNotExistError', init, DatabaseError),
          err = new EntityDoesNotExistError('invalid id provided', 1)
     
    function init(message, id) {
        this.id = id
    }

    And then:

    err instanceof Error
    err instanceof DatabaseError
    err instanceof EntityDoesNotExistError
    err.id === 1

    Note: init is not required when you just want to inherit, you can pass a null instead.

    Extending prototype

    const error   = require('cer'),
          MyError = error('MyError')
     
    MyError.prototype.example = 42
     
    const err = new MyError

    And then:

    err.example === 42

    Note: it works even if you do multiple inheritance.

    Installation

    With npm:

    npm install cer
    

    Tests & benchmarks

    Run the unit test suite:

    npm test
    

    Run unit tests and create coverage report:

    npm run cover
    

    Run benchmarks:

    npm run bench
    

    License

    MIT

    Install

    npm i cer

    DownloadsWeekly Downloads

    1,736

    Version

    1.0.0

    License

    MIT

    Last publish

    Collaborators

    • schwarzkopfb