UNPKG

generator-hilary

Version:

Yeoman generator for projects that use hilary IoC (DI)

83 lines (67 loc) 2.42 kB
module.exports.name = 'ExceptionHandler'; module.exports.singleton = true; module.exports.dependencies = ['hilary::is']; module.exports.factory = function (is) { 'use strict'; return function (onError) { var self = { makeException: undefined, makeArgumentException: undefined, throw: undefined, throwArgumentException: undefined }; onError = (typeof onError === 'function') ? onError : function (error) { console.error(error); throw error; }; self.makeException = function (messageOrError, data) { var err, isDataOnMessage, isDataArg, prop; if (is.object(messageOrError)) { err = messageOrError; } else if (is.string(messageOrError)) { err = new Error(messageOrError); } else { err = new Error(); } isDataOnMessage = is.defined(err.data); isDataArg = is.defined(data); if (isDataOnMessage && isDataArg) { for (prop in data) { if (data.hasOwnProperty(prop)) { err.data[prop] = data[prop]; } } } else if (isDataArg) { err.data = data; } err.type = err.type || 'error'; return err; }; self.makeArgumentException = function (error, argument, data) { var err; if (is.object(error)) { error.type = 'argumentException'; return self.makeException(error, data); } else { err = new Error(error); err.type = 'argumentException'; return self.makeException(err, data); } }; self.throw = function (error, data) { onError(self.makeException(error, data)); }; self.throwArgumentException = function (error, argument, data) { onError(self.makeArgumentException(error, argument, data)); }; self.throwWithInnerError = function (error, innerError, data) { var err = self.makeException(error, data); err.innerError = self.makeException(innerError); onError(err); }; return self; }; };