Source: error/GenericError.js

/**
 * @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;