@studio/fail
v1.8.1
Published
Fail with an Error object and a conventional code property
Downloads
181
Readme
Usage (async / await)
const { failure, INVALID } = require('@studio/fail');
function read(filename, callback) {
if (!filename) {
// Easily fail with a conventional error:
throw failure('Missing filename', INVALID);
}
// ...
}
Usage (callback)
const fs = require('fs');
const { fail, then, INVALID } = require('@studio/fail');
function read(filename, callback) {
if (!filename) {
// Easily fail with a conventional error:
fail(callback, 'Missing filename', INVALID);
return;
}
// Wrap callbacks with and error handling, guarding from multiple invocations:
fs.readFile(
filename,
'utf8',
then(callback, (content) => {
// Non-undefined return value is passed to callback:
return content.trim();
})
);
}
Conventions
Errors should always have a code
property with an uppercase error code. To
simplify error handling, use the provided fail
utility function and code
constants.
Error codes follow these conventions:
- Fatal errors should have an error code starting with
E_
. This is the asynchronous equivalent tothrow
. The providedmessage
is not supposed to be shown to the user. - Other error codes have no prefix and are not considered fatal, for example a
validation error. The provided
message
may be shown to the user. - If no
code
property is provided, it defaults toE_FAILED
.
The provided error codes can be handled generically. You may define additional error codes as needed.
Install
❯ npm i @studio/fail
API
failure(message[, cause][, code[, properties]])
: Create anError
with the given message andcause
andcode
andproperties
. If nocode
is provided it defaults toE_FAILED
. Thecause
must be an error object.fail(callback, message[, cause][, code[, properties]])
: Creates a failure and invoked the givencallback
with it.isFatal(error)
: Whether the given error has acode
property the starts withE_
or has nocode
property.then(callback, next)
: Create a callback function that invokescallback(err)
if an error occurred andnext(result)
on success. Throws if the function is invoked more than once with error codeE_FAILED
anderr
as the cause. Ifnext
returns a non-undefined value, thecallback
is invoked with that result.
Error codes
E_FAILED
: Fatal error.INVALID
: Invalid or missing argument or parameter.FORBIDDEN
: User is not allowed to access.NOT_FOUND
: Resource does not exist.
Examples
Throwing errors:
const { failure, INVALID } = require('@studio/fail');
// Fail with a message:
throw failure('Oups!');
// The previous is the same as this:
throw failure('Oups!', E_FAILED);
// Fail with `code` INVALID:
throw failure('Oups!', INVALID);
// Fail with a `cause`:
const cause = new Error();
throw failure('Oups!', cause);
// Fail with a `cause` and `code` INVALID:
throw failure('Oups!', cause, INVALID);
// Fail with `properties` and `code` INVALID:
throw failure('Oups!', INVALID, { some: 42 });
Invoking callbacks with errors:
const { fail, FORBIDDEN } = require('@studio/fail');
fail(callback, 'Oups!', FORBIDDEN);
Related modules
- 👻 Studio Log is a tiny ndjson logger that is
code
andcause
aware. - 📦 Studio Changes is used to create the changelog for this module.
License
MIT