Spaces:
Sleeping
Sleeping
| /** | |
| * 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) {} | |
| } | |