var debugLib = require('debug');
var extend = require('object-assign');
var settings = {
colors: {
debug: 'gray',
error: 'red',
info: 'gray',
warn: 'orange'
}
};
/**
* Monkeypatches `debug` so we can colorize error/warning messages.
*
* (See issue: https://github.com/visionmedia/debug/issues/137)
*/
var debug = function (namespace) {
var d = debugLib(namespace);
d.color = getDebugNamespaceColor(namespace);
return d;
};
extend(debug, debugLib);
/**
* Returns the type of the namespace (e.g., `error`, `warn`).
*
* @param {String} namespace
* The debug logger's namespace (e.g., `components:geometry:warn`).
* @returns {String} The type of the namespace (e.g., `warn`).
* @api private
*/
function getDebugNamespaceType (namespace) {
var chunks = namespace.split(':');
return chunks[chunks.length - 1]; // Return the last one
}
/**
* Returns the color of the namespace (e.g., `orange`).
*
* @param {String} namespace
* The debug logger's namespace (e.g., `components:geometry:warn`).
* @returns {String} The color of the namespace (e.g., `orange`).
* @api private
*/
function getDebugNamespaceColor (namespace) {
var type = getDebugNamespaceType(namespace);
var color = settings.colors && settings.colors[type];
return color || null;
}
/**
* Returns `localStorage` if possible.
*
* This is necessary because Safari throws when a user disables
* cookies or `localStorage` and you attempt to access it.
*
* @returns {localStorage}
* @api private
*/
function storage () {
try {
return window.localStorage;
} catch (e) {
}
}
/**
* To enable console logging, type this in the Console of your Dev Tools:
*
* localStorage.logs = 1
*
* To disable console logging:
*
* localStorage.logs = 0
*
*/
var ls = storage();
if (ls && (parseInt(ls.logs, 10) || ls.logs === 'true')) {
debug.enable('*');
} else {
debug.enable('*:error,*:info,*:warn');
}
if (process.browser) { window.logs = debug; }
module.exports = debug;