extended-exceptions

2.1.0 • Public • Published

extended-exceptions.js

Build Status NPM version Bower version Dependency Status Project status license graph status Code Climate Total views Gittip

Introduction

Allow easy declaration of custom javascript errors/exceptions.

Also provides common exceptions for Javascript that are missing in the standard : RuntimeError, NotImplementedError, InvalidArgument, OutOfRange, etc. (inspiration taken from the C++11 standard)

Works in node.js + browser, AMD.

Full testsuite. No dependencies.

Includes special workarounds for Firefox "Error" object which has sometimes a strange behaviour.

License : public domain (http://unlicense.org/)

Interesting reads :

Predefined errors

Note : we keep the "error" naming scheme of standard javascript.

Error (standard)  <-- javascript root exception
+ EvalError       <-- Vanilla javascript exceptions
+ RangeError      <-- ...
+ ReferenceError  <-- ...
+ SyntaxError     <-- ...
+ TypeError       <-- ...
+ URIError        <-- ...
+ ExtendedError   <-- Here start our custom exceptions
  + LogicError
    + InvalidArgument
    + LengthError
    + OutOfRange
    + InvariantNotMet
  + RuntimeError
    + NotImplemented
    + UnknownEnumValue
    + IllegalState

Usage

if (typeof define !== 'function') { var define = require('amdefine')(module); } // node only
 
define(
[
    'extended-exceptions'
],
function(EE) {
    "use strict";
 
    // Feature 1 - use one of the predefined errors
    throw new EE.NotImplemented("TODO !");
    throw new EE.InvalidArgument("Please !");

Defining our own exceptions inheriting from an existing one :

define(
[
    'extended-exceptions'
],
function(EE) {
    "use strict";
 
    // Feature 2 - create a brand new error
    // inheriting from (for example) RuntimeError (could be just Error)
    var CustomJsonSerializationError = EE.create_custom_error("CustomError", EE.RuntimeError);
 
    // Alternative 1 - use it directly
    throw new CustomJsonSerializationError("Oups !");
 
    // Alternative 2 - use it to cast an existing error
    try {
        JSON.parse(stuff);
    }
    catch(e) {
        throw new CustomJsonSerializationError(e); // new error will have same stack and message
    }
 
    ...
    
    console.log( caught_error.name );
    console.log( caught_error.message );
    console.log( caught_error.stack );

Catching and testing exceptions :

  • exactly as you expect it.

Works in chai exactly as you expect it :

if (typeof define !== 'function') { var define = require('amdefine')(module); } // node only
 
define(
[
    'chai',
    '<class under test>',
    'extended-exceptions',
    'mocha'
],
function(chai, CUT, EE) {
    "use strict";
 
    var expect = chai.expect;
    chai.should();
 
    describe('Nice stuff', function() {
 
        describe('processing', function() {
 
            it('should detect bad state', function() {
                var out = CUT.make_new();
 
                var tempfn = function() { out.dostuff(); };
                tempfn.should.throw(EE.IllegalStateError, "Not initialized !"); // works fine
            });
        }); // describe feature
    }); // describe CUT
}); // requirejs module

Installation

Bower : bower install extended-exceptions.js Npm : npm install extended-exceptions

Unit tests

Browser : open test_runner/mocha.html Node : npm test

Package Sidebar

Install

npm i extended-exceptions

Weekly Downloads

1

Version

2.1.0

License

public domain

Last publish

Collaborators

  • offirmo