createDebug.enable = enable;
createDebug.enabled = enabled;
createDebug.humanize = require('ms');
+ createDebug.destroy = destroy;
Object.keys(env).forEach(key => {
createDebug[key] = env[key];
});
- /**
- * Active `debug` instances.
- */
- createDebug.instances = [];
-
/**
* The currently active debug mode names, and names to skip.
*/
/**
* Selects a color for a debug namespace
- * @param {String} namespace The namespace string for the for the debug instance to be colored
+ * @param {String} namespace The namespace string for the debug instance to be colored
* @return {Number|String} An ANSI color code for the given namespace
* @api private
*/
*/
function createDebug(namespace) {
let prevTime;
+ let enableOverride = null;
+ let namespacesCache;
+ let enabledCache;
function debug(...args) {
// Disabled?
args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
// If we encounter an escaped % then don't increase the array index
if (match === '%%') {
- return match;
+ return '%';
}
index++;
const formatter = createDebug.formatters[format];
}
debug.namespace = namespace;
- debug.enabled = createDebug.enabled(namespace);
debug.useColors = createDebug.useColors();
- debug.color = selectColor(namespace);
- debug.destroy = destroy;
+ debug.color = createDebug.selectColor(namespace);
debug.extend = extend;
- // Debug.formatArgs = formatArgs;
- // debug.rawLog = rawLog;
+ debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.
+
+ Object.defineProperty(debug, 'enabled', {
+ enumerable: true,
+ configurable: false,
+ get: () => {
+ if (enableOverride !== null) {
+ return enableOverride;
+ }
+ if (namespacesCache !== createDebug.namespaces) {
+ namespacesCache = createDebug.namespaces;
+ enabledCache = createDebug.enabled(namespace);
+ }
- // env-specific initialization logic for debug instances
+ return enabledCache;
+ },
+ set: v => {
+ enableOverride = v;
+ }
+ });
+
+ // Env-specific initialization logic for debug instances
if (typeof createDebug.init === 'function') {
createDebug.init(debug);
}
- createDebug.instances.push(debug);
-
return debug;
}
- function destroy() {
- const index = createDebug.instances.indexOf(this);
- if (index !== -1) {
- createDebug.instances.splice(index, 1);
- return true;
- }
- return false;
- }
-
function extend(namespace, delimiter) {
const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
newDebug.log = this.log;
*/
function enable(namespaces) {
createDebug.save(namespaces);
+ createDebug.namespaces = namespaces;
createDebug.names = [];
createDebug.skips = [];
createDebug.names.push(new RegExp('^' + namespaces + '$'));
}
}
-
- for (i = 0; i < createDebug.instances.length; i++) {
- const instance = createDebug.instances[i];
- instance.enabled = createDebug.enabled(instance.namespace);
- }
}
/**
return val;
}
+ /**
+ * XXX DO NOT USE. This is a temporary stub function.
+ * XXX It WILL be removed in the next major release.
+ */
+ function destroy() {
+ console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
+ }
+
createDebug.enable(createDebug.load());
return createDebug;