/**
* @version : 1.0
* @author Boris GBAHOUE
* @file Error wrapper
* @module amiwo/error
*/
// =======================================================================
// BASIC SETUP
// =======================================================================
// Load our objects
var util = require('util');
/**
* @class
* @augments Error
* @param {String} message
* @param {any} [object]
* @param {Error} [error] parent error
*
* @public
*/
function GenericError(message, object, error) {
if (object instanceof Error) {
error = object;
object = null;
}
Error.call(this);
// Capture stack trace
if (error instanceof Error) {
this.stack = error.stack;
} elseĀ {
Error.captureStackTrace(this, arguments.callee);
}
this.name = 'GenericError';
this.message = message;
this.object = object;
this.error = error;
}
/**
* Inherit from `Error`.
*/
util.inherits(GenericError, Error);
// =======================================================================
// PUBLIC METHOD
// =======================================================================
/**
* Creates a Generic error with 'message' and wrapping 'err' if 'err' isn't a GenericError or returns 'err' if it's a GenericError
*
* @param {String} message
* @param {Object} [object]
* @param {Error} [err]
*
* @returns {GenericError}
*/
GenericError.create = function(message, object, err) {
if ((err === undefined) && (object instanceof Error)) {
err = object;
object = undefined;
} else if ((object instanceof Error) && !(err instanceof Error)) {
let $tmp = err;
err = object;
object = $tmp;
}
if (err instanceof GenericError) {
if (err.object == null) err.object = object;
return err;
} else {
return new GenericError(message, object, err);
}
}
module.exports = GenericError;