Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Avatar for KuCalc : devops.
Download
50650 views
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
'lightseagreen',
24
'forestgreen',
25
'goldenrod',
26
'dodgerblue',
27
'darkorchid',
28
'crimson'
29
];
30
31
/**
32
* Currently only WebKit-based Web Inspectors, Firefox >= v31,
33
* and the Firebug extension (any Firefox version) are known
34
* to support "%c" CSS customizations.
35
*
36
* TODO: add a `localStorage` variable to explicitly enable/disable colors
37
*/
38
39
function useColors() {
40
// NB: In an Electron preload script, document will be defined but not fully
41
// initialized. Since we know we're in Chrome, we'll just detect this case
42
// explicitly
43
if (window && window.process && window.process.type === 'renderer') {
44
return true;
45
}
46
47
// is webkit? http://stackoverflow.com/a/16459606/376773
48
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
49
return (document && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
50
// is firebug? http://stackoverflow.com/a/398120/376773
51
(window && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
52
// is firefox >= v31?
53
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
54
(navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
55
// double check webkit in userAgent just in case we are in a worker
56
(navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
57
}
58
59
/**
60
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
61
*/
62
63
exports.formatters.j = function(v) {
64
try {
65
return JSON.stringify(v);
66
} catch (err) {
67
return '[UnexpectedJSONParseError]: ' + err.message;
68
}
69
};
70
71
72
/**
73
* Colorize log arguments if enabled.
74
*
75
* @api public
76
*/
77
78
function formatArgs(args) {
79
var useColors = this.useColors;
80
81
args[0] = (useColors ? '%c' : '')
82
+ this.namespace
83
+ (useColors ? ' %c' : ' ')
84
+ args[0]
85
+ (useColors ? '%c ' : ' ')
86
+ '+' + exports.humanize(this.diff);
87
88
if (!useColors) return;
89
90
var c = 'color: ' + this.color;
91
args.splice(1, 0, c, 'color: inherit')
92
93
// the final "%c" is somewhat tricky, because there could be other
94
// arguments passed either before or after the %c, so we need to
95
// figure out the correct index to insert the CSS into
96
var index = 0;
97
var lastC = 0;
98
args[0].replace(/%[a-zA-Z%]/g, function(match) {
99
if ('%%' === match) return;
100
index++;
101
if ('%c' === match) {
102
// we only are interested in the *last* %c
103
// (the user may have provided their own)
104
lastC = index;
105
}
106
});
107
108
args.splice(lastC, 0, c);
109
}
110
111
/**
112
* Invokes `console.log()` when available.
113
* No-op when `console.log` is not a "function".
114
*
115
* @api public
116
*/
117
118
function log() {
119
// this hackery is required for IE8/9, where
120
// the `console.log` function doesn't have 'apply'
121
return 'object' === typeof console
122
&& console.log
123
&& Function.prototype.apply.call(console.log, console, arguments);
124
}
125
126
/**
127
* Save `namespaces`.
128
*
129
* @param {String} namespaces
130
* @api private
131
*/
132
133
function save(namespaces) {
134
try {
135
if (null == namespaces) {
136
exports.storage.removeItem('debug');
137
} else {
138
exports.storage.debug = namespaces;
139
}
140
} catch(e) {}
141
}
142
143
/**
144
* Load `namespaces`.
145
*
146
* @return {String} returns the previously persisted debug modes
147
* @api private
148
*/
149
150
function load() {
151
var r;
152
try {
153
r = exports.storage.debug;
154
} catch(e) {}
155
156
// If debug isn't set in LS, and we're in Electron, try to load $DEBUG
157
if (!r && typeof process !== 'undefined' && 'env' in process) {
158
r = process.env.DEBUG;
159
}
160
161
return r;
162
}
163
164
/**
165
* Enable namespaces listed in `localStorage.debug` initially.
166
*/
167
168
exports.enable(load());
169
170
/**
171
* Localstorage attempts to return the localstorage.
172
*
173
* This is necessary because safari throws
174
* when a user disables cookies/localstorage
175
* and you attempt to access it.
176
*
177
* @return {LocalStorage}
178
* @api private
179
*/
180
181
function localstorage() {
182
try {
183
return window.localStorage;
184
} catch (e) {}
185
}
186
187