/** 
 | 
 * This is the web browser implementation of `debug()`. 
 | 
 * 
 | 
 * Expose `debug()` as the module. 
 | 
 */ 
 | 
  
 | 
exports = module.exports = require('./debug'); 
 | 
exports.log = log; 
 | 
exports.formatArgs = formatArgs; 
 | 
exports.save = save; 
 | 
exports.load = load; 
 | 
exports.useColors = useColors; 
 | 
exports.storage = 'undefined' != typeof chrome 
 | 
               && 'undefined' != typeof chrome.storage 
 | 
                  ? chrome.storage.local 
 | 
                  : localstorage(); 
 | 
  
 | 
/** 
 | 
 * Colors. 
 | 
 */ 
 | 
  
 | 
exports.colors = [ 
 | 
  'lightseagreen', 
 | 
  'forestgreen', 
 | 
  'goldenrod', 
 | 
  'dodgerblue', 
 | 
  'darkorchid', 
 | 
  'crimson' 
 | 
]; 
 | 
  
 | 
/** 
 | 
 * Currently only WebKit-based Web Inspectors, Firefox >= v31, 
 | 
 * and the Firebug extension (any Firefox version) are known 
 | 
 * to support "%c" CSS customizations. 
 | 
 * 
 | 
 * TODO: add a `localStorage` variable to explicitly enable/disable colors 
 | 
 */ 
 | 
  
 | 
function useColors() { 
 | 
  // NB: In an Electron preload script, document will be defined but not fully 
 | 
  // initialized. Since we know we're in Chrome, we'll just detect this case 
 | 
  // explicitly 
 | 
  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { 
 | 
    return true; 
 | 
  } 
 | 
  
 | 
  // is webkit? http://stackoverflow.com/a/16459606/376773 
 | 
  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 
 | 
  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || 
 | 
    // is firebug? http://stackoverflow.com/a/398120/376773 
 | 
    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || 
 | 
    // is firefox >= v31? 
 | 
    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages 
 | 
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || 
 | 
    // double check webkit in userAgent just in case we are in a worker 
 | 
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. 
 | 
 */ 
 | 
  
 | 
exports.formatters.j = function(v) { 
 | 
  try { 
 | 
    return JSON.stringify(v); 
 | 
  } catch (err) { 
 | 
    return '[UnexpectedJSONParseError]: ' + err.message; 
 | 
  } 
 | 
}; 
 | 
  
 | 
  
 | 
/** 
 | 
 * Colorize log arguments if enabled. 
 | 
 * 
 | 
 * @api public 
 | 
 */ 
 | 
  
 | 
function formatArgs(args) { 
 | 
  var useColors = this.useColors; 
 | 
  
 | 
  args[0] = (useColors ? '%c' : '') 
 | 
    + this.namespace 
 | 
    + (useColors ? ' %c' : ' ') 
 | 
    + args[0] 
 | 
    + (useColors ? '%c ' : ' ') 
 | 
    + '+' + exports.humanize(this.diff); 
 | 
  
 | 
  if (!useColors) return; 
 | 
  
 | 
  var c = 'color: ' + this.color; 
 | 
  args.splice(1, 0, c, 'color: inherit') 
 | 
  
 | 
  // the final "%c" is somewhat tricky, because there could be other 
 | 
  // arguments passed either before or after the %c, so we need to 
 | 
  // figure out the correct index to insert the CSS into 
 | 
  var index = 0; 
 | 
  var lastC = 0; 
 | 
  args[0].replace(/%[a-zA-Z%]/g, function(match) { 
 | 
    if ('%%' === match) return; 
 | 
    index++; 
 | 
    if ('%c' === match) { 
 | 
      // we only are interested in the *last* %c 
 | 
      // (the user may have provided their own) 
 | 
      lastC = index; 
 | 
    } 
 | 
  }); 
 | 
  
 | 
  args.splice(lastC, 0, c); 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Invokes `console.log()` when available. 
 | 
 * No-op when `console.log` is not a "function". 
 | 
 * 
 | 
 * @api public 
 | 
 */ 
 | 
  
 | 
function log() { 
 | 
  // this hackery is required for IE8/9, where 
 | 
  // the `console.log` function doesn't have 'apply' 
 | 
  return 'object' === typeof console 
 | 
    && console.log 
 | 
    && Function.prototype.apply.call(console.log, console, arguments); 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Save `namespaces`. 
 | 
 * 
 | 
 * @param {String} namespaces 
 | 
 * @api private 
 | 
 */ 
 | 
  
 | 
function save(namespaces) { 
 | 
  try { 
 | 
    if (null == namespaces) { 
 | 
      exports.storage.removeItem('debug'); 
 | 
    } else { 
 | 
      exports.storage.debug = namespaces; 
 | 
    } 
 | 
  } catch(e) {} 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Load `namespaces`. 
 | 
 * 
 | 
 * @return {String} returns the previously persisted debug modes 
 | 
 * @api private 
 | 
 */ 
 | 
  
 | 
function load() { 
 | 
  var r; 
 | 
  try { 
 | 
    r = exports.storage.debug; 
 | 
  } catch(e) {} 
 | 
  
 | 
  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG 
 | 
  if (!r && typeof process !== 'undefined' && 'env' in process) { 
 | 
    r = process.env.DEBUG; 
 | 
  } 
 | 
  
 | 
  return r; 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Enable namespaces listed in `localStorage.debug` initially. 
 | 
 */ 
 | 
  
 | 
exports.enable(load()); 
 | 
  
 | 
/** 
 | 
 * Localstorage attempts to return the localstorage. 
 | 
 * 
 | 
 * This is necessary because safari throws 
 | 
 * when a user disables cookies/localstorage 
 | 
 * and you attempt to access it. 
 | 
 * 
 | 
 * @return {LocalStorage} 
 | 
 * @api private 
 | 
 */ 
 | 
  
 | 
function localstorage() { 
 | 
  try { 
 | 
    return window.localStorage; 
 | 
  } catch (e) {} 
 | 
} 
 |