cer
Utility to generate fast and correct custom error constructors.
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'
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