yandere

Javascript/Typescript library that provides browser- and Observable-friendly error wrappers, inspired by verror.

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
yandere
111.0.04 years ago4 years agoMinified + gzip package size for yandere in KB

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