'use strict';
/**
* Exception builder for throwable objects.
* @alias Rac.Exception
*/
class Exception {
constructor(name, message) {
this.name = name;
this.message = message;
}
toString() {
return `Exception:${this.name} - ${this.message}`;
}
/**
* When enabled the convenience static functions of this class will
* build `Error` objects, instead of `Exception` objects.
*
* Used for tests runs in Jest, since throwing a custom object like
* `Exception` within a matcher results in the expectation hanging
* indefinitely.
*
* On the other hand, throwing an `Error` object in chrome causes the
* displayed stack to be relative to the bundled file, instead of the
* source map.
*/
static buildsErrors = false;
/**
* Returns an convenience function for building throwable objects.
*
* The function can can be used as following:
* ```
* func(message) // returns an `Exception`` object with `name` and `message`
* func.exceptionName // returns the `name` of the built throwable objects
* ```
*/
static named(name) {
let func = (message) => {
if (Exception.buildsErrors) {
const error = new Error(message);
error.name = name;
return error;
}
return new Exception(name, message);
};
func.exceptionName = name;
return func;
}
static drawerNotSetup = Exception.named('DrawerNotSetup');
static failedAssert = Exception.named('FailedAssert');
static invalidObjectType = Exception.named('invalidObjectType');
// abstractFunctionCalled: 'Abstract function called',
// invalidParameterCombination: 'Invalid parameter combination',
// invalidObjectConfiguration: 'Invalid object configuration',
// invalidObjectToDraw: 'Invalid object to draw',
// invalidObjectToApply: 'Invalid object to apply',
} // class Exception
module.exports = Exception;