Code coverage report for usr/local/google/home/trevj/src/uproxy-lib/build/dev/uproxy-lib/logging/logging.js

Statements: 89.39% (59 / 66)      Branches: 76.92% (20 / 26)      Functions: 100% (11 / 11)      Lines: 89.39% (59 / 66)      Ignored: none     

All files » usr/local/google/home/trevj/src/uproxy-lib/build/dev/uproxy-lib/logging/ » logging.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117      1 1       1 8 8 17 17 2 2                     17 8     9 1   9     8   1 1 9 9   9 9 1   9 9   9 9 1       8 8 1   8 8 8   1   5   1   1         9 1 1     1     9 6 6 7   6     9 1 1     1     9 1 1     1   9 9 9           1   1  
/// <reference path='../../../third_party/typings/es6-promise/es6-promise.d.ts' />
/// <reference path='../../../third_party/freedom-typings/freedom-module-env.d.ts' />
/// <reference path='../../../third_party/typings/circular-json/circular-json.d.ts' />
var loggingProviderTypes = require('../loggingprovider/loggingprovider.types');
var CircularJSON = require('circular-json');
// Perform log message formatting. Formats an array of arguments to a
// single string.
// TODO: move this into the provider.
function formatStringMessageWithArgs_(args) {
    var msg = '';
    for (var i = 0; i < args.length; i++) {
        var arg = args[i];
        if ('string' !== typeof (arg) && !(arg instanceof String)) {
            try {
                arg = CircularJSON.stringify(arg);
            }
            catch (e) {
                if (arg && typeof (arg.toString) === 'function') {
                    arg = arg.toString();
                }
                else {
                    arg = e.message;
                }
            }
        }
        if (-1 !== msg.indexOf('%' + i)) {
            msg = msg.replace('%' + i, arg);
        }
        else {
            if (msg.length > 0) {
                msg += ' ';
            }
            msg += arg;
        }
    }
    return msg;
}
var Log = (function () {
    function Log(tag_) {
        var _this = this;
        this.tag_ = tag_;
        // the minimum level at which we will issue IPCs for logging statements
        this.minLevel = 0 /* debug */;
        this.setMinLevel_ = function (level) {
            _this.minLevel = level;
        };
        this.shouldLog_ = function (level) {
            return level >= _this.minLevel;
        };
        this.log_ = function (level, arg, args) {
            if (!_this.shouldLog_(level)) {
                return;
            }
            // arg exists to make sure at least one argument is given, we want to treat
            // all the arguments as a single array however
            args.unshift(arg);
            if (2 === args.length && ('string' === typeof (args[0]) || args[0] instanceof String) && Array.isArray(args[1])) {
                args = [args[0]].concat(args[1].slice());
            }
            var message = formatStringMessageWithArgs_(args);
            _this.logger.then(function (logger) {
                switch (level) {
                    case 0 /* debug */:
                        return logger.debug(message);
                    case 1 /* info */:
                        return logger.info(message);
                    case 2 /* warn */:
                        return logger.warn(message);
                    case 3 /* error */:
                        return logger.error(message);
                }
            });
        };
        // Logs message in debug level.
        this.debug = function (arg) {
            var args = [];
            for (var _i = 1; _i < arguments.length; _i++) {
                args[_i - 1] = arguments[_i];
            }
            _this.log_(0 /* debug */, arg, args);
        };
        // Logs message in info level.
        this.info = function (arg) {
            var args = [];
            for (var _i = 1; _i < arguments.length; _i++) {
                args[_i - 1] = arguments[_i];
            }
            _this.log_(1 /* info */, arg, args);
        };
        // Logs message in warn level.
        this.warn = function (arg) {
            var args = [];
            for (var _i = 1; _i < arguments.length; _i++) {
                args[_i - 1] = arguments[_i];
            }
            _this.log_(2 /* warn */, arg, args);
        };
        // Logs message in error level.
        this.error = function (arg) {
            var args = [];
            for (var _i = 1; _i < arguments.length; _i++) {
                args[_i - 1] = arguments[_i];
            }
            _this.log_(3 /* error */, arg, args);
        };
        this.logger = freedom.core().getLogger(this.tag_);
        Eif (freedom['logginglistener']) {
            freedom['logginglistener'](this.tag_).on('levelchange', this.setMinLevel_);
        }
        else {
            this.warn('Freedom module logginglistener is not available, IPCs will ' + 'be issued for all logging statements');
        }
    }
    return Log;
})();
exports.Log = Log;