1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
|
10 | exports.coerce = coerce;
|
11 | exports.disable = disable;
|
12 | exports.enable = enable;
|
13 | exports.enabled = enabled;
|
14 | exports.humanize = require('ms');
|
15 |
|
16 |
|
17 |
|
18 |
|
19 | exports.instances = [];
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | exports.names = [];
|
26 | exports.skips = [];
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | exports.formatters = {};
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 | function selectColor(namespace) {
|
44 | var hash = 0, i;
|
45 |
|
46 | for (i in namespace) {
|
47 | hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
|
48 | hash |= 0;
|
49 | }
|
50 |
|
51 | return exports.colors[Math.abs(hash) % exports.colors.length];
|
52 | }
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 | function createDebug(namespace) {
|
63 |
|
64 | var prevTime;
|
65 |
|
66 | function debug() {
|
67 |
|
68 | if (!debug.enabled) return;
|
69 |
|
70 | var self = debug;
|
71 |
|
72 |
|
73 | var curr = +new Date();
|
74 | var ms = curr - (prevTime || curr);
|
75 | self.diff = ms;
|
76 | self.prev = prevTime;
|
77 | self.curr = curr;
|
78 | prevTime = curr;
|
79 |
|
80 |
|
81 | var args = new Array(arguments.length);
|
82 | for (var i = 0; i < args.length; i++) {
|
83 | args[i] = arguments[i];
|
84 | }
|
85 |
|
86 | args[0] = exports.coerce(args[0]);
|
87 |
|
88 | if ('string' !== typeof args[0]) {
|
89 |
|
90 | args.unshift('%O');
|
91 | }
|
92 |
|
93 |
|
94 | var index = 0;
|
95 | args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
|
96 |
|
97 | if (match === '%%') return match;
|
98 | index++;
|
99 | var formatter = exports.formatters[format];
|
100 | if ('function' === typeof formatter) {
|
101 | var val = args[index];
|
102 | match = formatter.call(self, val);
|
103 |
|
104 |
|
105 | args.splice(index, 1);
|
106 | index--;
|
107 | }
|
108 | return match;
|
109 | });
|
110 |
|
111 |
|
112 | exports.formatArgs.call(self, args);
|
113 |
|
114 | var logFn = debug.log || exports.log || console.log.bind(console);
|
115 | logFn.apply(self, args);
|
116 | }
|
117 |
|
118 | debug.namespace = namespace;
|
119 | debug.enabled = exports.enabled(namespace);
|
120 | debug.useColors = exports.useColors();
|
121 | debug.color = selectColor(namespace);
|
122 | debug.destroy = destroy;
|
123 |
|
124 |
|
125 | if ('function' === typeof exports.init) {
|
126 | exports.init(debug);
|
127 | }
|
128 |
|
129 | exports.instances.push(debug);
|
130 |
|
131 | return debug;
|
132 | }
|
133 |
|
134 | function destroy () {
|
135 | var index = exports.instances.indexOf(this);
|
136 | if (index !== -1) {
|
137 | exports.instances.splice(index, 1);
|
138 | return true;
|
139 | } else {
|
140 | return false;
|
141 | }
|
142 | }
|
143 |
|
144 |
|
145 |
|
146 |
|
147 |
|
148 |
|
149 |
|
150 |
|
151 |
|
152 | function enable(namespaces) {
|
153 | exports.save(namespaces);
|
154 |
|
155 | exports.names = [];
|
156 | exports.skips = [];
|
157 |
|
158 | var i;
|
159 | var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
|
160 | var len = split.length;
|
161 |
|
162 | for (i = 0; i < len; i++) {
|
163 | if (!split[i]) continue;
|
164 | namespaces = split[i].replace(/\*/g, '.*?');
|
165 | if (namespaces[0] === '-') {
|
166 | exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
|
167 | } else {
|
168 | exports.names.push(new RegExp('^' + namespaces + '$'));
|
169 | }
|
170 | }
|
171 |
|
172 | for (i = 0; i < exports.instances.length; i++) {
|
173 | var instance = exports.instances[i];
|
174 | instance.enabled = exports.enabled(instance.namespace);
|
175 | }
|
176 | }
|
177 |
|
178 |
|
179 |
|
180 |
|
181 |
|
182 |
|
183 |
|
184 | function disable() {
|
185 | exports.enable('');
|
186 | }
|
187 |
|
188 |
|
189 |
|
190 |
|
191 |
|
192 |
|
193 |
|
194 |
|
195 |
|
196 | function enabled(name) {
|
197 | if (name[name.length - 1] === '*') {
|
198 | return true;
|
199 | }
|
200 | var i, len;
|
201 | for (i = 0, len = exports.skips.length; i < len; i++) {
|
202 | if (exports.skips[i].test(name)) {
|
203 | return false;
|
204 | }
|
205 | }
|
206 | for (i = 0, len = exports.names.length; i < len; i++) {
|
207 | if (exports.names[i].test(name)) {
|
208 | return true;
|
209 | }
|
210 | }
|
211 | return false;
|
212 | }
|
213 |
|
214 |
|
215 |
|
216 |
|
217 |
|
218 |
|
219 |
|
220 |
|
221 |
|
222 | function coerce(val) {
|
223 | if (val instanceof Error) return val.stack || val.message;
|
224 | return val;
|
225 | }
|