Easily subclass and customize new Error types
Examples
To include in your project:
var errorEx = require('error-ex');
To create an error message type with a specific name (note, that ErrorFn.name
will not reflect this):
var JSONError = errorEx('JSONError');
var err = new JSONError('error');
err.name; //-> JSONError
throw err; //-> JSONError: error
To add a stack line:
var JSONError = errorEx('JSONError', {fileName: errorEx.line('in %s')});
var err = new JSONError('error')
err.fileName = '/a/b/c/foo.json';
throw err; //-> (line 2)-> in /a/b/c/foo.json
To append to the error message:
var JSONError = errorEx('JSONError', {fileName: errorEx.append('in %s')});
var err = new JSONError('error');
err.fileName = '/a/b/c/foo.json';
throw err; //-> JSONError: error in /a/b/c/foo.json
API
errorEx([name], [properties])
Creates a new ErrorEx error type
-
name
: the name of the new type (appears in the error message upon throw; defaults toError.name
) -
properties
: if supplied, used as a key/value dictionary of properties to use when building up the stack message. Keys are property names that are looked up on the error message, and then passed to function values.- Values are functions that are passed the property named by key as the
first argument and the
.stack
, split into an array of lines, as the second argument - Functions that return falsey values are simply skipped
- Stack is passed as to allow direct stack message modification, if needed
- Values are functions that are passed the property named by key as the
first argument and the
Returns a constructor (Function) that can be used just like the regular Error constructor.
var errorEx = require('error-ex');
var BasicError = errorEx();
var NamedError = errorEx('NamedError');
// --
var AdvancedError = errorEx('AdvancedError', {
foo: function (value, stack) {
if (value) {
return 'bar ' + value;
}
return null;
}
}
var err = new AdvancedError('hello, world');
err.foo = 'baz';
throw err;
/*
AdvancedError: hello, world
bar baz
at tryReadme() (readme.js:20:1)
*/
errorEx.line(str)
Creates a stack line using a delimiter
This is a helper function. It is to be used in lieu of writing an anonymous function for
properties
values.
-
str
: The string to create- Use the delimiter
%s
to specify where in the string the value should go
- Use the delimiter
var errorEx = require('error-ex');
var FileError = errorEx('FileError', {fileName: errorEx.line('in %s')});
var err = new FileError('problem reading file');
err.fileName = '/a/b/c/d/foo.js';
throw err;
/*
FileError: problem reading file
in /a/b/c/d/foo.js
at tryReadme() (readme.js:7:1)
*/
errorEx.append(str)
Appends to the error.message
string
This is a helper function. It is to be used in lieu of writing an anonymous function for
properties
values.
-
str
: The string to append- Use the delimiter
%s
to specify where in the string the value should go
- Use the delimiter
var errorEx = require('error-ex');
var SyntaxError = errorEx('SyntaxError', {fileName: errorEx.append('in %s')});
var err = new SyntaxError('improper indentation');
err.fileName = '/a/b/c/d/foo.js';
throw err;
/*
SyntaxError: improper indentation in /a/b/c/d/foo.js
at tryReadme() (readme.js:7:1)
*/
License
Licensed under the MIT License. You can find a copy of it in LICENSE.