Source: silence.js

/**
 * @file Silence Class
 * @author José Marco Zanichelli
 * @version: 0.1
 */

/**
 * @alias Silence
 * @class Silence
 * @namespace
 * @description
    {@link Silence.prototype.status set}, {@link Silence.prototype.status get} and {@link Silence.prototype.log log} {@link Silence.is_silent Silence status}.
    <br/><b>process.env.SILENT</b> inherits from {@link Silence.is_silent Silence status}.
    <br/>{@link Silence.is_silent Silence status} default value: <b>false</b>.
 */
var Silence = function(){
    this.status(!!(new Function("return "+ (process.env.SILENT||false).toString() ))());
};

/**
 * @private
 * @alias Silence.is_silent
 * @memberof Silence
 * @var {boolean} is_silent
 * @description
 global silence status
 */
var is_silent;


/**
 * @private
 * @alias Silence.setSilent
 * @memberof Silence
 * @param {*} [val] - sets {@link Silence.is_silent is_silent} and process.env.SILENT to <b>!!val</b> when passed
 * @returns {@link Silence.is_silent is_silent}
 */
var setSilent = function(val){
    if (arguments.length>0) process.env.SILENT = is_silent = !!val;
    return is_silent;
};

/**
 * @private
 * @alias Silence.log
 * @memberof Silence
 * @param {...string} - console.log(..arguemnts) if {@link Silence.is_silent is_silent} is <b>false</b>
 * @returns {@link Silence.is_silent is_silent}
 */
var log = function(){
    if (!is_silent) console.log.apply(process,Array.prototype.slice.call(arguments,0));
    return this.status();
};

/**
 * @public
 * @alias Silence.prototype.status
 * @memberof Silence
 * @description
    exposes {@link Silence.setSilent setSilent}
 */
Silence.prototype.status = setSilent;

/**
 * @public
 * @alias Silence.prototype.log
 * @memberof Silence
 * @description
    exposes {@link Silence.log log}
 */
Silence.prototype.log = log;

/**
 * @module ./src/silence
 * @description
    returns an instance of {@link Silence Silence}.
 */
module.exports = new Silence();