massive update, probably broken
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-json / node_modules / debug / src / browser.js
1 /**
2  * This is the web browser implementation of `debug()`.
3  *
4  * Expose `debug()` as the module.
5  */
6
7 exports = module.exports = require('./debug');
8 exports.log = log;
9 exports.formatArgs = formatArgs;
10 exports.save = save;
11 exports.load = load;
12 exports.useColors = useColors;
13 exports.storage = 'undefined' != typeof chrome
14                && 'undefined' != typeof chrome.storage
15                   ? chrome.storage.local
16                   : localstorage();
17
18 /**
19  * Colors.
20  */
21
22 exports.colors = [
23   '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
24   '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
25   '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
26   '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
27   '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
28   '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
29   '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
30   '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
31   '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
32   '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
33   '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
34 ];
35
36 /**
37  * Currently only WebKit-based Web Inspectors, Firefox >= v31,
38  * and the Firebug extension (any Firefox version) are known
39  * to support "%c" CSS customizations.
40  *
41  * TODO: add a `localStorage` variable to explicitly enable/disable colors
42  */
43
44 function useColors() {
45   // NB: In an Electron preload script, document will be defined but not fully
46   // initialized. Since we know we're in Chrome, we'll just detect this case
47   // explicitly
48   if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
49     return true;
50   }
51
52   // Internet Explorer and Edge do not support colors.
53   if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
54     return false;
55   }
56
57   // is webkit? http://stackoverflow.com/a/16459606/376773
58   // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
59   return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
60     // is firebug? http://stackoverflow.com/a/398120/376773
61     (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
62     // is firefox >= v31?
63     // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
64     (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
65     // double check webkit in userAgent just in case we are in a worker
66     (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
67 }
68
69 /**
70  * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
71  */
72
73 exports.formatters.j = function(v) {
74   try {
75     return JSON.stringify(v);
76   } catch (err) {
77     return '[UnexpectedJSONParseError]: ' + err.message;
78   }
79 };
80
81
82 /**
83  * Colorize log arguments if enabled.
84  *
85  * @api public
86  */
87
88 function formatArgs(args) {
89   var useColors = this.useColors;
90
91   args[0] = (useColors ? '%c' : '')
92     + this.namespace
93     + (useColors ? ' %c' : ' ')
94     + args[0]
95     + (useColors ? '%c ' : ' ')
96     + '+' + exports.humanize(this.diff);
97
98   if (!useColors) return;
99
100   var c = 'color: ' + this.color;
101   args.splice(1, 0, c, 'color: inherit')
102
103   // the final "%c" is somewhat tricky, because there could be other
104   // arguments passed either before or after the %c, so we need to
105   // figure out the correct index to insert the CSS into
106   var index = 0;
107   var lastC = 0;
108   args[0].replace(/%[a-zA-Z%]/g, function(match) {
109     if ('%%' === match) return;
110     index++;
111     if ('%c' === match) {
112       // we only are interested in the *last* %c
113       // (the user may have provided their own)
114       lastC = index;
115     }
116   });
117
118   args.splice(lastC, 0, c);
119 }
120
121 /**
122  * Invokes `console.log()` when available.
123  * No-op when `console.log` is not a "function".
124  *
125  * @api public
126  */
127
128 function log() {
129   // this hackery is required for IE8/9, where
130   // the `console.log` function doesn't have 'apply'
131   return 'object' === typeof console
132     && console.log
133     && Function.prototype.apply.call(console.log, console, arguments);
134 }
135
136 /**
137  * Save `namespaces`.
138  *
139  * @param {String} namespaces
140  * @api private
141  */
142
143 function save(namespaces) {
144   try {
145     if (null == namespaces) {
146       exports.storage.removeItem('debug');
147     } else {
148       exports.storage.debug = namespaces;
149     }
150   } catch(e) {}
151 }
152
153 /**
154  * Load `namespaces`.
155  *
156  * @return {String} returns the previously persisted debug modes
157  * @api private
158  */
159
160 function load() {
161   var r;
162   try {
163     r = exports.storage.debug;
164   } catch(e) {}
165
166   // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
167   if (!r && typeof process !== 'undefined' && 'env' in process) {
168     r = process.env.DEBUG;
169   }
170
171   return r;
172 }
173
174 /**
175  * Enable namespaces listed in `localStorage.debug` initially.
176  */
177
178 exports.enable(load());
179
180 /**
181  * Localstorage attempts to return the localstorage.
182  *
183  * This is necessary because safari throws
184  * when a user disables cookies/localstorage
185  * and you attempt to access it.
186  *
187  * @return {LocalStorage}
188  * @api private
189  */
190
191 function localstorage() {
192   try {
193     return window.localStorage;
194   } catch (e) {}
195 }