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 = MyError = err = 'example'
The following comparisons will always resolve to true
:
MyErrorname === 'MyError'errname === 'MyError'errmessage === 'example'err instanceof Errorerr 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 = MyError = err = 'foo' 'bar' { thiscode = errorCode}
And then:
errmessage === 'foo' // assigned automaticallyerrcode === 'bar'
Multiple inheritance
const error = DatabaseError = EntityDoesNotExistError = err = 'invalid id provided' 1 { thisid = id}
And then:
err instanceof Errorerr instanceof DatabaseErrorerr instanceof EntityDoesNotExistErrorerrid === 1
Note: init
is not required when you just want to inherit, you can pass a null
instead.
Extending prototype
const error = MyError = MyErrorprototypeexample = 42 const err =
And then:
errexample === 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