rerror v2.0.0
(ノಠ益ಠ)ノミ ɹoɹɹǝɹ
Use RError
instead of Error
in Node.js and the browser.
It provides nested information about the cause of failure
without significant impact on performance.
Installation
$ npm install --save rerror
$ yarn add rerror
Usage
rerror is available in multiple module formats, so that you can import or require it or add it as a script to your html. Here are a few examples:
import RError from 'rerror'
throw new RError('(×﹏×)')
const RError = require('rerror')
throw new RError('ヽ(`⌒´メ)ノ')
<script src="https://unpkg.com/rerror/dist/index.iife.js"></script>
<!-- RError is now available in the global scope -->
<script>throw new RError('ヾ(  ̄O ̄)ツ')</script>
Here is an example illustrating how you can use rerror to pass along the information about the cause of failure:
function fail() {
throw new RError({
name: 'BAR',
message: 'I messed up.'
})
// Note that you could throw an Error instance here as well,
// or have something else throw for you, e.g. JSON.parse('(⇀‸↼‶)')
}
function failFurther() {
try {
fail()
} catch (err) {
throw new RError({
name: 'FOO',
message: 'Something went wrong.',
cause: err
})
}
}
try {
failFurther()
} catch (err) {
console.error(err.why)
console.error(err.stacks)
}
The output looks something like this:
FOO: Something went wrong. <- BAR: I messed up.
Error
at failFurther (<current_working_dir>/index.js:98:11)
at Object.<anonymous> (<current_working_dir>/index.js:107:3)
...
<- Error
at fail (<current_working_dir>/index.js:88:9)
at failFurther (<current_working_dir>/index.js:96:5)
at Object.<anonymous> (<current_working_dir>/index.js:107:3)
...
API
rerror includes a typescript declaration (.d.ts) file, so your editor will probably give you some good hints on how to use it.
RError
new RError(options)
Instanciates a RError instance.
Param | Type | Description |
---|---|---|
options / name | object or string | Required; if object, it must consist of the following properties: - {String} name - {String} [message] - {RError |Error} [cause] |
Example with cause
Promise.reject(new Error('fail')).catch(err => {
throw new RError({
name: 'BAR',
message: 'I messed up',
cause: err
})
})
Example of usage as a drop-in replacement
throw new RError('BAR')
Methods
hasCause(name) ⇒ boolean
Checks if a certain cause is in the cause chain of the error.
Kind: instance method of [RError](#RError)
Access: public
Param | Type | Description |
---|---|---|
name | string | The cause name to be searched for in the cause chain |
toJSON() ⇒ Object
The value returned by the toJSON method will be used for serialization when using JSON.stringify.
Returns: { name: string, message: string, why: string, stacks: string }
toString() ⇒ String
Returns a string representing the specified RError object.
Properties
name: string
The name property represents a name for the type of error.
message: string
The message property is a human-readable description of the error.
cause : RError | Error
The cause error.
chain : (RError | Error)[]
The cause chain of the error.
stack : string
Getter returning the stack of the top most error in the chain.
stacks : string
Getter returning a stack of stacks using the cause chain.
why : string
Getter returning a human readable cause chain, e.g. FOO: I failed <- BAR: I messed up.
Enjoy!