Add debug.enable and debug.enabled APIs.

Makes wildcard filters work once again.
This commit is contained in:
Nathan Rajlich 2012-02-01 11:54:32 -08:00
parent 811471fba2
commit 97c6ddf070
2 changed files with 42 additions and 7 deletions

View File

@ -5,6 +5,12 @@
* MIT Licensed
*/
/**
* The currently active debug mode names.
*/
var names = [];
/**
* Previous debug() call.
*/
@ -20,11 +26,8 @@ var prev = {};
*/
function debug(name) {
if (!debug.enable) {
throw new Error('You must set a function for `debug.enable`');
}
var enabled = debug.enable(name);
var enabled = debug.enabled(name);
if (!enabled) return function(){};
@ -44,3 +47,37 @@ function debug(name) {
return plain;
}
/**
* Enables a debug mode by name. This can include modes
* separated by a colon and wildcards.
*
* @param {String} name
* @api public
*/
debug.enable = function(name) {
var split = (name || '').split(/[\s,]+/)
, len = split.length
for (var i=0; i<len; i++) {
name = split[i].replace('*', '.*?');
names.push(new RegExp('^' + name + '$'));
}
}
/**
* Returns true if the given mode name is enabled, false otherwise.
*
* @param {String} name
* @return {Boolean}
* @api public
*/
debug.enabled = function(name) {
for (var i=0, l=names.length; i<l; i++) {
if (names[i].test(name)) {
return true;
}
}
return false;
}

View File

@ -3,9 +3,7 @@
<title>debug()</title>
<script src="../debug.js"></script>
<script>
debug.enable = function(name) {
return true;
}
debug.enable('*');
</script>
</head>
<body>