"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const chalk_1 = require("chalk");
const path = require("path");
const _ = require("underscore");
let debugFlags = {};
function w(str, l) {
return (str + " ").substr(0, l);
}
function setDebugFlag(scriptFullpath, flag) {
const filename = path.basename(scriptFullpath, ".js");
if (process.env.DEBUG) {
const decorated_filename = chalk_1.default.yellow(w(filename, 30));
console.log(" Setting debug for ", decorated_filename, " to ", (flag ? chalk_1.default.cyan : chalk_1.default.red)(flag.toString()));
}
debugFlags[filename] = flag;
}
exports.setDebugFlag = setDebugFlag;
function checkDebugFlag(script_fullpath) {
const filename = path.basename(script_fullpath, ".js");
let doDebug = debugFlags[filename];
if (process && process.env && process.env.DEBUG && !debugFlags.hasOwnProperty(filename)) {
doDebug = (process.env.DEBUG.indexOf(filename) >= 0 || process.env.DEBUG.indexOf("ALL") >= 0);
setDebugFlag(filename, doDebug);
}
return doDebug;
}
exports.checkDebugFlag = checkDebugFlag;
function file_line(filename, caller_line) {
return chalk_1.default.bgWhite.cyan(w(filename, 30) + ":" + w(caller_line.toString(), 5));
}
/**
* @method make_debugLog
* @param scripFullpath:string
* @return returns a debugLog function that will write message to the console
* if the DEBUG environment variable indicates that the provided source file shall display debug trace
*
*/
function make_debugLog(scripFullpath) {
const doDebug = checkDebugFlag(scripFullpath);
const filename = path.basename(scripFullpath, ".js");
function debugLogFunc() {
if (debugFlags[filename]) {
const stack = new Error().stack || "";
// caller line number
const l = stack.split("\n")[2].split(":");
const caller_line = parseInt(l[l.length - 2]);
const a1 = [file_line(filename, caller_line)];
const a2 = _.values(arguments);
const args = [].concat(a1, a2);
console.log.apply(console, args);
}
}
return debugLogFunc;
}
exports.make_debugLog = make_debugLog;
//# sourceMappingURL=make_debug_log.js.map