debug/lib/debug.js
2012-01-22 10:26:33 -08:00

94 lines
1.4 KiB
JavaScript

/*!
* debug
* Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca>
* MIT Licensed
*/
/**
* Module dependencies.
*/
var tty = require('tty');
/**
* Expose `debug()` as the module.
*/
module.exports = debug;
/**
* Library version.
*/
exports.version = '0.2.0';
/**
* Enabled debuggers.
*/
var names = (process.env.DEBUG || '')
.split(/[\s,]+/)
.map(function(name){
name = name.replace('*', '.*?');
return new RegExp('^' + name + '$');
});
/**
* Colors.
*/
var colors = [6, 2, 3, 4, 5, 1];
/**
* Previously assigned color.
*/
var prevColor = 0;
/**
* Is stderr a TTY? Colored output is disabled when `true`.
*/
var isatty = tty.isatty(process.stderr.fd || 2);
/**
* Select a color.
*
* @return {Number}
* @api private
*/
function color() {
return colors[prevColor++ % colors.length];
}
/**
* Create a debugger with the given `name`.
*
* @param {String} name
* @return {Type}
* @api public
*/
function debug(name) {
var match = names.some(function(re){
return re.test(name);
});
if (!match) return function(){};
var c = color();
function colored(fmt) {
fmt = ' \033[3' + c + 'm' + name + '\033[90m ' + fmt + '\033[0m';
console.error.apply(this, arguments);
}
function plain(fmt) {
fmt = ' ' + name + ' ' + fmt;
console.error.apply(this, arguments);
}
return isatty ? colored : plain;
}