yandere
v1.0.0
Published
Javascript/Typescript library that provides browser- and Observable-friendly error wrappers, inspired by verror.
Downloads
2,953
Maintainers
Readme
yandere
Javascript/Typescript library that provides browser- and Observable-friendly error wrappers, inspired by verror.
Installation
npm install yandere --save
yarn add yandere
bower install pluralize --save
Usage
Javascript import
var yandere = require('yandere');
var YError = yandere.YError;
Typescript import
import { YError } from 'yandere';
With try/catch
try {
hamSandwich.insert(thingy);
} catch (originalError) {
throw YError("cannot insert thingy into ham sandwich", originalError);
// or throw new YError(...);
}
- Stack traces from the thrown YError include the original error's trace.
- The YError's
message
field has both "cannot insert thingy into ham sandwich" and the original error's message.
With Observable subscriptions (RxJS)
myObservable.subscribe(
result => /* ... */,
error => myHandler.panic(new YError("trouble with myObserver", error))
);
The myHandler.panic
method has information about both this code and whatever code caused the earlier error
to occur.
Further, the Typescript compiler doesn't complain about mismatching types, as YError really does support any type for its second parameter -- even functions, symbols, and objects with circular references. While such values might not be pretty when displayed, YError is pretty good about handling them without crashing.
Technical details
String as a cause
var yerr = new YError("Cannot fetch document", "HTTP failure");
yerr.message
resembles, "Cannot fetch document: HTTP failure".yerr.stack
contains its own stack trace, plus "Caused by" ... "HTTP failure".
Multiple causes
var yerr = new YError("Cannot fetch document",
new YError("HTTP failure",
new Error("Cannot resolve hostname")));
yerr.message === "Cannot fetch document: HTTP failure: Cannot resolve hostname"
yerr.stack
resembles the following:
YError: Cannot fetch document: HTTP failure: Cannot resolve hostname
at apple (cactus.js:10:20)
...
at banana (palm.js:30:40)
___________
_/ Caused by \___________
YError: HTTP failure: Cannot resolve hostname
at cherry (oak.js:11:24)
...
at kiwi (fuzz.js:31:36)
___________
_/ Caused by \___________
Error: Cannot resolve hostname
at peach (keen.js:292:4)
...
at orange (juice.js:384:12)
Unit-testing yandere
npm install
npm run build
npm run test